|
25 | 25 | import static org.junit.Assert.assertTrue;
|
26 | 26 | import static org.junit.Assert.fail;
|
27 | 27 |
|
| 28 | +import com.google.api.client.json.GenericJson; |
| 29 | +import com.google.api.client.json.JsonParser; |
28 | 30 | import com.google.api.client.testing.http.MockHttpTransport;
|
29 | 31 | import com.google.api.client.testing.http.MockLowLevelHttpResponse;
|
30 | 32 | import com.google.api.core.ApiFuture;
|
|
36 | 38 | import com.google.firebase.FirebaseApp;
|
37 | 39 | import com.google.firebase.FirebaseOptions;
|
38 | 40 | import com.google.firebase.TestOnlyImplFirebaseTrampolines;
|
| 41 | +import com.google.firebase.internal.ApiClientUtils; |
39 | 42 | import com.google.firebase.internal.FirebaseProcessEnvironment;
|
40 | 43 | import com.google.firebase.testing.ServiceAccount;
|
41 | 44 | import com.google.firebase.testing.TestResponseInterceptor;
|
42 | 45 | import com.google.firebase.testing.TestUtils;
|
| 46 | + |
| 47 | +import java.io.IOException; |
| 48 | +import java.util.ArrayList; |
| 49 | +import java.util.Map; |
43 | 50 | import java.util.concurrent.ExecutionException;
|
44 | 51 | import java.util.concurrent.TimeUnit;
|
45 | 52 | import java.util.concurrent.TimeoutException;
|
@@ -246,6 +253,22 @@ public void testVerifyIdTokenWithRevocationCheck() throws Exception {
|
246 | 253 | assertEquals("idtoken", tokenVerifier.getLastTokenString());
|
247 | 254 | }
|
248 | 255 |
|
| 256 | + @Test |
| 257 | + public void testVerifyIdTokenWithRevocationCheckAndUserDisabled() throws Exception { |
| 258 | + MockTokenVerifier tokenVerifier = MockTokenVerifier.fromResult( |
| 259 | + getFirebaseToken(VALID_SINCE + 1000)); |
| 260 | + FirebaseAuth auth = |
| 261 | + getAuthForIdTokenVerificationWithRevocationCheckWithDisabledUser(tokenVerifier); |
| 262 | + try { |
| 263 | + auth.verifyIdToken("idtoken", true); |
| 264 | + fail("No exception thrown for disabled user."); |
| 265 | + } catch (FirebaseAuthException e) { |
| 266 | + assertEquals(ErrorCode.INVALID_ARGUMENT, e.getErrorCode()); |
| 267 | + assertEquals(AuthErrorCode.USER_DISABLED, e.getAuthErrorCode()); |
| 268 | + assertEquals("The user record is disabled.", e.getMessage()); |
| 269 | + } |
| 270 | + } |
| 271 | + |
249 | 272 | @Test
|
250 | 273 | public void testVerifyIdTokenWithRevocationCheckFailure() {
|
251 | 274 | MockTokenVerifier tokenVerifier = MockTokenVerifier.fromResult(
|
@@ -444,6 +467,22 @@ public void testVerifySessionCookieWithRevocationCheck() throws Exception {
|
444 | 467 | assertEquals("cookie", tokenVerifier.getLastTokenString());
|
445 | 468 | }
|
446 | 469 |
|
| 470 | + @Test |
| 471 | + public void testVerifySessionCookieWithRevocationCheckAndUserDisabled() throws Exception { |
| 472 | + MockTokenVerifier tokenVerifier = MockTokenVerifier.fromResult( |
| 473 | + getFirebaseToken(VALID_SINCE + 1000)); |
| 474 | + FirebaseAuth auth = |
| 475 | + getAuthForSessionCookieVerificationWithRevocationCheckAndUserDisabled(tokenVerifier); |
| 476 | + try { |
| 477 | + auth.verifySessionCookie("cookie", true); |
| 478 | + fail("No exception thrown for disabled user."); |
| 479 | + } catch (FirebaseAuthException e) { |
| 480 | + assertEquals(ErrorCode.INVALID_ARGUMENT, e.getErrorCode()); |
| 481 | + assertEquals(AuthErrorCode.USER_DISABLED, e.getAuthErrorCode()); |
| 482 | + assertEquals("The user record is disabled.", e.getMessage()); |
| 483 | + } |
| 484 | + } |
| 485 | + |
447 | 486 | @Test
|
448 | 487 | public void testVerifySessionCookieWithRevocationCheckFailure() {
|
449 | 488 | MockTokenVerifier tokenVerifier = MockTokenVerifier.fromResult(
|
@@ -513,6 +552,12 @@ FirebaseAuth getAuthForIdTokenVerificationWithRevocationCheck(
|
513 | 552 | return getAuthForIdTokenVerification(app, Suppliers.ofInstance(tokenVerifier));
|
514 | 553 | }
|
515 | 554 |
|
| 555 | + FirebaseAuth getAuthForIdTokenVerificationWithRevocationCheckWithDisabledUser( |
| 556 | + FirebaseTokenVerifier tokenVerifier) throws IOException { |
| 557 | + FirebaseApp app = getFirebaseAppForDisabledUserRetrieval(); |
| 558 | + return getAuthForIdTokenVerification(app, Suppliers.ofInstance(tokenVerifier)); |
| 559 | + } |
| 560 | + |
516 | 561 | private FirebaseAuth getAuthForIdTokenVerification(FirebaseTokenVerifier tokenVerifier) {
|
517 | 562 | return getAuthForIdTokenVerification(Suppliers.ofInstance(tokenVerifier));
|
518 | 563 | }
|
@@ -540,6 +585,12 @@ FirebaseAuth getAuthForSessionCookieVerificationWithRevocationCheck(
|
540 | 585 | return getAuthForSessionCookieVerification(app, Suppliers.ofInstance(tokenVerifier));
|
541 | 586 | }
|
542 | 587 |
|
| 588 | + FirebaseAuth getAuthForSessionCookieVerificationWithRevocationCheckAndUserDisabled( |
| 589 | + FirebaseTokenVerifier tokenVerifier) throws IOException { |
| 590 | + FirebaseApp app = getFirebaseAppForDisabledUserRetrieval(); |
| 591 | + return getAuthForSessionCookieVerification(app, Suppliers.ofInstance(tokenVerifier)); |
| 592 | + } |
| 593 | + |
543 | 594 | private FirebaseAuth getAuthForSessionCookieVerification(FirebaseTokenVerifier tokenVerifier) {
|
544 | 595 | return getAuthForSessionCookieVerification(Suppliers.ofInstance(tokenVerifier));
|
545 | 596 | }
|
@@ -573,6 +624,25 @@ private FirebaseApp getFirebaseAppForUserRetrieval() {
|
573 | 624 | .build());
|
574 | 625 | }
|
575 | 626 |
|
| 627 | + private FirebaseApp getFirebaseAppForDisabledUserRetrieval() throws IOException { |
| 628 | + String getUserResponse = TestUtils.loadResource("getUser.json"); |
| 629 | + JsonParser parser = ApiClientUtils.getDefaultJsonFactory().createJsonParser(getUserResponse); |
| 630 | + GenericJson json = |
| 631 | + parser.parseAndClose(GenericJson.class); |
| 632 | + Map<String, Object> users = |
| 633 | + ((ArrayList<Map<String, Object>>) json.get("users")).get(0); |
| 634 | + users.put("disabled", true); |
| 635 | + |
| 636 | + MockHttpTransport transport = new MockHttpTransport.Builder() |
| 637 | + .setLowLevelHttpResponse(new MockLowLevelHttpResponse().setContent(json.toString())) |
| 638 | + .build(); |
| 639 | + return FirebaseApp.initializeApp(FirebaseOptions.builder() |
| 640 | + .setCredentials(new MockGoogleCredentials("test-token")) |
| 641 | + .setHttpTransport(transport) |
| 642 | + .setProjectId("test-project-id") |
| 643 | + .build()); |
| 644 | + } |
| 645 | + |
576 | 646 | public static TestResponseInterceptor setUserManager(
|
577 | 647 | AbstractFirebaseAuth.Builder<?> builder, FirebaseApp app, String tenantId) {
|
578 | 648 | TestResponseInterceptor interceptor = new TestResponseInterceptor();
|
|
0 commit comments