Skip to content

Commit c1e9a4f

Browse files
authored
pass validated client credential to AuthorizationHandler (#114)
1 parent dce99f4 commit c1e9a4f

File tree

10 files changed

+24
-22
lines changed

10 files changed

+24
-22
lines changed

akka-http-oauth2-provider/src/test/scala/scalaoauth2/provider/MockDataHandler.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import scala.concurrent.Future
66

77
class MockDataHandler extends DataHandler[User] {
88

9-
override def validateClient(request: AuthorizationRequest): Future[Boolean] = Future.successful(false)
9+
override def validateClient(maybeClientCredential: Option[ClientCredential], request: AuthorizationRequest): Future[Boolean] = Future.successful(false)
1010

11-
override def findUser(request: AuthorizationRequest): Future[Option[User]] = Future.successful(None)
11+
override def findUser(maybeClientCredential: Option[ClientCredential], request: AuthorizationRequest): Future[Option[User]] = Future.successful(None)
1212

1313
override def createAccessToken(authInfo: AuthInfo[User]): Future[AccessToken] = Future.successful(AccessToken("", Some(""), Some(""), Some(0L), new Date()))
1414

akka-http-oauth2-provider/src/test/scala/scalaoauth2/provider/OAuth2ProviderSpec.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ class OAuth2ProviderSpec extends WordSpec with Matchers with ScalatestRouteTest
3535
Future.successful(Some(accessToken))
3636
override def findAuthInfoByAccessToken(accessToken: AccessToken): Future[Option[AuthInfo[User]]] =
3737
Future.successful(someAuthInfo)
38-
override def findUser(request: AuthorizationRequest): Future[Option[User]] =
38+
override def findUser(maybeClientCredential: Option[ClientCredential], request: AuthorizationRequest): Future[Option[User]] =
3939
Future.successful(Some(user))
40-
override def validateClient(request: AuthorizationRequest): Future[Boolean] =
40+
override def validateClient(maybeClientCredential: Option[ClientCredential], request: AuthorizationRequest): Future[Boolean] =
4141
Future.successful(true)
4242
override def getStoredAccessToken(authInfo: AuthInfo[User]): Future[Option[AccessToken]] =
4343
Future.successful(Some(accessToken))

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,18 +59,20 @@ trait AuthorizationHandler[U] {
5959
* secret (common with Public Clients). However, if the registered client has a client secret value the specification
6060
* requires that a client secret must always be provided and verified for that client ID.
6161
*
62+
* @param maybeCredential client credential parsed from request
6263
* @param request Request sent by client.
6364
* @return true if request is a regular client, false if request is a illegal client.
6465
*/
65-
def validateClient(request: AuthorizationRequest): Future[Boolean]
66+
def validateClient(maybeCredential: Option[ClientCredential], request: AuthorizationRequest): Future[Boolean]
6667

6768
/**
6869
* Authenticate the user that issued the authorization request.
6970
* Client credential, Password and Implicit Grant call this method.
7071
*
72+
* @param maybeCredential client credential parsed from request
7173
* @param request Request sent by client.
7274
*/
73-
def findUser(request: AuthorizationRequest): Future[Option[U]]
75+
def findUser(maybeCredential: Option[ClientCredential], request: AuthorizationRequest): Future[Option[U]]
7476

7577
/**
7678
* Creates a new access token by authorized information.

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ class Password extends GrantHandler {
7777
throw new InvalidRequest("Client credential is required")
7878
} else {
7979
val passwordRequest = PasswordRequest(request)
80-
handler.findUser(passwordRequest).flatMap { maybeUser =>
80+
handler.findUser(maybeValidatedClientCred, passwordRequest).flatMap { maybeUser =>
8181
val user = maybeUser.getOrElse(throw new InvalidGrant("username or password is incorrect"))
8282
val scope = passwordRequest.scope
8383
val authInfo = AuthInfo(user, maybeValidatedClientCred.map(_.clientId), scope, None)
@@ -95,7 +95,7 @@ class ClientCredentials extends GrantHandler {
9595
val clientCredentialsRequest = ClientCredentialsRequest(request)
9696
val scope = clientCredentialsRequest.scope
9797

98-
handler.findUser(clientCredentialsRequest).flatMap { optionalUser =>
98+
handler.findUser(maybeValidatedClientCred, clientCredentialsRequest).flatMap { optionalUser =>
9999
val user = optionalUser.getOrElse(throw new InvalidGrant("client_id or client_secret or scope is incorrect"))
100100
val authInfo = AuthInfo(user, Some(clientId), scope, None)
101101

@@ -139,7 +139,7 @@ class Implicit extends GrantHandler {
139139
val clientId = maybeValidatedClientCred.getOrElse(throw new InvalidRequest("Client credential is required")).clientId
140140
val implicitRequest = ImplicitRequest(request)
141141

142-
handler.findUser(implicitRequest).flatMap { maybeUser =>
142+
handler.findUser(maybeValidatedClientCred, implicitRequest).flatMap { maybeUser =>
143143
val user = maybeUser.getOrElse(throw new InvalidGrant("user cannot be authenticated"))
144144
val scope = implicitRequest.scope
145145
val authInfo = AuthInfo(user, Some(clientId), scope, None)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ trait TokenEndpoint {
1313
maybeCredential.fold(
1414
invalid => Future.successful(Left(invalid)),
1515
clientCredential => {
16-
handler.validateClient(request).flatMap { isValidClient =>
16+
handler.validateClient(Some(clientCredential), request).flatMap { isValidClient =>
1717
if (!isValidClient) {
1818
Future.successful(Left(new InvalidClient("Invalid client or client is not authorized")))
1919
} else {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class ClientCredentialsSpec extends FlatSpec with ScalaFutures with OptionValues
1515
val clientCred = request.parseClientCredential.fold[Option[ClientCredential]](None)(_.fold(_ => None, c => Some(c)))
1616
val f = clientCredentials.handleRequest(clientCred, request, new MockDataHandler() {
1717

18-
override def findUser(request: AuthorizationRequest): Future[Option[User]] = Future.successful(Some(MockUser(10000, "username")))
18+
override def findUser(maybeClientCredential: Option[ClientCredential], request: AuthorizationRequest): Future[Option[User]] = Future.successful(Some(MockUser(10000, "username")))
1919

2020
override def createAccessToken(authInfo: AuthInfo[User]): Future[AccessToken] = Future.successful(AccessToken("token1", None, Some("all"), Some(3600), new java.util.Date()))
2121
})

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class ImplicitSpec extends FlatSpec with ScalaFutures with OptionValues {
2121
val clientCred = request.parseClientCredential.fold[Option[ClientCredential]](None)(_.fold(_ => None, c => Some(c)))
2222
val f = implicitGrant.handleRequest(clientCred, request, new MockDataHandler() {
2323

24-
override def findUser(request: AuthorizationRequest): Future[Option[User]] = {
24+
override def findUser(maybeClientCredential: Option[ClientCredential], request: AuthorizationRequest): Future[Option[User]] = {
2525
val result = request match {
2626
case request: ImplicitRequest =>
2727
for {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import scala.concurrent.Future
66

77
class MockDataHandler extends DataHandler[User] {
88

9-
override def validateClient(request: AuthorizationRequest): Future[Boolean] = Future.successful(false)
9+
override def validateClient(maybeClientCredential: Option[ClientCredential], request: AuthorizationRequest): Future[Boolean] = Future.successful(false)
1010

11-
override def findUser(request: AuthorizationRequest): Future[Option[User]] = Future.successful(None)
11+
override def findUser(maybeClientCredential: Option[ClientCredential], request: AuthorizationRequest): Future[Option[User]] = Future.successful(None)
1212

1313
override def createAccessToken(authInfo: AuthInfo[User]): Future[AccessToken] = Future.successful(AccessToken("", Some(""), Some(""), Some(0L), new Date()))
1414

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class PasswordSpec extends FlatSpec with ScalaFutures with OptionValues {
2222
val clientCred = request.parseClientCredential.fold[Option[ClientCredential]](None)(_.fold(_ => None, c => Some(c)))
2323
val f = password.handleRequest(clientCred, request, new MockDataHandler() {
2424

25-
override def findUser(request: AuthorizationRequest): Future[Option[User]] = Future.successful(Some(MockUser(10000, "username")))
25+
override def findUser(maybeClientCredential: Option[ClientCredential], request: AuthorizationRequest): Future[Option[User]] = Future.successful(Some(MockUser(10000, "username")))
2626

2727
override def createAccessToken(authInfo: AuthInfo[User]): Future[AccessToken] = Future.successful(AccessToken("token1", Some("refreshToken1"), Some("all"), Some(3600), new java.util.Date()))
2828

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ class TokenEndPointSpec extends FlatSpec with ScalaFutures {
1313

1414
def successfulDataHandler() = new MockDataHandler() {
1515

16-
override def validateClient(request: AuthorizationRequest): Future[Boolean] = Future.successful(true)
16+
override def validateClient(maybeClientCredential: Option[ClientCredential], request: AuthorizationRequest): Future[Boolean] = Future.successful(true)
1717

18-
override def findUser(request: AuthorizationRequest): Future[Option[User]] = Future.successful(Some(MockUser(10000, "username")))
18+
override def findUser(maybeClientCredential: Option[ClientCredential], request: AuthorizationRequest): Future[Option[User]] = Future.successful(Some(MockUser(10000, "username")))
1919

2020
override def createAccessToken(authInfo: AuthInfo[User]): Future[AccessToken] = Future.successful(AccessToken("token1", None, Some("all"), Some(3600), new Date()))
2121

@@ -129,7 +129,7 @@ class TokenEndPointSpec extends FlatSpec with ScalaFutures {
129129

130130
val dataHandler = new MockDataHandler() {
131131

132-
override def validateClient(request: AuthorizationRequest): Future[Boolean] = Future.successful(false)
132+
override def validateClient(maybeClientCredential: Option[ClientCredential], request: AuthorizationRequest): Future[Boolean] = Future.successful(false)
133133

134134
}
135135

@@ -157,9 +157,9 @@ class TokenEndPointSpec extends FlatSpec with ScalaFutures {
157157

158158
def dataHandler = new MockDataHandler() {
159159

160-
override def validateClient(request: AuthorizationRequest): Future[Boolean] = Future.successful(true)
160+
override def validateClient(maybeClientCredential: Option[ClientCredential], request: AuthorizationRequest): Future[Boolean] = Future.successful(true)
161161

162-
override def findUser(request: AuthorizationRequest): Future[Option[User]] = Future.successful(Some(MockUser(10000, "username")))
162+
override def findUser(maybeClientCredential: Option[ClientCredential], request: AuthorizationRequest): Future[Option[User]] = Future.successful(Some(MockUser(10000, "username")))
163163

164164
override def createAccessToken(authInfo: AuthInfo[User]): Future[AccessToken] = throw new Exception("Failure")
165165

@@ -201,7 +201,7 @@ class TokenEndPointSpec extends FlatSpec with ScalaFutures {
201201

202202
val dataHandler = new MockDataHandler() {
203203

204-
override def validateClient(request: AuthorizationRequest): Future[Boolean] = Future.successful(true)
204+
override def validateClient(maybeClientCredential: Option[ClientCredential], request: AuthorizationRequest): Future[Boolean] = Future.successful(true)
205205

206206
}
207207

@@ -230,7 +230,7 @@ class TokenEndPointSpec extends FlatSpec with ScalaFutures {
230230

231231
val dataHandler = new MockDataHandler() {
232232

233-
override def validateClient(request: AuthorizationRequest): Future[Boolean] = Future.successful(true)
233+
override def validateClient(maybeClientCredential: Option[ClientCredential], request: AuthorizationRequest): Future[Boolean] = Future.successful(true)
234234

235235
}
236236

0 commit comments

Comments
 (0)