Skip to content

Commit 4304fa3

Browse files
kevmoodemolaf
andauthored
Update packages for googleapis_auth breaking changes (#170)
* Update packages for googleapis_auth breaking changes Accommodate breaking changes from googleapis_auth, specifically the removal of the `serviceAccountCredentials` getter and the refactoring of cryptographic signing. - Update `AuthClient.sign()` usages across dart_firebase_admin and googleapis_storage. The method now returns a `Future<String>` (base64-encoded signature) instead of an object with a `signedBlob` property. - Explicitly pass `serviceAccountCredentials` into `sign()` invocations where available to maintain local RSA signing capabilities. - Remove `serviceAccountCredentials` overrides from EmulatorClient implementations in dart_firebase_admin, googleapis_storage, and googleapis_firestore. - Update Compute Engine environment detection in FunctionsRequestHandler to check internal credential options instead of the removed AuthClient.serviceAccountCredentials. - Delete local AuthExtension helpers in dart_firebase_admin and googleapis_storage, migrating to the newly provided AuthClientSigningExtension methods. - Update authClient.getServiceAccountEmail usages from a getter to a method invocation. * OVERRIDES for in-flight PR Will replace when google/googleapis.dart#717 lands * test: fix functions test mock for metadata server email resolution --------- Co-authored-by: Ademola Fadumo <48495111+demolaf@users.noreply.github.com>
1 parent 361f450 commit 4304fa3

File tree

20 files changed

+44
-61
lines changed

20 files changed

+44
-61
lines changed

packages/dart_firebase_admin/lib/src/app.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'dart:io';
66
import 'dart:typed_data';
77

88
import 'package:equatable/equatable.dart';
9+
import 'package:google_cloud/constants.dart' as google_cloud;
910
import 'package:google_cloud/google_cloud.dart' as google_cloud;
1011
import 'package:googleapis/identitytoolkit/v3.dart' as auth3;
1112
import 'package:googleapis_auth/auth_io.dart' as googleapis_auth;

packages/dart_firebase_admin/lib/src/app/emulator_client.dart

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,6 @@ class EmulatorClient extends BaseClient implements googleapis_auth.AuthClient {
3535
googleapis_auth.AccessCredentials get credentials =>
3636
throw UnimplementedError();
3737

38-
@override
39-
googleapis_auth.ServiceAccountCredentials? get serviceAccountCredentials =>
40-
null;
41-
4238
@override
4339
Future<StreamedResponse> send(BaseRequest request) async {
4440
final modifiedRequest = _RequestImpl(
@@ -76,10 +72,6 @@ class CloudTasksEmulatorClient implements googleapis_auth.AuthClient {
7672
googleapis_auth.AccessCredentials get credentials =>
7773
throw UnimplementedError();
7874

79-
@override
80-
googleapis_auth.ServiceAccountCredentials? get serviceAccountCredentials =>
81-
null;
82-
8375
/// Rewrites the URL to remove `/v2/` prefix and route to emulator host.
8476
Uri _rewriteUrl(Uri url) {
8577
// Replace the path: remove /v2/ prefix if present

packages/dart_firebase_admin/lib/src/app/firebase_app.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ class FirebaseApp {
140140
}) async {
141141
final env = environment ?? Zone.current[envSymbol] as Map<String, String>?;
142142
if (env != null) {
143-
for (final envKey in google_cloud.gcpProjectIdEnvironmentVariables) {
143+
for (final envKey in google_cloud.projectIdEnvironmentVariableOptions) {
144144
final value = env[envKey];
145145
if (value != null) return value;
146146
}

packages/dart_firebase_admin/lib/src/app_check/token_generator.dart

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import 'package:googleapis_auth/auth_io.dart' as googleapis_auth;
44
import 'package:meta/meta.dart';
55

66
import '../../dart_firebase_admin.dart';
7-
import '../utils/auth_extension.dart';
87
import 'app_check.dart';
98
import 'app_check_api.dart';
109

@@ -33,7 +32,7 @@ class AppCheckTokenGenerator {
3332
]) async {
3433
try {
3534
final authClient = await app.client;
36-
final account = await authClient.getServiceAccountEmail;
35+
final account = await authClient.getServiceAccountEmail();
3736

3837
final header = {'alg': 'RS256', 'typ': 'JWT'};
3938
final iat = (DateTime.now().millisecondsSinceEpoch / 1000).floor();
@@ -48,7 +47,11 @@ class AppCheckTokenGenerator {
4847

4948
final token = '${_encodeSegment(header)}.${_encodeSegment(body)}';
5049

51-
final signature = await authClient.signBlob(utf8.encode(token));
50+
final signature = await authClient.sign(
51+
utf8.encode(token),
52+
serviceAccountCredentials:
53+
app.options.credential?.serviceAccountCredentials,
54+
);
5255

5356
return '$token.$signature';
5457
} on googleapis_auth.ServerRequestFailedException catch (err) {

packages/dart_firebase_admin/lib/src/auth.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import 'package:meta/meta.dart';
1414

1515
import 'app.dart';
1616
import 'object_utils.dart';
17-
import 'utils/auth_extension.dart';
1817
import 'utils/jwt.dart';
1918
import 'utils/utils.dart';
2019
import 'utils/validator.dart';

packages/dart_firebase_admin/lib/src/auth/token_generator.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class _FirebaseTokenGenerator {
7171

7272
try {
7373
final authClient = await _app.client;
74-
final account = await authClient.getServiceAccountEmail;
74+
final account = await authClient.getServiceAccountEmail();
7575

7676
final header = {'alg': 'RS256', 'typ': 'JWT'};
7777
final iat = DateTime.now().millisecondsSinceEpoch ~/ 1000;
@@ -87,7 +87,11 @@ class _FirebaseTokenGenerator {
8787
};
8888

8989
final token = '${_encodeSegment(header)}.${_encodeSegment(body)}';
90-
final signature = await authClient.signBlob(utf8.encode(token));
90+
final signature = await authClient.sign(
91+
utf8.encode(token),
92+
serviceAccountCredentials:
93+
_app.options.credential?.serviceAccountCredentials,
94+
);
9195

9296
return '$token.$signature';
9397
} on googleapis_auth.ServerRequestFailedException catch (err, stack) {

packages/dart_firebase_admin/lib/src/functions/functions.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import 'package:googleapis_auth/auth_io.dart' as googleapis_auth;
55
import 'package:meta/meta.dart';
66

77
import '../app.dart';
8-
import '../utils/auth_extension.dart';
98
import '../utils/validator.dart';
109

1110
part 'functions_api.dart';

packages/dart_firebase_admin/lib/src/functions/functions_request_handler.dart

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -253,11 +253,9 @@ class FunctionsRequestHandler {
253253
return;
254254
}
255255

256-
// Check if running as an extension with ComputeEngine credentials.
257-
// ComputeEngine credentials are used when running on GCE/Cloud Run without
258-
// a service account JSON file - indicated by credentials without local
259-
// service account credentials (i.e., using metadata server).
260-
final isComputeEngine = authClient.serviceAccountCredentials == null;
256+
// Service credentials via `FirebaseApp.options`.
257+
final isComputeEngine =
258+
_httpClient.app.options.credential?.serviceAccountCredentials == null;
261259

262260
if (extensionId != null && extensionId.isNotEmpty && isComputeEngine) {
263261
// Running as extension with ComputeEngine - use ID token with Authorization header.
@@ -276,7 +274,7 @@ class FunctionsRequestHandler {
276274

277275
// Default: Use OIDC token with service account email.
278276
// Try to get service account email from credential first, then from metadata service.
279-
final serviceAccountEmail = await authClient.getServiceAccountEmail;
277+
final serviceAccountEmail = await authClient.getServiceAccountEmail();
280278

281279
if (serviceAccountEmail.isEmpty) {
282280
throw FirebaseFunctionsAdminException(

packages/dart_firebase_admin/lib/src/utils/auth_extension.dart

Lines changed: 0 additions & 16 deletions
This file was deleted.

packages/dart_firebase_admin/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ dependencies:
1414
collection: ^1.18.0
1515
dart_jsonwebtoken: ^3.0.0
1616
equatable: ^2.0.7
17-
google_cloud: ^0.2.1-beta.1
17+
google_cloud: ^0.3.0
1818
googleapis: ^15.0.0
1919
googleapis_auth: ^2.1.0-beta.1
2020
googleapis_beta: ^9.0.0

0 commit comments

Comments
 (0)