@@ -3,7 +3,13 @@ package scalaoauth2.provider
33import scala .concurrent .Future
44import scala .concurrent .ExecutionContext .Implicits .global
55
6- case class GrantHandlerResult (tokenType : String , accessToken : String , expiresIn : Option [Long ], refreshToken : Option [String ], scope : Option [String ])
6+ case class GrantHandlerResult [U ](
7+ authInfo : AuthInfo [U ],
8+ tokenType : String ,
9+ accessToken : String ,
10+ expiresIn : Option [Long ],
11+ refreshToken : Option [String ],
12+ scope : Option [String ])
713
814trait GrantHandler {
915 /**
@@ -13,12 +19,12 @@ trait GrantHandler {
1319 */
1420 def clientCredentialRequired = true
1521
16- def handleRequest [U ](request : AuthorizationRequest , authorizationHandler : AuthorizationHandler [U ]): Future [GrantHandlerResult ]
22+ def handleRequest [U ](request : AuthorizationRequest , authorizationHandler : AuthorizationHandler [U ]): Future [GrantHandlerResult [ U ] ]
1723
1824 /**
1925 * Returns valid access token.
2026 */
21- protected def issueAccessToken [U ](handler : AuthorizationHandler [U ], authInfo : AuthInfo [U ]): Future [GrantHandlerResult ] = {
27+ protected def issueAccessToken [U ](handler : AuthorizationHandler [U ], authInfo : AuthInfo [U ]): Future [GrantHandlerResult [ U ] ] = {
2228 handler.getStoredAccessToken(authInfo).flatMap {
2329 case Some (token) if shouldRefreshAccessToken(token) => token.refreshToken.map {
2430 handler.refreshAccessToken(authInfo, _)
@@ -27,12 +33,13 @@ trait GrantHandler {
2733 }
2834 case Some (token) => Future .successful(token)
2935 case None => handler.createAccessToken(authInfo)
30- }.map(createGrantHandlerResult)
36+ }.map(createGrantHandlerResult(authInfo, _) )
3137 }
3238
3339 protected def shouldRefreshAccessToken (token : AccessToken ) = token.isExpired
3440
35- protected def createGrantHandlerResult (accessToken : AccessToken ) = GrantHandlerResult (
41+ protected def createGrantHandlerResult [U ](authInfo : AuthInfo [U ], accessToken : AccessToken ) = GrantHandlerResult (
42+ authInfo,
3643 " Bearer" ,
3744 accessToken.token,
3845 accessToken.expiresIn,
@@ -44,7 +51,7 @@ trait GrantHandler {
4451
4552class RefreshToken extends GrantHandler {
4653
47- override def handleRequest [U ](request : AuthorizationRequest , handler : AuthorizationHandler [U ]): Future [GrantHandlerResult ] = {
54+ override def handleRequest [U ](request : AuthorizationRequest , handler : AuthorizationHandler [U ]): Future [GrantHandlerResult [ U ] ] = {
4855 val refreshTokenRequest = new RefreshTokenRequest (request)
4956 val clientCredential = refreshTokenRequest.clientCredential.getOrElse(throw new InvalidRequest (" Client credential is required" ))
5057 val refreshToken = refreshTokenRequest.refreshToken
@@ -55,14 +62,14 @@ class RefreshToken extends GrantHandler {
5562 throw new InvalidClient
5663 }
5764
58- handler.refreshAccessToken(authInfo, refreshToken).map(createGrantHandlerResult)
65+ handler.refreshAccessToken(authInfo, refreshToken).map(createGrantHandlerResult(authInfo, _) )
5966 }
6067 }
6168}
6269
6370class Password extends GrantHandler {
6471
65- override def handleRequest [U ](request : AuthorizationRequest , handler : AuthorizationHandler [U ]): Future [GrantHandlerResult ] = {
72+ override def handleRequest [U ](request : AuthorizationRequest , handler : AuthorizationHandler [U ]): Future [GrantHandlerResult [ U ] ] = {
6673 val passwordRequest = new PasswordRequest (request)
6774 if (clientCredentialRequired && passwordRequest.clientCredential.isEmpty) {
6875 throw new InvalidRequest (" Client credential is required" )
@@ -81,7 +88,7 @@ class Password extends GrantHandler {
8188
8289class ClientCredentials extends GrantHandler {
8390
84- override def handleRequest [U ](request : AuthorizationRequest , handler : AuthorizationHandler [U ]): Future [GrantHandlerResult ] = {
91+ override def handleRequest [U ](request : AuthorizationRequest , handler : AuthorizationHandler [U ]): Future [GrantHandlerResult [ U ] ] = {
8592 val clientCredentialsRequest = new ClientCredentialsRequest (request)
8693 val clientCredential = clientCredentialsRequest.clientCredential.getOrElse(throw new InvalidRequest (" Client credential is required" ))
8794 val scope = clientCredentialsRequest.scope
@@ -98,7 +105,7 @@ class ClientCredentials extends GrantHandler {
98105
99106class AuthorizationCode extends GrantHandler {
100107
101- override def handleRequest [U ](request : AuthorizationRequest , handler : AuthorizationHandler [U ]): Future [GrantHandlerResult ] = {
108+ override def handleRequest [U ](request : AuthorizationRequest , handler : AuthorizationHandler [U ]): Future [GrantHandlerResult [ U ] ] = {
102109 val authorizationCodeRequest = new AuthorizationCodeRequest (request)
103110 val clientCredential = authorizationCodeRequest.clientCredential.getOrElse(throw new InvalidRequest (" Client credential is required" ))
104111 val clientId = clientCredential.clientId
@@ -125,7 +132,7 @@ class AuthorizationCode extends GrantHandler {
125132
126133class Implicit extends GrantHandler {
127134
128- override def handleRequest [U ](request : AuthorizationRequest , handler : AuthorizationHandler [U ]): Future [GrantHandlerResult ] = {
135+ override def handleRequest [U ](request : AuthorizationRequest , handler : AuthorizationHandler [U ]): Future [GrantHandlerResult [ U ] ] = {
129136 val implicitRequest = new ImplicitRequest (request)
130137 val clientCredential = implicitRequest.clientCredential.getOrElse(throw new InvalidRequest (" Client credential is required" ))
131138
@@ -146,6 +153,7 @@ class Implicit extends GrantHandler {
146153 /**
147154 * Implicit grant must not return refresh token
148155 */
149- protected override def createGrantHandlerResult (accessToken : AccessToken ) = super .createGrantHandlerResult(accessToken).copy(refreshToken = None )
156+ protected override def createGrantHandlerResult [U ](authInfo : AuthInfo [U ], accessToken : AccessToken ) =
157+ super .createGrantHandlerResult(authInfo, accessToken).copy(refreshToken = None )
150158
151159}
0 commit comments