OAuth2AuthCredentials(String accessToken, Date expirationTime) { this.accessToken = checkNotNull(accessToken); this.expirationTime = expirationTime; this.credentials = new GoogleCredentials(new AccessToken(accessToken, expirationTime)); }
/** * Refresh the access token by getting it from the App Identity service. */ @Override public AccessToken refreshAccessToken() throws IOException { if (createScopedRequired()) { throw new IOException("AppEngineCredentials requires createScoped call before use."); } try { Object accessTokenResult = getAccessTokenResult.invoke(appIdentityService, scopes); String accessToken = (String) getAccessToken.invoke(accessTokenResult); Date expirationTime = (Date) getExpirationTime.invoke(accessTokenResult); return new AccessToken(accessToken, expirationTime); } catch (Exception e) { throw new IOException("Could not get the access token.", e); } }
/** * Get CallCredentials from OAuthCredentials * * @param oAuthCredentials the credentials from the AuthenticationHelper * @return the CallCredentials for the GRPC requests */ private CallCredentials getCallCredentials(OAuthCredentials oAuthCredentials) { AccessToken accessToken = new AccessToken( oAuthCredentials.getAccessToken(), new Date(oAuthCredentials.getExpirationTime()) ); OAuth2Credentials oAuth2Credentials = new OAuth2Credentials(accessToken); // Create an instance of {@link io.grpc.CallCredentials} return MoreCallCredentials.from(oAuth2Credentials); }
/** * Refresh the access token by getting it from the App Identity service */ @Override public AccessToken refreshAccessToken() throws IOException { if (createScopedRequired()) { throw new IOException("AppEngineCredentials requires createScoped call before use."); } GetAccessTokenResult accessTokenResponse = appIdentityService.getAccessToken(scopes); String accessToken = accessTokenResponse.getAccessToken(); Date expirationTime = accessTokenResponse.getExpirationTime(); return new AccessToken(accessToken, expirationTime); }
@Test public void equals_false_expirationDate() throws IOException { AccessToken accessToken = new AccessToken(TOKEN, EXPIRATION_DATE); AccessToken otherAccessToken = new AccessToken(TOKEN, new Date(EXPIRATION_DATE.getTime() + 42)); assertFalse(accessToken.equals(otherAccessToken)); assertFalse(otherAccessToken.equals(accessToken)); }
@Test public void toString_containsFields() { AccessToken accessToken = new AccessToken(TOKEN, EXPIRATION_DATE); String expectedToString = String.format("AccessToken{tokenValue=%s, expirationTimeMillis=%d}", TOKEN, EXPIRATION_DATE.getTime()); assertEquals(expectedToString, accessToken.toString()); }
@Test public void hashCode_equals() throws IOException { AccessToken accessToken = new AccessToken(TOKEN, EXPIRATION_DATE); AccessToken otherAccessToken = new AccessToken(TOKEN, EXPIRATION_DATE); assertEquals(accessToken.hashCode(), otherAccessToken.hashCode()); }
@Test public void equals_true() throws IOException { AccessToken accessToken = new AccessToken(TOKEN, EXPIRATION_DATE); AccessToken otherAccessToken = new AccessToken(TOKEN, EXPIRATION_DATE); assertTrue(accessToken.equals(otherAccessToken)); assertTrue(otherAccessToken.equals(accessToken)); }
@Test public void equals_false_token() throws IOException { AccessToken accessToken = new AccessToken(TOKEN, EXPIRATION_DATE); AccessToken otherAccessToken = new AccessToken("otherToken", EXPIRATION_DATE); assertFalse(accessToken.equals(otherAccessToken)); assertFalse(otherAccessToken.equals(accessToken)); }
@Test public void hashCode_equals() throws IOException { final String accessToken = "1/MkSJoj1xsli0AccessToken_NKPY2"; OAuth2Credentials credentials = OAuth2Credentials.newBuilder() .setAccessToken(new AccessToken(accessToken, null)) .build(); OAuth2Credentials otherCredentials = OAuth2Credentials.create(new AccessToken(accessToken, null)); assertEquals(credentials.hashCode(), otherCredentials.hashCode()); }
@Test public void toString_containsFields() throws IOException { AccessToken accessToken = new AccessToken("1/MkSJoj1xsli0AccessToken_NKPY2", null); OAuth2Credentials credentials = OAuth2Credentials.newBuilder() .setAccessToken(accessToken) .build(); String expectedToString = String.format("OAuth2Credentials{requestMetadata=%s, temporaryAccess=%s}", ImmutableMap.of(AuthHttpConstants.AUTHORIZATION, ImmutableList.of(OAuth2Utils.BEARER_PREFIX + accessToken.getTokenValue())), accessToken.toString()); assertEquals(expectedToString, credentials.toString()); }
@Test public void constructor() { AccessToken accessToken = new AccessToken(TOKEN, EXPIRATION_DATE); assertEquals(TOKEN, accessToken.getTokenValue()); assertEquals(EXPIRATION_DATE, accessToken.getExpirationTime()); assertEquals(EXPIRATION_DATE.getTime(), (long) accessToken.getExpirationTimeMillis()); }
@Test(expected = IllegalStateException.class) public void refresh_temporaryToken_throws() throws IOException { OAuth2Credentials credentials = OAuth2Credentials.newBuilder() .setAccessToken(new AccessToken(ACCESS_TOKEN, null)) .build(); credentials.refresh(); }
@Test public void equals_true() throws IOException { final String accessToken1 = "1/MkSJoj1xsli0AccessToken_NKPY2"; OAuth2Credentials credentials = OAuth2Credentials.newBuilder() .setAccessToken(new AccessToken(accessToken1, null)) .build(); OAuth2Credentials otherCredentials = OAuth2Credentials.newBuilder() .setAccessToken(new AccessToken(accessToken1, null)) .build(); assertTrue(credentials.equals(otherCredentials)); assertTrue(otherCredentials.equals(credentials)); }
@Test public void equals_false_accessToken() throws IOException { final String accessToken1 = "1/MkSJoj1xsli0AccessToken_NKPY2"; final String accessToken2 = "2/MkSJoj1xsli0AccessToken_NKPY2"; OAuth2Credentials credentials = OAuth2Credentials.newBuilder() .setAccessToken(new AccessToken(accessToken1, null)) .build(); OAuth2Credentials otherCredentials = OAuth2Credentials.newBuilder() .setAccessToken(new AccessToken(accessToken2, null)) .build(); assertFalse(credentials.equals(otherCredentials)); assertFalse(otherCredentials.equals(credentials)); }
@Test public void getRequestMetadata_temporaryToken_hasToken() throws IOException { OAuth2Credentials credentials = OAuth2Credentials.newBuilder() .setAccessToken(new AccessToken(ACCESS_TOKEN, null)) .build(); // Verify getting the first token Map<String, List<String>> metadata = credentials.getRequestMetadata(CALL_URI); TestUtils.assertContainsBearerToken(metadata, ACCESS_TOKEN); }
@Test public void constructor_storesAccessToken() { OAuth2Credentials credentials = OAuth2Credentials.newBuilder() .setAccessToken(new AccessToken(ACCESS_TOKEN, null)) .build(); assertEquals(credentials.getAccessToken().getTokenValue(), ACCESS_TOKEN); }
@Test public void serialize() throws IOException, ClassNotFoundException { AccessToken accessToken = new AccessToken(TOKEN, EXPIRATION_DATE); AccessToken deserializedAccessToken = serializeAndDeserialize(accessToken); assertEquals(accessToken, deserializedAccessToken); assertEquals(accessToken.hashCode(), deserializedAccessToken.hashCode()); assertEquals(accessToken.toString(), deserializedAccessToken.toString()); } }
@Test public void getRequestMetadata_initialToken_hasAccessToken() throws IOException { MockTokenServerTransportFactory transportFactory = new MockTokenServerTransportFactory(); transportFactory.transport.addClient(CLIENT_ID, CLIENT_SECRET); AccessToken accessToken = new AccessToken(ACCESS_TOKEN, null); UserCredentials userCredentials = UserCredentials.newBuilder() .setClientId(CLIENT_ID) .setClientSecret(CLIENT_SECRET) .setAccessToken(accessToken) .setHttpTransportFactory(transportFactory) .build(); Map<String, List<String>> metadata = userCredentials.getRequestMetadata(CALL_URI); TestUtils.assertContainsBearerToken(metadata, ACCESS_TOKEN); }
@Test public void serialize() throws IOException, ClassNotFoundException { final String accessToken = "1/MkSJoj1xsli0AccessToken_NKPY2"; OAuth2Credentials credentials = OAuth2Credentials.newBuilder() .setAccessToken(new AccessToken(accessToken, null)) .build(); OAuth2Credentials deserializedCredentials = serializeAndDeserialize(credentials); assertEquals(credentials, deserializedCredentials); assertEquals(credentials.hashCode(), deserializedCredentials.hashCode()); assertEquals(credentials.toString(), deserializedCredentials.toString()); assertSame(deserializedCredentials.clock, Clock.SYSTEM); }