[go: nahoru, domu]

Skip to content

Commit

Permalink
Add FAC getLimitedUseToken to internal interop interface (#4979)
Browse files Browse the repository at this point in the history
* Add FAC getLimitedUseToken to internal interop interface

* Typo

* Changelog

* Formatting

* PR feedback
  • Loading branch information
sam-gc committed May 12, 2023
1 parent bbc9ca2 commit da1495b
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,15 @@ public interface InteropAppCheckTokenProvider {
@NonNull
Task<AppCheckTokenResult> getToken(boolean forceRefresh);

/**
* Requests an {@link AppCheckTokenResult} from the installed {@code AppCheckFactory}. This will
* always return a successful task, with an {@link AppCheckTokenResult} that contains either a
* valid token, or a dummy token and an error string. The token returned from this method will be
* a one-time use token.
*/
@NonNull
Task<AppCheckTokenResult> getLimitedUseToken();

/**
* Registers a listener to changes in the token state. There can be more than one listener
* registered at the same time for one or more FirebaseAppAuth instances. The listeners call back
Expand Down
2 changes: 1 addition & 1 deletion appcheck/firebase-appcheck/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Unreleased

* [changed] Internal updates to allow Firebase SDKs to obtain limited-use tokens.

# 17.0.0
* [feature] Added [`getLimitedUseAppCheckToken()`](/docs/reference/android/com/google/firebase/appcheck/FirebaseAppCheck#getLimitedUseAppCheckToken())
Expand Down
2 changes: 1 addition & 1 deletion appcheck/firebase-appcheck/firebase-appcheck.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ dependencies {
implementation 'com.google.firebase:firebase-annotations:16.2.0'
implementation 'com.google.firebase:firebase-common:20.3.1'
implementation 'com.google.firebase:firebase-components:17.1.0'
implementation 'com.google.firebase:firebase-appcheck-interop:17.0.0'
implementation project(':appcheck:firebase-appcheck-interop')
implementation 'com.google.android.gms:play-services-base:18.0.1'
implementation 'com.google.android.gms:play-services-tasks:18.0.1'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,28 @@ public Task<AppCheckTokenResult> getToken(boolean forceRefresh) {
});
}

@NonNull
@Override
public Task<AppCheckTokenResult> getLimitedUseToken() {
return getLimitedUseAppCheckToken()
.continueWithTask(
liteExecutor,
appCheckTokenTask -> {
if (appCheckTokenTask.isSuccessful()) {
return Tasks.forResult(
DefaultAppCheckTokenResult.constructFromAppCheckToken(
appCheckTokenTask.getResult()));
}
// If the token exchange failed, return a dummy token for integrators to attach
// in their headers.
return Tasks.forResult(
DefaultAppCheckTokenResult.constructFromError(
new FirebaseException(
appCheckTokenTask.getException().getMessage(),
appCheckTokenTask.getException())));
});
}

@NonNull
@Override
public Task<AppCheckToken> getAppCheckToken(boolean forceRefresh) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,15 @@ public void testGetLimitedUseAppCheckToken_noFactoryInstalled_taskFails() throws
assertThat(tokenTask.isSuccessful()).isFalse();
}

@Test
public void testGetLimitedUseToken_noFactoryInstalled_returnResultWithError() throws Exception {
Task<AppCheckTokenResult> tokenTask = defaultFirebaseAppCheck.getLimitedUseToken();
assertThat(tokenTask.isComplete()).isTrue();
assertThat(tokenTask.isSuccessful()).isTrue();
assertThat(tokenTask.getResult().getToken()).isNotNull();
assertThat(tokenTask.getResult().getError()).isNotNull();
}

@Test
public void testGetToken_factoryInstalled_proxiesToAppCheckFactory() {
defaultFirebaseAppCheck.installAppCheckProviderFactory(mockAppCheckProviderFactory);
Expand Down Expand Up @@ -422,4 +431,23 @@ public void testGetLimitedUseAppCheckToken_existingToken_requestsNewToken() {

verify(mockAppCheckProvider).getToken();
}

@Test
public void testGetLimitedUseToken_noExistingToken_requestsNewToken() {
defaultFirebaseAppCheck.installAppCheckProviderFactory(mockAppCheckProviderFactory);

defaultFirebaseAppCheck.getLimitedUseToken();

verify(mockAppCheckProvider).getToken();
}

@Test
public void testGetLimitedUseToken_existingToken_requestsNewToken() {
defaultFirebaseAppCheck.setCachedToken(validDefaultAppCheckToken);
defaultFirebaseAppCheck.installAppCheckProviderFactory(mockAppCheckProviderFactory);

defaultFirebaseAppCheck.getLimitedUseToken();

verify(mockAppCheckProvider).getToken();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,12 @@ public Task<AppCheckTokenResult> getToken(boolean forceRefresh) {
return Tasks.forResult(testToken);
}

@NonNull
@Override
public Task<AppCheckTokenResult> getLimitedUseToken() {
return Tasks.forResult(testToken);
}

@Override
public void addAppCheckTokenListener(@NonNull AppCheckTokenListener listener) {}

Expand Down

0 comments on commit da1495b

Please sign in to comment.