@@ -13,7 +13,7 @@ trait GrantHandler {
1313 */
1414 def clientCredentialRequired = true
1515
16- def handleRequest [U ](request : AuthorizationRequest , dataHandler : DataHandler [U ]): Future [GrantHandlerResult ]
16+ def handleRequest [U ](request : AuthorizationRequest , optionalClientCredential : Option [ ClientCredential ], dataHandler : DataHandler [U ]): Future [GrantHandlerResult ]
1717
1818 /**
1919 * Returns valid access token.
@@ -43,10 +43,10 @@ trait GrantHandler {
4343 }
4444}
4545
46- class RefreshToken ( clientCredentialFetcher : ClientCredentialFetcher ) extends GrantHandler {
46+ class RefreshToken extends GrantHandler {
4747
48- override def handleRequest [U ](request : AuthorizationRequest , dataHandler : DataHandler [U ]): Future [GrantHandlerResult ] = {
49- val clientCredential = clientCredentialFetcher.fetch(request). getOrElse(throw new InvalidRequest (" Authorization header is invalid " ))
48+ override def handleRequest [U ](request : AuthorizationRequest , optionalClientCredential : Option [ ClientCredential ], dataHandler : DataHandler [U ]): Future [GrantHandlerResult ] = {
49+ val clientCredential = optionalClientCredential. getOrElse(throw new InvalidRequest (" Client credential is required " ))
5050 val refreshToken = request.requireRefreshToken
5151
5252 dataHandler.findAuthInfoByRefreshToken(refreshToken).flatMap { authInfoOption =>
@@ -68,54 +68,53 @@ class RefreshToken(clientCredentialFetcher: ClientCredentialFetcher) extends Gra
6868 }
6969}
7070
71- class Password (clientCredentialFetcher : ClientCredentialFetcher ) extends GrantHandler {
71+ class Password extends GrantHandler {
72+
73+ override def handleRequest [U ](request : AuthorizationRequest , optionalClientCredential : Option [ClientCredential ], dataHandler : DataHandler [U ]): Future [GrantHandlerResult ] = {
74+ if (clientCredentialRequired && optionalClientCredential.isEmpty) {
75+ throw new InvalidRequest (" Client credential is required" )
76+ }
7277
73- override def handleRequest [U ](request : AuthorizationRequest , dataHandler : DataHandler [U ]): Future [GrantHandlerResult ] = {
74- val clientCredential = clientCredentialFetcher.fetch(request)
75- if (clientCredentialRequired && clientCredential.isEmpty)
76- throw new InvalidRequest (" Authorization header is invalid" )
7778 val username = request.requireUsername
7879 val password = request.requirePassword
7980
8081 dataHandler.findUser(username, password).flatMap { userOption =>
8182 val user = userOption.getOrElse(throw new InvalidGrant (" username or password is incorrect" ))
8283 val scope = request.scope
83- val clientId = clientCredential .map { _.clientId }
84+ val clientId = optionalClientCredential .map { _.clientId }
8485 val authInfo = AuthInfo (user, clientId, scope, None )
8586
8687 issueAccessToken(dataHandler, authInfo)
8788 }
8889 }
8990}
9091
91- class ClientCredentials ( clientCredentialFetcher : ClientCredentialFetcher ) extends GrantHandler {
92+ class ClientCredentials extends GrantHandler {
9293
93- override def handleRequest [U ](request : AuthorizationRequest , dataHandler : DataHandler [U ]): Future [GrantHandlerResult ] = {
94- val clientCredential = clientCredentialFetcher.fetch(request).getOrElse(throw new InvalidRequest (" Authorization header is invalid" ))
95- val clientSecret = clientCredential.clientSecret
96- val clientId = clientCredential.clientId
94+ override def handleRequest [U ](request : AuthorizationRequest , optionalClientCredential : Option [ClientCredential ], dataHandler : DataHandler [U ]): Future [GrantHandlerResult ] = {
95+ val clientCredential = optionalClientCredential.getOrElse(throw new InvalidRequest (" Client credential is required" ))
9796 val scope = request.scope
9897
99- dataHandler.findClientUser(clientId, clientSecret, scope).flatMap { userOption =>
100- val user = userOption .getOrElse(throw new InvalidGrant (" client_id or client_secret or scope is incorrect" ))
101- val authInfo = AuthInfo (user, Some (clientId), scope, None )
98+ dataHandler.findClientUser(clientCredential. clientId, clientCredential. clientSecret, scope).flatMap { optionalUser =>
99+ val user = optionalUser .getOrElse(throw new InvalidGrant (" client_id or client_secret or scope is incorrect" ))
100+ val authInfo = AuthInfo (user, Some (clientCredential. clientId), scope, None )
102101
103102 issueAccessToken(dataHandler, authInfo)
104103 }
105104 }
106105
107106}
108107
109- class AuthorizationCode ( clientCredentialFetcher : ClientCredentialFetcher ) extends GrantHandler {
108+ class AuthorizationCode extends GrantHandler {
110109
111- override def handleRequest [U ](request : AuthorizationRequest , dataHandler : DataHandler [U ]): Future [GrantHandlerResult ] = {
112- val clientCredential = clientCredentialFetcher.fetch(request). getOrElse(throw new InvalidRequest (" Authorization header is invalid " ))
110+ override def handleRequest [U ](request : AuthorizationRequest , optionalClientCredential : Option [ ClientCredential ], dataHandler : DataHandler [U ]): Future [GrantHandlerResult ] = {
111+ val clientCredential = optionalClientCredential. getOrElse(throw new InvalidRequest (" Client credential is required " ))
113112 val clientId = clientCredential.clientId
114113 val code = request.requireCode
115114 val redirectUri = request.redirectUri
116115
117- dataHandler.findAuthInfoByCode(code).flatMap { authInfoOption =>
118- val authInfo = authInfoOption .getOrElse(throw new InvalidGrant (" Authorized information is not found by the code" ))
116+ dataHandler.findAuthInfoByCode(code).flatMap { optionalAuthInfo =>
117+ val authInfo = optionalAuthInfo .getOrElse(throw new InvalidGrant (" Authorized information is not found by the code" ))
119118 if (authInfo.clientId != Some (clientId)) {
120119 throw new InvalidClient
121120 }
0 commit comments