Skip to content
This repository has been archived by the owner on Sep 12, 2021. It is now read-only.

Commit

Permalink
Merge cb0ceff into fff997e
Browse files Browse the repository at this point in the history
  • Loading branch information
igorbernstein committed Mar 28, 2015
2 parents fff997e + cb0ceff commit d4442a7
Show file tree
Hide file tree
Showing 13 changed files with 157 additions and 147 deletions.
18 changes: 10 additions & 8 deletions silhouette/app/com/mohiva/play/silhouette/api/Silhouette.scala
Original file line number Diff line number Diff line change
Expand Up @@ -267,12 +267,12 @@ trait Silhouette[I <: Identity, A <: Authenticator] extends Controller with Logg
val auth = env.authenticatorService.touch(authenticator)
block(auth.extract).flatMap {
case hr @ HandlerResult(pr: Authenticator.Discard, _) =>
env.authenticatorService.discard(authenticator, Future.successful(pr)).map(pr => hr.copy(pr))
env.authenticatorService.discard(authenticator, pr).map(pr => hr.copy(pr))
case hr @ HandlerResult(pr: Authenticator.Renew, _) =>
env.authenticatorService.renew(authenticator, Future.successful(pr)).map(pr => hr.copy(pr))
env.authenticatorService.renew(authenticator, pr).map(pr => hr.copy(pr))
case hr @ HandlerResult(pr, _) => auth match {
// Authenticator was touched so we update the authenticator and maybe the result
case Left(a) => env.authenticatorService.update(a, Future.successful(pr)).map(pr => hr.copy(pr))
case Left(a) => env.authenticatorService.update(a, pr).map(pr => hr.copy(pr))
// Authenticator was not touched so we return the original result
case Right(a) => Future.successful(hr)
}
Expand All @@ -293,12 +293,12 @@ trait Silhouette[I <: Identity, A <: Authenticator] extends Controller with Logg
private def handleUninitializedAuthenticator[T](authenticator: A, block: A => Future[HandlerResult[T]])(implicit request: RequestHeader) = {
block(authenticator).flatMap {
case hr @ HandlerResult(pr: Authenticator.Discard, _) =>
env.authenticatorService.discard(authenticator, Future.successful(pr)).map(pr => hr.copy(pr))
env.authenticatorService.discard(authenticator, pr).map(pr => hr.copy(pr))
case hr @ HandlerResult(pr: Authenticator.Renew, _) =>
env.authenticatorService.renew(authenticator, Future.successful(pr)).map(pr => hr.copy(pr))
env.authenticatorService.renew(authenticator, pr).map(pr => hr.copy(pr))
case hr @ HandlerResult(pr, _) =>
env.authenticatorService.init(authenticator).flatMap { value =>
env.authenticatorService.embed(value, Future.successful(pr))
env.authenticatorService.embed(value, pr)
}.map(pr => hr.copy(pr))
}
}
Expand Down Expand Up @@ -384,7 +384,9 @@ trait Silhouette[I <: Identity, A <: Authenticator] extends Controller with Logg
// An authenticator but no user was found. The request will ask for authentication and the authenticator will be discarded
case (Some(authenticator), None) =>
env.eventBus.publish(NotAuthenticatedEvent(request, request2lang))
env.authenticatorService.discard(authenticator.extract, handleNotAuthenticated(request)).map(r => HandlerResult(r))
handleNotAuthenticated(request).flatMap { result =>
env.authenticatorService.discard(authenticator.extract, result).map(r => HandlerResult(r))
}
// No authenticator and no user was found. The request will ask for authentication
case _ =>
env.eventBus.publish(NotAuthenticatedEvent(request, request2lang))
Expand Down Expand Up @@ -502,7 +504,7 @@ trait Silhouette[I <: Identity, A <: Authenticator] extends Controller with Logg
case (Some(authenticator), identity) if !authenticator.extract.isValid =>
block(UserAwareRequest(None, None, request)).flatMap {
case hr @ HandlerResult(pr, d) =>
env.authenticatorService.discard(authenticator.extract, Future.successful(pr)).map(r => hr.copy(pr))
env.authenticatorService.discard(authenticator.extract, pr).map(r => hr.copy(pr))
}
// No authenticator and no user was found
case _ =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ trait AuthenticatorService[T <: Authenticator] {
* @param request The request header.
* @return The manipulated result.
*/
def embed(value: T#Value, result: Future[Result])(implicit request: RequestHeader): Future[Result]
def embed(value: T#Value, result: Result)(implicit request: RequestHeader): Future[Result]

/**
* Embeds authenticator specific artifacts into the request.
Expand Down Expand Up @@ -142,7 +142,7 @@ trait AuthenticatorService[T <: Authenticator] {
* @param request The request header.
* @return The original or a manipulated result.
*/
protected[silhouette] def update(authenticator: T, result: Future[Result])(implicit request: RequestHeader): Future[Result]
protected[silhouette] def update(authenticator: T, result: Result)(implicit request: RequestHeader): Future[Result]

/**
* Renews the expiration of an authenticator.
Expand All @@ -156,7 +156,7 @@ trait AuthenticatorService[T <: Authenticator] {
* @param request The request header.
* @return The original or a manipulated result.
*/
protected[silhouette] def renew(authenticator: T, result: Future[Result])(implicit request: RequestHeader): Future[Result]
protected[silhouette] def renew(authenticator: T, result: Result)(implicit request: RequestHeader): Future[Result]

/**
* Manipulates the response and removes authenticator specific artifacts before sending it to the client.
Expand All @@ -166,7 +166,7 @@ trait AuthenticatorService[T <: Authenticator] {
* @param request The request header.
* @return The manipulated result.
*/
protected[silhouette] def discard(authenticator: T, result: Future[Result])(implicit request: RequestHeader): Future[Result]
protected[silhouette] def discard(authenticator: T, result: Result)(implicit request: RequestHeader): Future[Result]
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,8 +157,10 @@ class BearerTokenAuthenticatorService(
* @param request The request header.
* @return The manipulated result.
*/
def embed(token: String, result: Future[Result])(implicit request: RequestHeader) = {
result.map(_.withHeaders(settings.headerName -> token))
def embed(token: String, result: Result)(implicit request: RequestHeader) = {
Future.successful(
result.withHeaders(settings.headerName -> token)
)
}

/**
Expand Down Expand Up @@ -201,9 +203,9 @@ class BearerTokenAuthenticatorService(
*/
protected[silhouette] def update(
authenticator: BearerTokenAuthenticator,
result: Future[Result])(implicit request: RequestHeader) = {
result: Result)(implicit request: RequestHeader) = {

dao.save(authenticator).flatMap { a =>
dao.save(authenticator).map { a =>
result
}.recover {
case e => throw new AuthenticatorUpdateException(UpdateError.format(ID, authenticator), e)
Expand All @@ -221,7 +223,7 @@ class BearerTokenAuthenticatorService(
*/
protected[silhouette] def renew(
authenticator: BearerTokenAuthenticator,
result: Future[Result])(implicit request: RequestHeader) = {
result: Result)(implicit request: RequestHeader) = {

dao.remove(authenticator.id).flatMap { _ =>
create(authenticator.loginInfo).flatMap { a =>
Expand All @@ -241,9 +243,9 @@ class BearerTokenAuthenticatorService(
*/
protected[silhouette] def discard(
authenticator: BearerTokenAuthenticator,
result: Future[Result])(implicit request: RequestHeader) = {
result: Result)(implicit request: RequestHeader) = {

dao.remove(authenticator.id).flatMap { _ =>
dao.remove(authenticator.id).map { _ =>
result
}.recover {
case e => throw new AuthenticatorDiscardingException(DiscardError.format(ID, authenticator), e)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -188,8 +188,8 @@ class CookieAuthenticatorService(
* @param request The request header.
* @return The manipulated result.
*/
def embed(cookie: Cookie, result: Future[Result])(implicit request: RequestHeader) = {
result.map(_.withCookies(cookie))
def embed(cookie: Cookie, result: Result)(implicit request: RequestHeader) = {
Future.successful(result.withCookies(cookie))
}

/**
Expand Down Expand Up @@ -234,9 +234,9 @@ class CookieAuthenticatorService(
*/
protected[silhouette] def update(
authenticator: CookieAuthenticator,
result: Future[Result])(implicit request: RequestHeader) = {
result: Result)(implicit request: RequestHeader) = {

dao.save(authenticator).flatMap { a =>
dao.save(authenticator).map { a =>
result
}.recover {
case e => throw new AuthenticatorUpdateException(UpdateError.format(ID, authenticator), e)
Expand All @@ -254,7 +254,7 @@ class CookieAuthenticatorService(
*/
protected[silhouette] def renew(
authenticator: CookieAuthenticator,
result: Future[Result])(implicit request: RequestHeader) = {
result: Result)(implicit request: RequestHeader) = {

dao.remove(authenticator.id).flatMap { _ =>
create(authenticator.loginInfo).flatMap { a =>
Expand All @@ -274,14 +274,14 @@ class CookieAuthenticatorService(
*/
protected[silhouette] def discard(
authenticator: CookieAuthenticator,
result: Future[Result])(implicit request: RequestHeader) = {
result: Result)(implicit request: RequestHeader) = {

dao.remove(authenticator.id).flatMap { _ =>
result.map(_.discardingCookies(DiscardingCookie(
dao.remove(authenticator.id).map { _ =>
result.discardingCookies(DiscardingCookie(
name = settings.cookieName,
path = settings.cookiePath,
domain = settings.cookieDomain,
secure = settings.secureCookie)))
secure = settings.secureCookie))
}.recover {
case e => throw new AuthenticatorDiscardingException(DiscardError.format(ID, authenticator), e)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,8 @@ class DummyAuthenticatorService extends AuthenticatorService[DummyAuthenticator]
* @param request The request header.
* @return The manipulated result.
*/
def embed(value: Unit, result: Future[Result])(implicit request: RequestHeader) = {
result
def embed(value: Unit, result: Result)(implicit request: RequestHeader) = {
Future.successful(result)
}

/**
Expand Down Expand Up @@ -120,9 +120,9 @@ class DummyAuthenticatorService extends AuthenticatorService[DummyAuthenticator]
*/
protected[silhouette] def update(
authenticator: DummyAuthenticator,
result: Future[Result])(implicit request: RequestHeader) = {
result: Result)(implicit request: RequestHeader) = {

result
Future.successful(result)
}

/**
Expand All @@ -135,9 +135,9 @@ class DummyAuthenticatorService extends AuthenticatorService[DummyAuthenticator]
*/
protected[silhouette] def renew(
authenticator: DummyAuthenticator,
result: Future[Result])(implicit request: RequestHeader) = {
result: Result)(implicit request: RequestHeader) = {

result
Future.successful(result)
}

/**
Expand All @@ -149,9 +149,9 @@ class DummyAuthenticatorService extends AuthenticatorService[DummyAuthenticator]
*/
protected[silhouette] def discard(
authenticator: DummyAuthenticator,
result: Future[Result])(implicit request: RequestHeader) = {
result: Result)(implicit request: RequestHeader) = {

result
Future.successful(result)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,8 +180,8 @@ class JWTAuthenticatorService(
* @param result The result to manipulate.
* @return The manipulated result.
*/
def embed(token: String, result: Future[Result])(implicit request: RequestHeader) = {
result.map(_.withHeaders(settings.headerName -> token))
def embed(token: String, result: Result)(implicit request: RequestHeader) = {
Future.successful(result.withHeaders(settings.headerName -> token))
}

/**
Expand Down Expand Up @@ -222,10 +222,10 @@ class JWTAuthenticatorService(
*/
protected[silhouette] def update(
authenticator: JWTAuthenticator,
result: Future[Result])(implicit request: RequestHeader) = {
result: Result)(implicit request: RequestHeader) = {

dao.fold(Future.successful(authenticator))(_.save(authenticator)).flatMap { a =>
result.map(_.withHeaders(settings.headerName -> serialize(a)))
dao.fold(Future.successful(authenticator))(_.save(authenticator)).map { a =>
result.withHeaders(settings.headerName -> serialize(a))
}.recover {
case e => throw new AuthenticatorUpdateException(UpdateError.format(ID, authenticator), e)
}
Expand All @@ -242,7 +242,7 @@ class JWTAuthenticatorService(
*/
protected[silhouette] def renew(
authenticator: JWTAuthenticator,
result: Future[Result])(implicit request: RequestHeader) = {
result: Result)(implicit request: RequestHeader) = {

dao.fold(Future.successful(()))(_.remove(authenticator.id)).flatMap { _ =>
create(authenticator.loginInfo).flatMap { a =>
Expand All @@ -262,9 +262,9 @@ class JWTAuthenticatorService(
*/
protected[silhouette] def discard(
authenticator: JWTAuthenticator,
result: Future[Result])(implicit request: RequestHeader) = {
result: Result)(implicit request: RequestHeader) = {

dao.fold(Future.successful(()))(_.remove(authenticator.id)).flatMap { _ =>
dao.fold(Future.successful(()))(_.remove(authenticator.id)).map { _ =>
result
}.recover {
case e => throw new AuthenticatorDiscardingException(DiscardError.format(ID, authenticator), e)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,8 +167,8 @@ class SessionAuthenticatorService(
* @param result The result to manipulate.
* @return The manipulated result.
*/
def embed(session: Session, result: Future[Result])(implicit request: RequestHeader) = {
result.map(_.addingToSession(session.data.toSeq: _*))
def embed(session: Session, result: Result)(implicit request: RequestHeader) = {
Future.successful(result.addingToSession(session.data.toSeq: _*))
}

/**
Expand Down Expand Up @@ -214,11 +214,14 @@ class SessionAuthenticatorService(
*/
protected[silhouette] def update(
authenticator: SessionAuthenticator,
result: Future[Result])(implicit request: RequestHeader) = {
result: Result)(implicit request: RequestHeader) = {

result.map(_.addingToSession(settings.sessionKey -> serialize(authenticator))).recover {
Future {
result.addingToSession(settings.sessionKey -> serialize(authenticator))
}.recover {
case e => throw new AuthenticatorUpdateException(UpdateError.format(ID, authenticator), e)
}

}

/**
Expand All @@ -232,7 +235,7 @@ class SessionAuthenticatorService(
*/
protected[silhouette] def renew(
authenticator: SessionAuthenticator,
result: Future[Result])(implicit request: RequestHeader) = {
result: Result)(implicit request: RequestHeader) = {

create(authenticator.loginInfo).flatMap { a =>
init(a).flatMap(v => embed(v, result))
Expand All @@ -250,11 +253,14 @@ class SessionAuthenticatorService(
*/
protected[silhouette] def discard(
authenticator: SessionAuthenticator,
result: Future[Result])(implicit request: RequestHeader) = {
result: Result)(implicit request: RequestHeader) = {

result.map(_.removingFromSession(settings.sessionKey)).recover {
Future {
result.removingFromSession(settings.sessionKey)
}.recover {
case e => throw new AuthenticatorDiscardingException(DiscardError.format(ID, authenticator), e)
}

}

/**
Expand Down
Loading

0 comments on commit d4442a7

Please sign in to comment.