diff --git a/oauth2_http/java/com/google/auth/oauth2/UserCredentials.java b/oauth2_http/java/com/google/auth/oauth2/UserCredentials.java index a2ba5a52d..453ee5ec8 100644 --- a/oauth2_http/java/com/google/auth/oauth2/UserCredentials.java +++ b/oauth2_http/java/com/google/auth/oauth2/UserCredentials.java @@ -124,13 +124,16 @@ static UserCredentials fromJson(Map json, HttpTransportFactory t "Error reading user credential from JSON, " + " expecting 'client_id', 'client_secret' and 'refresh_token'."); } + // currently "token_uri" is not a default field and needs to be added to json file manually + String tokenUrl = (String) json.get("token_uri"); + URI tokenUri = (tokenUrl == null || tokenUrl.isEmpty()) ? null : URI.create(tokenUrl); return UserCredentials.newBuilder() .setClientId(clientId) .setClientSecret(clientSecret) .setRefreshToken(refreshToken) .setAccessToken(null) .setHttpTransportFactory(transportFactory) - .setTokenServerUri(null) + .setTokenServerUri(tokenUri) .setQuotaProjectId(quotaProjectId) .build(); } diff --git a/oauth2_http/javatests/com/google/auth/oauth2/UserCredentialsTest.java b/oauth2_http/javatests/com/google/auth/oauth2/UserCredentialsTest.java index a9019939f..27cd44b37 100644 --- a/oauth2_http/javatests/com/google/auth/oauth2/UserCredentialsTest.java +++ b/oauth2_http/javatests/com/google/auth/oauth2/UserCredentialsTest.java @@ -131,7 +131,7 @@ public void fromJson_hasAccessToken() throws IOException { MockTokenServerTransportFactory transportFactory = new MockTokenServerTransportFactory(); transportFactory.transport.addClient(CLIENT_ID, CLIENT_SECRET); transportFactory.transport.addRefreshToken(REFRESH_TOKEN, ACCESS_TOKEN); - GenericJson json = writeUserJson(CLIENT_ID, CLIENT_SECRET, REFRESH_TOKEN, null); + GenericJson json = writeUserJson(CLIENT_ID, CLIENT_SECRET, REFRESH_TOKEN, null, null); GoogleCredentials credentials = UserCredentials.fromJson(json, transportFactory); @@ -139,12 +139,36 @@ public void fromJson_hasAccessToken() throws IOException { TestUtils.assertContainsBearerToken(metadata, ACCESS_TOKEN); } + @Test + public void fromJson_hasTokenUri() throws IOException { + String tokenUrl = "token.url.xyz"; + MockTokenServerTransportFactory transportFactory = new MockTokenServerTransportFactory(); + transportFactory.transport.addClient(CLIENT_ID, CLIENT_SECRET); + transportFactory.transport.addRefreshToken(REFRESH_TOKEN, ACCESS_TOKEN); + GenericJson json = writeUserJson(CLIENT_ID, CLIENT_SECRET, REFRESH_TOKEN, null, tokenUrl); + + UserCredentials credentials = UserCredentials.fromJson(json, transportFactory); + assertEquals(URI.create(tokenUrl), credentials.toBuilder().getTokenServerUri()); + } + + @Test + public void fromJson_emptyTokenUri() throws IOException { + String tokenUrl = ""; + MockTokenServerTransportFactory transportFactory = new MockTokenServerTransportFactory(); + transportFactory.transport.addClient(CLIENT_ID, CLIENT_SECRET); + transportFactory.transport.addRefreshToken(REFRESH_TOKEN, ACCESS_TOKEN); + GenericJson json = writeUserJson(CLIENT_ID, CLIENT_SECRET, REFRESH_TOKEN, null, tokenUrl); + + UserCredentials credentials = UserCredentials.fromJson(json, transportFactory); + assertEquals(OAuth2Utils.TOKEN_SERVER_URI, credentials.toBuilder().getTokenServerUri()); + } + @Test public void fromJson_hasQuotaProjectId() throws IOException { MockTokenServerTransportFactory transportFactory = new MockTokenServerTransportFactory(); transportFactory.transport.addClient(CLIENT_ID, CLIENT_SECRET); transportFactory.transport.addRefreshToken(REFRESH_TOKEN, ACCESS_TOKEN); - GenericJson json = writeUserJson(CLIENT_ID, CLIENT_SECRET, REFRESH_TOKEN, QUOTA_PROJECT); + GenericJson json = writeUserJson(CLIENT_ID, CLIENT_SECRET, REFRESH_TOKEN, QUOTA_PROJECT, null); GoogleCredentials credentials = UserCredentials.fromJson(json, transportFactory); @@ -865,7 +889,11 @@ public void userCredentials_toBuilder_copyEveryAttribute() { } static GenericJson writeUserJson( - String clientId, String clientSecret, String refreshToken, String quotaProjectId) { + String clientId, + String clientSecret, + String refreshToken, + String quotaProjectId, + String tokenUrl) { GenericJson json = new GenericJson(); if (clientId != null) { json.put("client_id", clientId); @@ -879,6 +907,9 @@ static GenericJson writeUserJson( if (quotaProjectId != null) { json.put("quota_project_id", quotaProjectId); } + if (tokenUrl != null) { + json.put("token_uri", tokenUrl); + } json.put("type", GoogleCredentials.USER_FILE_TYPE); return json; } @@ -886,7 +917,7 @@ static GenericJson writeUserJson( static InputStream writeUserStream( String clientId, String clientSecret, String refreshToken, String quotaProjectId) throws IOException { - GenericJson json = writeUserJson(clientId, clientSecret, refreshToken, quotaProjectId); + GenericJson json = writeUserJson(clientId, clientSecret, refreshToken, quotaProjectId, null); return TestUtils.jsonToInputStream(json); }