diff --git a/spring-social-core/src/main/java/org/springframework/social/oauth2/OAuth2Operations.java b/spring-social-core/src/main/java/org/springframework/social/oauth2/OAuth2Operations.java index 4e479e860..565c8facc 100644 --- a/spring-social-core/src/main/java/org/springframework/social/oauth2/OAuth2Operations.java +++ b/spring-social-core/src/main/java/org/springframework/social/oauth2/OAuth2Operations.java @@ -61,4 +61,12 @@ public interface OAuth2Operations { */ AccessGrant refreshAccess(String refreshToken, String scope, MultiValueMap additionalParameters); + /** + * Request an extension of a short access grant to a longer one + * @param refreshToken the refresh token from the previous access grant. + * @param scope optional scope to narrow to when refreshing access; if null, the existing scope is preserved. + * @param additionalParameters any additional parameters to be sent when refreshing a previous access grant. Should not be encoded. + * @return the access grant. + */ + AccessGrant extendAccess(String refreshToken, String scope, MultiValueMap additionalParameters); } diff --git a/spring-social-core/src/main/java/org/springframework/social/oauth2/OAuth2Template.java b/spring-social-core/src/main/java/org/springframework/social/oauth2/OAuth2Template.java index d57dd54f2..74cc44d53 100644 --- a/spring-social-core/src/main/java/org/springframework/social/oauth2/OAuth2Template.java +++ b/spring-social-core/src/main/java/org/springframework/social/oauth2/OAuth2Template.java @@ -40,11 +40,11 @@ */ public class OAuth2Template implements OAuth2Operations { - private final String clientId; + protected final String clientId; - private final String clientSecret; + protected final String clientSecret; - private final String accessTokenUrl; + protected final String accessTokenUrl; private final String authorizeUrl; @@ -119,6 +119,10 @@ public AccessGrant refreshAccess(String refreshToken, String scope, MultiValueMa return postForAccessGrant(accessTokenUrl, params); } + public AccessGrant extendAccess(String refreshToken, String scope, MultiValueMap additionalParameters) { + return refreshAccess(refreshToken, scope, additionalParameters); + } + // subclassing hooks /** diff --git a/spring-social-core/src/test/java/org/springframework/social/connect/jdbc/JdbcUsersConnectionRepositoryTest.java b/spring-social-core/src/test/java/org/springframework/social/connect/jdbc/JdbcUsersConnectionRepositoryTest.java index ac84cbed6..370c17fb9 100644 --- a/spring-social-core/src/test/java/org/springframework/social/connect/jdbc/JdbcUsersConnectionRepositoryTest.java +++ b/spring-social-core/src/test/java/org/springframework/social/connect/jdbc/JdbcUsersConnectionRepositoryTest.java @@ -480,7 +480,10 @@ public AccessGrant exchangeForAccess(String authorizationGrant, String redirectU } public AccessGrant refreshAccess(String refreshToken, String scope, MultiValueMap additionalParameters) { return new AccessGrant("765432109", "read", "654321098", 3600); - } + } + public AccessGrant extendAccess(String refreshToken, String scope, MultiValueMap additionalParameters) { + return new AccessGrant("765432109", "read", "654321098", 3600); + } }; } diff --git a/spring-social-core/src/test/java/org/springframework/social/connect/oauth2/StubOAuth2Operations.java b/spring-social-core/src/test/java/org/springframework/social/connect/oauth2/StubOAuth2Operations.java index 19c856c3c..96ce5119c 100644 --- a/spring-social-core/src/test/java/org/springframework/social/connect/oauth2/StubOAuth2Operations.java +++ b/spring-social-core/src/test/java/org/springframework/social/connect/oauth2/StubOAuth2Operations.java @@ -38,4 +38,8 @@ public AccessGrant exchangeForAccess(String authorizationGrant, String redirectU public AccessGrant refreshAccess(String refreshToken, String scope, MultiValueMap additionalParameters) { return new AccessGrant("12345", null, "23456", 3600); } + + public AccessGrant extendAccess(String refreshToken, String scope, MultiValueMap additionalParameters) { + return new AccessGrant("12345", null, "23456", 3600); + } } \ No newline at end of file diff --git a/spring-social-web/src/test/java/org/springframework/social/connect/web/ConnectSupportTest.java b/spring-social-web/src/test/java/org/springframework/social/connect/web/ConnectSupportTest.java index 4bd52b4f5..5a3c821af 100644 --- a/spring-social-web/src/test/java/org/springframework/social/connect/web/ConnectSupportTest.java +++ b/spring-social-web/src/test/java/org/springframework/social/connect/web/ConnectSupportTest.java @@ -429,6 +429,9 @@ public AccessGrant exchangeForAccess(String authorizationGrant, String redirectU public AccessGrant refreshAccess(String refreshToken, String scope, MultiValueMap additionalParameters) { return null; } + public AccessGrant extendAccess(String refreshToken, String scope, MultiValueMap additionalParameters) { + return null; + } }; }