@@ -13,7 +13,7 @@ trait GrantHandler {
1313 */
1414 def clientCredentialRequired = true
1515
16- def handleRequest [U ](request : AuthorizationRequest , maybeClientCredential : Option [ ClientCredential ], authorizationHandler : AuthorizationHandler [U ]): Future [GrantHandlerResult ]
16+ def handleRequest [U ](request : AuthorizationRequest , authorizationHandler : AuthorizationHandler [U ]): Future [GrantHandlerResult ]
1717
1818 /**
1919 * Returns valid access token.
@@ -44,9 +44,10 @@ trait GrantHandler {
4444
4545class RefreshToken extends GrantHandler {
4646
47- override def handleRequest [U ](request : AuthorizationRequest , maybeClientCredential : Option [ClientCredential ], handler : AuthorizationHandler [U ]): Future [GrantHandlerResult ] = {
48- val clientCredential = maybeClientCredential.getOrElse(throw new InvalidRequest (" Client credential is required" ))
49- val refreshToken = request.requireRefreshToken
47+ override def handleRequest [U ](request : AuthorizationRequest , handler : AuthorizationHandler [U ]): Future [GrantHandlerResult ] = {
48+ val refreshTokenRequest = new RefreshTokenRequest (request)
49+ val clientCredential = refreshTokenRequest.clientCredential.getOrElse(throw new InvalidRequest (" Client credential is required" ))
50+ val refreshToken = refreshTokenRequest.refreshToken
5051
5152 handler.findAuthInfoByRefreshToken(refreshToken).flatMap { authInfoOption =>
5253 val authInfo = authInfoOption.getOrElse(throw new InvalidGrant (" Authorized information is not found by the refresh token" ))
@@ -61,19 +62,17 @@ class RefreshToken extends GrantHandler {
6162
6263class Password extends GrantHandler {
6364
64- override def handleRequest [U ](request : AuthorizationRequest , maybeClientCredential : Option [ClientCredential ], handler : AuthorizationHandler [U ]): Future [GrantHandlerResult ] = {
65- if (clientCredentialRequired && maybeClientCredential.isEmpty) {
65+ override def handleRequest [U ](request : AuthorizationRequest , handler : AuthorizationHandler [U ]): Future [GrantHandlerResult ] = {
66+ val passwordRequest = new PasswordRequest (request)
67+ if (clientCredentialRequired && passwordRequest.clientCredential.isEmpty) {
6668 throw new InvalidRequest (" Client credential is required" )
6769 }
6870
69- val username = request.requireUsername
70- val password = request.requirePassword
71-
72- handler.findUser(username, password).flatMap { userOption =>
73- val user = userOption.getOrElse(throw new InvalidGrant (" username or password is incorrect" ))
74- val scope = request.scope
75- val clientId = maybeClientCredential.map { _.clientId }
76- val authInfo = AuthInfo (user, clientId, scope, None )
71+ handler.findUser(passwordRequest).flatMap { maybeUser =>
72+ val user = maybeUser.getOrElse(throw new InvalidGrant (" username or password is incorrect" ))
73+ val scope = passwordRequest.scope
74+ val maybeClientId = passwordRequest.clientCredential.map(_.clientId)
75+ val authInfo = AuthInfo (user, maybeClientId, scope, None )
7776
7877 issueAccessToken(handler, authInfo)
7978 }
@@ -82,11 +81,12 @@ class Password extends GrantHandler {
8281
8382class ClientCredentials extends GrantHandler {
8483
85- override def handleRequest [U ](request : AuthorizationRequest , maybeClientCredential : Option [ClientCredential ], handler : AuthorizationHandler [U ]): Future [GrantHandlerResult ] = {
86- val clientCredential = maybeClientCredential.getOrElse(throw new InvalidRequest (" Client credential is required" ))
87- val scope = request.scope
84+ override def handleRequest [U ](request : AuthorizationRequest , handler : AuthorizationHandler [U ]): Future [GrantHandlerResult ] = {
85+ val clientCredentialsRequest = new ClientCredentialsRequest (request)
86+ val clientCredential = clientCredentialsRequest.clientCredential.getOrElse(throw new InvalidRequest (" Client credential is required" ))
87+ val scope = clientCredentialsRequest.scope
8888
89- handler.findClientUser(clientCredential, scope ).flatMap { optionalUser =>
89+ handler.findUser(clientCredentialsRequest ).flatMap { optionalUser =>
9090 val user = optionalUser.getOrElse(throw new InvalidGrant (" client_id or client_secret or scope is incorrect" ))
9191 val authInfo = AuthInfo (user, Some (clientCredential.clientId), scope, None )
9292
@@ -98,11 +98,12 @@ class ClientCredentials extends GrantHandler {
9898
9999class AuthorizationCode extends GrantHandler {
100100
101- override def handleRequest [U ](request : AuthorizationRequest , maybeClientCredential : Option [ClientCredential ], handler : AuthorizationHandler [U ]): Future [GrantHandlerResult ] = {
102- val clientCredential = maybeClientCredential.getOrElse(throw new InvalidRequest (" Client credential is required" ))
101+ override def handleRequest [U ](request : AuthorizationRequest , handler : AuthorizationHandler [U ]): Future [GrantHandlerResult ] = {
102+ val authorizationCodeRequest = new AuthorizationCodeRequest (request)
103+ val clientCredential = authorizationCodeRequest.clientCredential.getOrElse(throw new InvalidRequest (" Client credential is required" ))
103104 val clientId = clientCredential.clientId
104- val code = request.requireCode
105- val redirectUri = request .redirectUri
105+ val code = authorizationCodeRequest.code
106+ val redirectUri = authorizationCodeRequest .redirectUri
106107
107108 handler.findAuthInfoByCode(code).flatMap { optionalAuthInfo =>
108109 val authInfo = optionalAuthInfo.getOrElse(throw new InvalidGrant (" Authorized information is not found by the code" ))
@@ -124,13 +125,14 @@ class AuthorizationCode extends GrantHandler {
124125
125126class Implicit extends GrantHandler {
126127
127- override def handleRequest [U ](request : AuthorizationRequest , maybeClientCredential : Option [ClientCredential ], handler : AuthorizationHandler [U ]): Future [GrantHandlerResult ] = {
128- val clientId = request.clientId.getOrElse(throw new InvalidRequest (" Client id is required" ))
128+ override def handleRequest [U ](request : AuthorizationRequest , handler : AuthorizationHandler [U ]): Future [GrantHandlerResult ] = {
129+ val implicitRequest = new ImplicitRequest (request)
130+ val clientCredential = implicitRequest.clientCredential.getOrElse(throw new InvalidRequest (" Client credential is required" ))
129131
130- handler.findUser(request ).flatMap { userOption =>
131- val user = userOption .getOrElse(throw new InvalidGrant (" user cannot be authenticated" ))
132- val scope = request .scope
133- val authInfo = AuthInfo (user, Some (clientId), scope, None )
132+ handler.findUser(implicitRequest ).flatMap { maybeUser =>
133+ val user = maybeUser .getOrElse(throw new InvalidGrant (" user cannot be authenticated" ))
134+ val scope = implicitRequest .scope
135+ val authInfo = AuthInfo (user, Some (clientCredential. clientId), scope, None )
134136
135137 issueAccessToken(handler, authInfo)
136138 }
0 commit comments