@@ -48,7 +48,7 @@ trait OAuth2Provider extends Results {
4848 implicit def play2protectedResourceRequest (request : RequestHeader ): ProtectedResourceRequest = {
4949 ProtectedResourceRequest (request.headers.toMap, request.queryString)
5050 }
51-
51+
5252 implicit def play2protectedResourceRequest [A ](request : Request [A ]): ProtectedResourceRequest = {
5353 val param : Map [String , Seq [String ]] = getParam(request)
5454 ProtectedResourceRequest (request.headers.toMap, param)
@@ -79,13 +79,13 @@ trait OAuth2Provider extends Results {
7979 */
8080 def issueAccessToken [A , U ](dataHandler : DataHandler [U ])(implicit request : play.api.mvc.Request [A ]): SimpleResult = {
8181 TokenEndpoint .handleRequest(request, dataHandler) match {
82- case Left (e) if e.statusCode == 400 => responseOAuthError( BadRequest , e )
83- case Left (e) if e.statusCode == 401 => responseOAuthError( Unauthorized , e )
82+ case Left (e) if e.statusCode == 400 => BadRequest (responseOAuthErrorJson(e) )
83+ case Left (e) if e.statusCode == 401 => Unauthorized (responseOAuthErrorJson(e) )
8484 case Right (r) => Ok (Json .toJson(responseAccessToken(r)))
8585 }
8686 }
8787
88- protected def responseAccessToken (r : GrantHandlerResult ) = {
88+ protected [scalaoauth2] def responseAccessToken (r : GrantHandlerResult ) = {
8989 Map [String , JsValue ](
9090 " token_type" -> JsString (r.tokenType),
9191 " access_token" -> JsString (r.accessToken)
@@ -110,16 +110,19 @@ trait OAuth2Provider extends Results {
110110 */
111111 def authorize [A , U ](dataHandler : DataHandler [U ])(callback : AuthInfo [U ] => SimpleResult )(implicit request : play.api.mvc.Request [A ]): SimpleResult = {
112112 ProtectedResource .handleRequest(request, dataHandler) match {
113- case Left (e) if e.statusCode == 400 => responseOAuthError( BadRequest , e )
114- case Left (e) if e.statusCode == 401 => responseOAuthError( Unauthorized , e )
113+ case Left (e) if e.statusCode == 400 => BadRequest .withHeaders(responseOAuthErrorHeader(e) )
114+ case Left (e) if e.statusCode == 401 => Unauthorized .withHeaders(responseOAuthErrorHeader(e) )
115115 case Right (authInfo) => callback(authInfo)
116116 }
117117 }
118118
119- protected def responseOAuthError (result : SimpleResult , e : OAuthError ) = result.withHeaders(
120- " WWW-Authenticate" -> (" Bearer " + toOAuthErrorString(e))
119+ protected [scalaoauth2] def responseOAuthErrorJson (e : OAuthError ): JsValue = Json .obj(
120+ " error" -> e.errorType,
121+ " error_description" -> e.description
121122 )
122123
124+ protected [scalaoauth2] def responseOAuthErrorHeader (e : OAuthError ): (String , String ) = (" WWW-Authenticate" -> (" Bearer " + toOAuthErrorString(e)))
125+
123126 protected def toOAuthErrorString (e : OAuthError ): String = {
124127 val params = Seq (" error=\" " + e.errorType + " \" " ) ++
125128 (if (! e.description.isEmpty) { Seq (" error_description=\" " + e.description + " \" " ) } else { Nil })
0 commit comments