Skip to content

Commit 72d53a3

Browse files
committed
feat(auth): add revokeAccessToken support for Android (#18206)
1 parent 1f1b4f0 commit 72d53a3

File tree

7 files changed

+114
-0
lines changed

7 files changed

+114
-0
lines changed

packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPlugin.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -678,6 +678,27 @@ public void revokeTokenWithAuthorizationCode(
678678
result.success();
679679
}
680680

681+
@Override
682+
public void revokeAccessToken(
683+
@NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app,
684+
@NonNull String accessToken,
685+
@NonNull GeneratedAndroidFirebaseAuth.VoidResult result) {
686+
FirebaseAuth firebaseAuth = getAuthFromPigeon(app);
687+
688+
firebaseAuth
689+
.revokeAccessToken(accessToken)
690+
.addOnCompleteListener(
691+
task -> {
692+
if (task.isSuccessful()) {
693+
result.success();
694+
} else {
695+
result.error(
696+
FlutterFirebaseAuthPluginException.parserExceptionToFlutter(
697+
task.getException()));
698+
}
699+
});
700+
}
701+
681702
@Override
682703
public void initializeRecaptchaConfig(
683704
@NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app,

packages/firebase_auth/firebase_auth/android/src/main/java/io/flutter/plugins/firebase/auth/GeneratedAndroidFirebaseAuth.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2642,6 +2642,11 @@ void revokeTokenWithAuthorizationCode(
26422642
@NonNull String authorizationCode,
26432643
@NonNull VoidResult result);
26442644

2645+
void revokeAccessToken(
2646+
@NonNull AuthPigeonFirebaseApp app,
2647+
@NonNull String accessToken,
2648+
@NonNull VoidResult result);
2649+
26452650
void initializeRecaptchaConfig(@NonNull AuthPigeonFirebaseApp app, @NonNull VoidResult result);
26462651

26472652
/** The codec used by FirebaseAuthHostApi. */
@@ -3397,6 +3402,39 @@ public void error(Throwable error) {
33973402
channel.setMessageHandler(null);
33983403
}
33993404
}
3405+
{
3406+
BasicMessageChannel<Object> channel =
3407+
new BasicMessageChannel<>(
3408+
binaryMessenger,
3409+
"dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.revokeAccessToken"
3410+
+ messageChannelSuffix,
3411+
getCodec());
3412+
if (api != null) {
3413+
channel.setMessageHandler(
3414+
(message, reply) -> {
3415+
ArrayList<Object> wrapped = new ArrayList<Object>();
3416+
ArrayList<Object> args = (ArrayList<Object>) message;
3417+
AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0);
3418+
String accessTokenArg = (String) args.get(1);
3419+
VoidResult resultCallback =
3420+
new VoidResult() {
3421+
public void success() {
3422+
wrapped.add(0, null);
3423+
reply.reply(wrapped);
3424+
}
3425+
3426+
public void error(Throwable error) {
3427+
ArrayList<Object> wrappedError = wrapError(error);
3428+
reply.reply(wrappedError);
3429+
}
3430+
};
3431+
3432+
api.revokeAccessToken(appArg, accessTokenArg, resultCallback);
3433+
});
3434+
} else {
3435+
channel.setMessageHandler(null);
3436+
}
3437+
}
34003438
{
34013439
BasicMessageChannel<Object> channel =
34023440
new BasicMessageChannel<>(

packages/firebase_auth/firebase_auth/lib/src/firebase_auth.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -798,6 +798,11 @@ class FirebaseAuth extends FirebasePluginPlatform {
798798
return _delegate.revokeTokenWithAuthorizationCode(authorizationCode);
799799
}
800800

801+
/// Android only. Revokes the provided accessToken. Currently supports revoking Apple-issued accessToken only.
802+
Future<void> revokeAccessToken(String accessToken) {
803+
return _delegate.revokeAccessToken(accessToken);
804+
}
805+
801806
/// Signs out the current user.
802807
///
803808
/// If successful, it also updates

packages/firebase_auth/firebase_auth_platform_interface/lib/src/method_channel/method_channel_firebase_auth.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -664,6 +664,20 @@ class MethodChannelFirebaseAuth extends FirebaseAuthPlatform {
664664
}
665665
}
666666

667+
@override
668+
Future<void> revokeAccessToken(String accessToken) async {
669+
if (defaultTargetPlatform != TargetPlatform.android) {
670+
throw UnimplementedError(
671+
'revokeAccessToken() is only available on the Android platform.');
672+
}
673+
674+
try {
675+
await _api.revokeAccessToken(pigeonDefault, accessToken);
676+
} catch (e, stack) {
677+
convertPlatformException(e, stack);
678+
}
679+
}
680+
667681
@override
668682
Future<void> initializeRecaptchaConfig() async {
669683
try {

packages/firebase_auth/firebase_auth_platform_interface/lib/src/pigeon/messages.pigeon.dart

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1479,6 +1479,31 @@ class FirebaseAuthHostApi {
14791479
}
14801480
}
14811481

1482+
Future<void> revokeAccessToken(
1483+
AuthPigeonFirebaseApp app, String accessToken) async {
1484+
final String __pigeon_channelName =
1485+
'dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.revokeAccessToken$__pigeon_messageChannelSuffix';
1486+
final BasicMessageChannel<Object?> __pigeon_channel =
1487+
BasicMessageChannel<Object?>(
1488+
__pigeon_channelName,
1489+
pigeonChannelCodec,
1490+
binaryMessenger: __pigeon_binaryMessenger,
1491+
);
1492+
final List<Object?>? __pigeon_replyList = await __pigeon_channel
1493+
.send(<Object?>[app, accessToken]) as List<Object?>?;
1494+
if (__pigeon_replyList == null) {
1495+
throw _createConnectionError(__pigeon_channelName);
1496+
} else if (__pigeon_replyList.length > 1) {
1497+
throw PlatformException(
1498+
code: __pigeon_replyList[0]! as String,
1499+
message: __pigeon_replyList[1] as String?,
1500+
details: __pigeon_replyList[2],
1501+
);
1502+
} else {
1503+
return;
1504+
}
1505+
}
1506+
14821507
Future<void> initializeRecaptchaConfig(AuthPigeonFirebaseApp app) async {
14831508
final String __pigeon_channelName =
14841509
'dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.initializeRecaptchaConfig$__pigeon_messageChannelSuffix';

packages/firebase_auth/firebase_auth_platform_interface/lib/src/platform_interface/platform_interface_firebase_auth.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,11 @@ abstract class FirebaseAuthPlatform extends PlatformInterface {
717717
'revokeTokenWithAuthorizationCode() is not implemented');
718718
}
719719

720+
/// Android only. Revokes the provided accessToken. Currently supports revoking Apple-issued accessToken only.
721+
Future<void> revokeAccessToken(String accessToken) {
722+
throw UnimplementedError('revokeAccessToken() is not implemented');
723+
}
724+
720725
/// Initializes the reCAPTCHA Enterprise client proactively to enhance reCAPTCHA signal collection and
721726
/// to complete reCAPTCHA-protected flows in a single attempt.
722727
Future<void> initializeRecaptchaConfig() {

packages/firebase_auth/firebase_auth_platform_interface/pigeons/messages.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,12 @@ abstract class FirebaseAuthHostApi {
420420
String authorizationCode,
421421
);
422422

423+
@async
424+
void revokeAccessToken(
425+
AuthPigeonFirebaseApp app,
426+
String accessToken,
427+
);
428+
423429
@async
424430
void initializeRecaptchaConfig(
425431
AuthPigeonFirebaseApp app,

0 commit comments

Comments
 (0)