Added User to AuthenticatedAction
This commit is contained in:
@@ -2,20 +2,19 @@ package controllers.authentication
|
||||
|
||||
import dao.AuthTokensDAO
|
||||
import jakarta.inject.Inject
|
||||
import models.AuthToken
|
||||
import models.{AuthToken, User}
|
||||
import play.api.libs.json.*
|
||||
import play.api.mvc.Results.Unauthorized
|
||||
import play.api.mvc.{ActionRefiner, Request, Result, WrappedRequest}
|
||||
|
||||
import scala.concurrent.{ExecutionContext, Future}
|
||||
|
||||
class AuthenticatedRequest[A](val token: AuthToken, request: Request[A]) extends WrappedRequest[A](request)
|
||||
class AuthenticatedRequest[A](val token: AuthToken, val user: User, request: Request[A]) extends WrappedRequest[A](request)
|
||||
|
||||
class AuthenticatedAction @Inject()(authTokensDao: AuthTokensDAO)(implicit val executionContext: ExecutionContext) extends ActionRefiner[Request, AuthenticatedRequest] {
|
||||
private final val tokenPrefix = "Token"
|
||||
|
||||
override protected def refine[A](request: Request[A]): Future[Either[Result, AuthenticatedRequest[A]]] = {
|
||||
val unauthenticatedRequestError = Left(Unauthorized(Json.obj("error" -> "Unauthenticated")))
|
||||
val authHeader = request.headers.get("Authorization")
|
||||
.flatMap { header =>
|
||||
if header.startsWith(tokenPrefix) then Some(header.substring(tokenPrefix.length).trim)
|
||||
@@ -25,11 +24,21 @@ class AuthenticatedAction @Inject()(authTokensDao: AuthTokensDAO)(implicit val e
|
||||
|
||||
authHeader match {
|
||||
case Some(token) =>
|
||||
authTokensDao.find(token).map {
|
||||
case Some(authToken) => Right(AuthenticatedRequest[A](authToken, request))
|
||||
case None => unauthenticatedRequestError
|
||||
authTokensDao.find(token).flatMap {
|
||||
case Some(authToken) => findUser(request, authToken)
|
||||
case None => Future.successful(unauthenticatedRequestError)
|
||||
}
|
||||
case None => Future.successful(unauthenticatedRequestError)
|
||||
}
|
||||
}
|
||||
|
||||
private val unauthenticatedRequestError = Left(Unauthorized(Json.obj("error" -> "Unauthenticated")))
|
||||
|
||||
private def findUser[A](request: Request[A], token: AuthToken) = {
|
||||
authTokensDao.getUser(token).map {
|
||||
case Some(user) => Right(AuthenticatedRequest(token, user, request))
|
||||
case None => unauthenticatedRequestError
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user