Skip to content

Commit 1f31f33

Browse files
committed
add OAuth2Provider customize supporting grant types
1 parent a985208 commit 1f31f33

File tree

4 files changed

+30
-6
lines changed

4 files changed

+30
-6
lines changed

play2-oauth2-provider/src/main/scala/scalaoauth2/provider/OAuth2Provider.scala

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ import scala.concurrent.duration._
1313
*/
1414
trait OAuth2BaseProvider extends Results {
1515

16+
val protectedResource = ProtectedResource
17+
18+
val tokenEndpoint = TokenEndpoint
19+
1620
implicit def play2oauthRequest(request: RequestHeader): AuthorizationRequest = {
1721
AuthorizationRequest(request.headers.toMap, request.queryString)
1822
}
@@ -115,7 +119,7 @@ trait OAuth2Provider extends OAuth2BaseProvider {
115119
* Request is failed then return BadRequest or Unauthorized status to client with cause into the JSON.
116120
*/
117121
def issueAccessToken[A, U](dataHandler: DataHandler[U], timeout: Duration = 60.seconds)(implicit request: Request[A]): Result = {
118-
val f = TokenEndpoint.handleRequest(request, dataHandler).map { requestResult =>
122+
val f = tokenEndpoint.handleRequest(request, dataHandler).map { requestResult =>
119123
requestResult match {
120124
case Left(e) if e.statusCode == 400 => BadRequest(responseOAuthErrorJson(e)).withHeaders(responseOAuthErrorHeader(e))
121125
case Left(e) if e.statusCode == 401 => Unauthorized(responseOAuthErrorJson(e)).withHeaders(responseOAuthErrorHeader(e))
@@ -137,7 +141,7 @@ trait OAuth2Provider extends OAuth2BaseProvider {
137141
* Authentication is failed then return BadRequest or Unauthorized status to client with cause into the JSON.
138142
*/
139143
def authorize[A, U](dataHandler: DataHandler[U], timeout: Duration = 60.seconds)(callback: AuthInfo[U] => Result)(implicit request: Request[A]): Result = {
140-
val f = ProtectedResource.handleRequest(request, dataHandler).map { requestResult =>
144+
val f = protectedResource.handleRequest(request, dataHandler).map { requestResult =>
141145
requestResult match {
142146
case Left(e) if e.statusCode == 400 => BadRequest.withHeaders(responseOAuthErrorHeader(e))
143147
case Left(e) if e.statusCode == 401 => Unauthorized.withHeaders(responseOAuthErrorHeader(e))
@@ -192,7 +196,7 @@ trait OAuth2AsyncProvider extends OAuth2BaseProvider {
192196
* Request is failed then return BadRequest or Unauthorized status to client with cause into the JSON.
193197
*/
194198
def issueAccessToken[A, U](dataHandler: DataHandler[U])(implicit request: Request[A]): Future[Result] = {
195-
TokenEndpoint.handleRequest(request, dataHandler).map { requestResult =>
199+
tokenEndpoint.handleRequest(request, dataHandler).map { requestResult =>
196200
requestResult match {
197201
case Left(e) if e.statusCode == 400 => BadRequest(responseOAuthErrorJson(e)).withHeaders(responseOAuthErrorHeader(e))
198202
case Left(e) if e.statusCode == 401 => Unauthorized(responseOAuthErrorJson(e)).withHeaders(responseOAuthErrorHeader(e))
@@ -212,7 +216,7 @@ trait OAuth2AsyncProvider extends OAuth2BaseProvider {
212216
* Authentication is failed then return BadRequest or Unauthorized status to client with cause into the JSON.
213217
*/
214218
def authorize[A, U](dataHandler: DataHandler[U])(callback: AuthInfo[U] => Future[Result])(implicit request: Request[A]): Future[Result] = {
215-
ProtectedResource.handleRequest(request, dataHandler).flatMap { requestResult =>
219+
protectedResource.handleRequest(request, dataHandler).flatMap { requestResult =>
216220
requestResult match {
217221
case Left(e) if e.statusCode == 400 => Future.successful(BadRequest.withHeaders(responseOAuthErrorHeader(e)))
218222
case Left(e) if e.statusCode == 401 => Future.successful(Unauthorized.withHeaders(responseOAuthErrorHeader(e)))

scala-oauth2-core/src/main/scala/scalaoauth2/provider/AccessTokenFetcher.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ trait AccessTokenFetcher {
1414

1515
object RequestParameter extends AccessTokenFetcher {
1616

17-
override def matches(request :ProtectedResourceRequest): Boolean = {
17+
override def matches(request: ProtectedResourceRequest): Boolean = {
1818
request.oauthToken.isDefined || request.accessToken.isDefined
1919
}
2020

scala-oauth2-core/src/main/scala/scalaoauth2/provider/TokenEndpoint.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package scalaoauth2.provider
33
import scala.concurrent.Future
44
import scala.concurrent.ExecutionContext.Implicits.global
55

6-
class TokenEndpoint {
6+
trait TokenEndpoint {
77

88
val fetcher = ClientCredentialFetcher
99

scala-oauth2-core/src/test/scala/scalaoauth2/provider/TokenEndPointSpec.scala

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,4 +139,24 @@ class TokenEndPointSpec extends FlatSpec with ScalaFutures {
139139
case Failure(e) => e.getMessage should be ("Failure")
140140
}
141141
}
142+
143+
it should "be possible to customize supporting grant types" in {
144+
145+
object TestTokenEndpoint extends TokenEndpoint {
146+
override val handlers = Map(
147+
"password" -> new Password(fetcher)
148+
)
149+
}
150+
151+
val f = TestTokenEndpoint.handleRequest(AuthorizationRequest(Map(), Map("grant_type" -> Seq("client_credentials"))), successfulDataHandler())
152+
whenReady(f) { result =>
153+
val e = intercept[UnsupportedGrantType] {
154+
result match {
155+
case Left(e) => throw e
156+
case _ =>
157+
}
158+
}
159+
e.description should be ("The grant_type is not supported")
160+
}
161+
}
142162
}

0 commit comments

Comments
 (0)