Skip to content

Commit f7db492

Browse files
authored
Revert "Update packages for googleapis_auth breaking changes (#170)"
This reverts commit 4304fa3.
1 parent 4304fa3 commit f7db492

File tree

20 files changed

+61
-44
lines changed

20 files changed

+61
-44
lines changed

packages/dart_firebase_admin/lib/src/app.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ 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;
109
import 'package:google_cloud/google_cloud.dart' as google_cloud;
1110
import 'package:googleapis/identitytoolkit/v3.dart' as auth3;
1211
import 'package:googleapis_auth/auth_io.dart' as googleapis_auth;

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ 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+
3842
@override
3943
Future<StreamedResponse> send(BaseRequest request) async {
4044
final modifiedRequest = _RequestImpl(
@@ -72,6 +76,10 @@ class CloudTasksEmulatorClient implements googleapis_auth.AuthClient {
7276
googleapis_auth.AccessCredentials get credentials =>
7377
throw UnimplementedError();
7478

79+
@override
80+
googleapis_auth.ServiceAccountCredentials? get serviceAccountCredentials =>
81+
null;
82+
7583
/// Rewrites the URL to remove `/v2/` prefix and route to emulator host.
7684
Uri _rewriteUrl(Uri url) {
7785
// 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.projectIdEnvironmentVariableOptions) {
143+
for (final envKey in google_cloud.gcpProjectIdEnvironmentVariables) {
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: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ 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';
78
import 'app_check.dart';
89
import 'app_check_api.dart';
910

@@ -32,7 +33,7 @@ class AppCheckTokenGenerator {
3233
]) async {
3334
try {
3435
final authClient = await app.client;
35-
final account = await authClient.getServiceAccountEmail();
36+
final account = await authClient.getServiceAccountEmail;
3637

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

4849
final token = '${_encodeSegment(header)}.${_encodeSegment(body)}';
4950

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

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

packages/dart_firebase_admin/lib/src/auth.dart

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

1515
import 'app.dart';
1616
import 'object_utils.dart';
17+
import 'utils/auth_extension.dart';
1718
import 'utils/jwt.dart';
1819
import 'utils/utils.dart';
1920
import 'utils/validator.dart';

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

Lines changed: 2 additions & 6 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,11 +87,7 @@ class _FirebaseTokenGenerator {
8787
};
8888

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

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

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ 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';
89
import '../utils/validator.dart';
910

1011
part 'functions_api.dart';

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

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

256-
// Service credentials via `FirebaseApp.options`.
257-
final isComputeEngine =
258-
_httpClient.app.options.credential?.serviceAccountCredentials == null;
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;
259261

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

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

279281
if (serviceAccountEmail.isEmpty) {
280282
throw FirebaseFunctionsAdminException(
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import 'package:googleapis_auth/auth_io.dart' as googleapis_auth;
2+
3+
import '../app.dart';
4+
5+
extension AuthExtension on googleapis_auth.AuthClient {
6+
Future<String> get getServiceAccountEmail async =>
7+
serviceAccountCredentials?.email ??
8+
googleapis_auth.IAMSigner(this).getServiceAccountEmail();
9+
10+
/// Signs the given data using the IAM Credentials API or local credentials.
11+
///
12+
/// Returns a base64-encoded signature string. In emulator mode, returns an
13+
/// empty string to produce unsigned tokens.
14+
Future<String> signBlob(List<int> data, {String? endpoint}) async =>
15+
Environment.isAuthEmulatorEnabled() ? '' : sign(data, endpoint: endpoint);
16+
}

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.3.0
17+
google_cloud: ^0.2.1-beta.1
1818
googleapis: ^15.0.0
1919
googleapis_auth: ^2.1.0-beta.1
2020
googleapis_beta: ^9.0.0

0 commit comments

Comments
 (0)