blob: 8c8ede5eee1a8bda18e783e5c2de648ab687d282 [file] [log] [blame]
// Copyright 2020 The Flutter Authors
//
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
import 'package:meta/meta.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:googleapis_auth/auth.dart' as googleapis_auth;
import 'package:http/http.dart' as http;
/// Extension on [GoogleSignIn] that adds an `authenticatedClient` method.
///
/// This method can be used to retrieve an authenticated [googleapis_auth.AuthClient]
/// client that can be used with the rest of the `googleapis` libraries.
extension GoogleApisGoogleSignInAuth on GoogleSignIn {
/// Retrieve a `googleapis` authenticated client.
Future<googleapis_auth.AuthClient?> authenticatedClient({
@visibleForTesting GoogleSignInAuthentication? debugAuthentication,
@visibleForTesting List<String>? debugScopes,
}) async {
final GoogleSignInAuthentication? auth =
debugAuthentication ?? await currentUser?.authentication;
final String? oathTokenString = auth?.accessToken;
if (oathTokenString == null) {
return null;
}
final credentials = googleapis_auth.AccessCredentials(
googleapis_auth.AccessToken(
'Bearer',
oathTokenString,
// We don't know when the token expires, so we assume "never"
DateTime.now().toUtc().add(Duration(days: 365)),
),
null, // We don't have a refreshToken
debugScopes ?? this.scopes,
);
return googleapis_auth.authenticatedClient(http.Client(), credentials);
}
}