diff --git a/appengine/java/com/google/auth/appengine/AppEngineCredentials.java b/appengine/java/com/google/auth/appengine/AppEngineCredentials.java index 548a028b1..5a83ed4d7 100644 --- a/appengine/java/com/google/auth/appengine/AppEngineCredentials.java +++ b/appengine/java/com/google/auth/appengine/AppEngineCredentials.java @@ -62,10 +62,12 @@ public class AppEngineCredentials extends GoogleCredentials implements ServiceAc private transient AppIdentityService appIdentityService; + @Deprecated public AppEngineCredentials(Collection scopes) { this(scopes, null); } + @Deprecated public AppEngineCredentials(Collection scopes, AppIdentityService appIdentityService) { this.scopes = scopes == null ? ImmutableSet.of() : ImmutableList.copyOf(scopes); this.appIdentityService = appIdentityService != null ? appIdentityService @@ -137,4 +139,47 @@ private void readObject(ObjectInputStream input) throws IOException, ClassNotFou input.defaultReadObject(); appIdentityService = newInstance(appIdentityServiceClassName); } + + public static Builder newBuilder() { + return new Builder(); + } + + public Builder toBuilder() { + return new Builder(this); + } + + public static class Builder extends GoogleCredentials.Builder { + + private Collection scopes; + private AppIdentityService appIdentityService; + + protected Builder() {} + + protected Builder(AppEngineCredentials credentials) { + this.scopes = credentials.scopes; + this.appIdentityService = credentials.appIdentityService; + } + + public Builder setScopes(Collection scopes) { + this.scopes = scopes; + return this; + } + + public Builder setAppIdentityService(AppIdentityService appIdentityService) { + this.appIdentityService = appIdentityService; + return this; + } + + public Collection getScopes() { + return scopes; + } + + public AppIdentityService getAppIdentityService() { + return appIdentityService; + } + + public AppEngineCredentials build() { + return new AppEngineCredentials(scopes, appIdentityService); + } + } } diff --git a/appengine/javatests/com/google/auth/appengine/AppEngineCredentialsTest.java b/appengine/javatests/com/google/auth/appengine/AppEngineCredentialsTest.java index 79147b730..52e2518dd 100644 --- a/appengine/javatests/com/google/auth/appengine/AppEngineCredentialsTest.java +++ b/appengine/javatests/com/google/auth/appengine/AppEngineCredentialsTest.java @@ -89,7 +89,10 @@ public void refreshAccessToken_sameAs() throws IOException { MockAppIdentityService appIdentity = new MockAppIdentityService(); appIdentity.setAccessTokenText(expectedAccessToken); appIdentity.setExpiration(new Date(System.currentTimeMillis() + 60L * 60L * 100L)); - AppEngineCredentials credentials = new AppEngineCredentials(SCOPES, appIdentity); + AppEngineCredentials credentials = AppEngineCredentials.newBuilder() + .setScopes(SCOPES) + .setAppIdentityService(appIdentity) + .build(); AccessToken accessToken = credentials.refreshAccessToken(); assertEquals(appIdentity.getAccessTokenText(), accessToken.getTokenValue()); assertEquals(appIdentity.getExpiration(), accessToken.getExpirationTime()); @@ -99,7 +102,10 @@ public void refreshAccessToken_sameAs() throws IOException { public void getAccount_sameAs() throws IOException { MockAppIdentityService appIdentity = new MockAppIdentityService(); appIdentity.setServiceAccountName(EXPECTED_ACCOUNT); - AppEngineCredentials credentials = new AppEngineCredentials(SCOPES, appIdentity); + AppEngineCredentials credentials = AppEngineCredentials.newBuilder() + .setScopes(SCOPES) + .setAppIdentityService(appIdentity) + .build(); assertEquals(EXPECTED_ACCOUNT, credentials.getAccount()); } @@ -108,7 +114,10 @@ public void sign_sameAs() throws IOException { byte[] expectedSignature = {0xD, 0xE, 0xA, 0xD}; MockAppIdentityService appIdentity = new MockAppIdentityService(); appIdentity.setSignature(expectedSignature); - AppEngineCredentials credentials = new AppEngineCredentials(SCOPES, appIdentity); + AppEngineCredentials credentials = AppEngineCredentials.newBuilder() + .setScopes(SCOPES) + .setAppIdentityService(appIdentity) + .build(); assertArrayEquals(expectedSignature, credentials.sign(expectedSignature)); } @@ -120,8 +129,10 @@ public void createScoped_clonesWithScopes() throws IOException { MockAppIdentityService appIdentity = new MockAppIdentityService(); appIdentity.setAccessTokenText(expectedAccessToken); - GoogleCredentials credentials = new AppEngineCredentials(emptyScopes, appIdentity); - + AppEngineCredentials credentials = AppEngineCredentials.newBuilder() + .setScopes(emptyScopes) + .setAppIdentityService(appIdentity) + .build(); assertTrue(credentials.createScopedRequired()); try { credentials.getRequestMetadata(CALL_URI); @@ -143,8 +154,15 @@ public void createScoped_clonesWithScopes() throws IOException { public void equals_true() throws IOException { final Collection emptyScopes = Collections.emptyList(); MockAppIdentityService appIdentity = new MockAppIdentityService(); - GoogleCredentials credentials = new AppEngineCredentials(emptyScopes, appIdentity); - GoogleCredentials otherCredentials = new AppEngineCredentials(emptyScopes, appIdentity); + + AppEngineCredentials credentials = AppEngineCredentials.newBuilder() + .setScopes(emptyScopes) + .setAppIdentityService(appIdentity) + .build(); + AppEngineCredentials otherCredentials = AppEngineCredentials.newBuilder() + .setScopes(emptyScopes) + .setAppIdentityService(appIdentity) + .build(); assertTrue(credentials.equals(credentials)); assertTrue(credentials.equals(otherCredentials)); assertTrue(otherCredentials.equals(credentials)); @@ -155,8 +173,15 @@ public void equals_false_scopes() throws IOException { final Collection emptyScopes = Collections.emptyList(); final Collection scopes = Collections.singleton("SomeScope"); MockAppIdentityService appIdentity = new MockAppIdentityService(); - GoogleCredentials credentials = new AppEngineCredentials(emptyScopes, appIdentity); - GoogleCredentials otherCredentials = new AppEngineCredentials(scopes, appIdentity); + + AppEngineCredentials credentials = AppEngineCredentials.newBuilder() + .setScopes(emptyScopes) + .setAppIdentityService(appIdentity) + .build(); + AppEngineCredentials otherCredentials = AppEngineCredentials.newBuilder() + .setScopes(scopes) + .setAppIdentityService(appIdentity) + .build(); assertFalse(credentials.equals(otherCredentials)); assertFalse(otherCredentials.equals(credentials)); } @@ -170,7 +195,12 @@ public void toString_containsFields() throws IOException { MockAppIdentityService.class.getName()); final Collection scopes = Collections.singleton("SomeScope"); MockAppIdentityService appIdentity = new MockAppIdentityService(); - GoogleCredentials credentials = new AppEngineCredentials(scopes, appIdentity); + + AppEngineCredentials credentials = AppEngineCredentials.newBuilder() + .setScopes(scopes) + .setAppIdentityService(appIdentity) + .build(); + assertEquals(expectedToString, credentials.toString()); } @@ -178,8 +208,14 @@ public void toString_containsFields() throws IOException { public void hashCode_equals() throws IOException { final Collection emptyScopes = Collections.emptyList(); MockAppIdentityService appIdentity = new MockAppIdentityService(); - GoogleCredentials credentials = new AppEngineCredentials(emptyScopes, appIdentity); - GoogleCredentials otherCredentials = new AppEngineCredentials(emptyScopes, appIdentity); + AppEngineCredentials credentials = AppEngineCredentials.newBuilder() + .setScopes(emptyScopes) + .setAppIdentityService(appIdentity) + .build(); + AppEngineCredentials otherCredentials = AppEngineCredentials.newBuilder() + .setScopes(emptyScopes) + .setAppIdentityService(appIdentity) + .build(); assertEquals(credentials.hashCode(), otherCredentials.hashCode()); } @@ -187,7 +223,10 @@ public void hashCode_equals() throws IOException { public void serialize() throws IOException, ClassNotFoundException { final Collection scopes = Collections.singleton("SomeScope"); MockAppIdentityService appIdentity = new MockAppIdentityService(); - GoogleCredentials credentials = new AppEngineCredentials(scopes, appIdentity); + AppEngineCredentials credentials = AppEngineCredentials.newBuilder() + .setScopes(scopes) + .setAppIdentityService(appIdentity) + .build(); GoogleCredentials deserializedCredentials = serializeAndDeserialize(credentials); assertEquals(credentials, deserializedCredentials); assertEquals(credentials.hashCode(), deserializedCredentials.hashCode());