Skip to content

Commit

Permalink
Merge pull request #125 from google/shinfan-dev
Browse files Browse the repository at this point in the history
Add builder pattern to AppEngine credentials
  • Loading branch information
shinfan committed Sep 7, 2017
2 parents 4504fc1 + 0831e15 commit 0fab63c
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 13 deletions.
45 changes: 45 additions & 0 deletions appengine/java/com/google/auth/appengine/AppEngineCredentials.java
Expand Up @@ -62,10 +62,12 @@ public class AppEngineCredentials extends GoogleCredentials implements ServiceAc

private transient AppIdentityService appIdentityService;

@Deprecated
public AppEngineCredentials(Collection<String> scopes) {
this(scopes, null);
}

@Deprecated
public AppEngineCredentials(Collection<String> scopes, AppIdentityService appIdentityService) {
this.scopes = scopes == null ? ImmutableSet.<String>of() : ImmutableList.copyOf(scopes);
this.appIdentityService = appIdentityService != null ? appIdentityService
Expand Down Expand Up @@ -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<String> scopes;
private AppIdentityService appIdentityService;

protected Builder() {}

protected Builder(AppEngineCredentials credentials) {
this.scopes = credentials.scopes;
this.appIdentityService = credentials.appIdentityService;
}

public Builder setScopes(Collection<String> scopes) {
this.scopes = scopes;
return this;
}

public Builder setAppIdentityService(AppIdentityService appIdentityService) {
this.appIdentityService = appIdentityService;
return this;
}

public Collection<String> getScopes() {
return scopes;
}

public AppIdentityService getAppIdentityService() {
return appIdentityService;
}

public AppEngineCredentials build() {
return new AppEngineCredentials(scopes, appIdentityService);
}
}
}
Expand Up @@ -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());
Expand All @@ -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());
}

Expand All @@ -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));
}

Expand All @@ -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);
Expand All @@ -143,8 +154,15 @@ public void createScoped_clonesWithScopes() throws IOException {
public void equals_true() throws IOException {
final Collection<String> 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));
Expand All @@ -155,8 +173,15 @@ public void equals_false_scopes() throws IOException {
final Collection<String> emptyScopes = Collections.emptyList();
final Collection<String> 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));
}
Expand All @@ -170,24 +195,38 @@ public void toString_containsFields() throws IOException {
MockAppIdentityService.class.getName());
final Collection<String> 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());
}

@Test
public void hashCode_equals() throws IOException {
final Collection<String> 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());
}

@Test
public void serialize() throws IOException, ClassNotFoundException {
final Collection<String> 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());
Expand Down

0 comments on commit 0fab63c

Please sign in to comment.