mirror of
https://github.com/ysoftdevs/odc-analyzer.git
synced 2026-06-14 10:14:29 +02:00
Initial commit
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
package controllers
|
||||
|
||||
import javax.inject.Inject
|
||||
|
||||
import _root_.services.CredentialsVerificationService
|
||||
import com.mohiva.play.silhouette.api._
|
||||
import com.mohiva.play.silhouette.api.util.Clock
|
||||
import com.mohiva.play.silhouette.impl.authenticators.CookieAuthenticator
|
||||
import models.User
|
||||
import play.api.data.Form
|
||||
import play.api.data.Forms._
|
||||
import play.api.i18n.{Messages, MessagesApi}
|
||||
import play.api.libs.concurrent.Execution.Implicits._
|
||||
|
||||
import scala.concurrent.Future
|
||||
|
||||
final case class LoginRequest(username: String, password: String, rememberMe: Boolean)
|
||||
|
||||
class AuthController @Inject() (
|
||||
val messagesApi: MessagesApi,
|
||||
val env: Environment[User, CookieAuthenticator],
|
||||
clock: Clock,
|
||||
credentialsVerificationService: CredentialsVerificationService
|
||||
) extends AuthenticatedController {
|
||||
|
||||
val signInForm = Form(mapping(
|
||||
"username" -> nonEmptyText,
|
||||
"password" -> nonEmptyText,
|
||||
"rememberMe" -> boolean
|
||||
)(LoginRequest.apply)(LoginRequest.unapply))
|
||||
|
||||
def signIn = UserAwareAction { implicit request =>
|
||||
request.identity match {
|
||||
case Some(user) => Redirect(routes.Application.index(Map()))
|
||||
case None => Ok(views.html.auth.signIn(signInForm/*, socialProviderRegistry*/))
|
||||
}
|
||||
}
|
||||
|
||||
def authenticate() = UserAwareAction.async { implicit request =>
|
||||
signInForm.bindFromRequest().fold(
|
||||
formWithErrors => Future.successful(BadRequest(views.html.auth.signIn(formWithErrors/*, socialProviderRegistry*/))),
|
||||
loginRequest => {
|
||||
credentialsVerificationService.verifyCredentials(loginRequest.username, loginRequest.password).flatMap{
|
||||
case true =>
|
||||
val loginInfo: LoginInfo = LoginInfo(providerID = "credentials-verification", providerKey = loginRequest.username)
|
||||
val user: User = User(username = loginRequest.username)
|
||||
env.authenticatorService.create(loginInfo) flatMap { authenticator =>
|
||||
env.eventBus.publish(LoginEvent(user, request, implicitly[Messages]))
|
||||
env.authenticatorService.init(authenticator).flatMap(cookie =>
|
||||
env.authenticatorService.embed(cookie.copy(secure = request.secure), Redirect(routes.Application.index(Map())))
|
||||
)
|
||||
}
|
||||
case false => Future.successful(Redirect(routes.AuthController.signIn()).flashing("error" -> Messages("invalid.credentials")))
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
def signOut = SecuredAction.async { implicit request =>
|
||||
val result = Redirect(routes.Application.index(Map()))
|
||||
env.eventBus.publish(LogoutEvent(request.identity, request, request2Messages))
|
||||
env.authenticatorService.discard(request.authenticator, result)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user