mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-10-31 18:46:28 +01:00
57 lines
1.6 KiB
Scala
57 lines
1.6 KiB
Scala
package app
|
|
|
|
import service._
|
|
import jp.sf.amateras.scalatra.forms._
|
|
import util.Implicits._
|
|
import util.Keys
|
|
|
|
class SignInController extends SignInControllerBase with SystemSettingsService with AccountService
|
|
|
|
trait SignInControllerBase extends ControllerBase { self: SystemSettingsService with AccountService =>
|
|
|
|
case class SignInForm(userName: String, password: String)
|
|
|
|
val form = mapping(
|
|
"userName" -> trim(label("Username", text(required))),
|
|
"password" -> trim(label("Password", text(required)))
|
|
)(SignInForm.apply)
|
|
|
|
get("/signin"){
|
|
val redirect = params.get("redirect")
|
|
if(redirect.isDefined && redirect.get.startsWith("/")){
|
|
session.setAttribute(Keys.Session.Redirect, redirect.get)
|
|
}
|
|
html.signin(loadSystemSettings())
|
|
}
|
|
|
|
post("/signin", form){ form =>
|
|
authenticate(loadSystemSettings(), form.userName, form.password) match {
|
|
case Some(account) => signin(account)
|
|
case None => redirect("/signin")
|
|
}
|
|
}
|
|
|
|
get("/signout"){
|
|
session.invalidate
|
|
redirect("/")
|
|
}
|
|
|
|
/**
|
|
* Set account information into HttpSession and redirect.
|
|
*/
|
|
private def signin(account: model.Account) = {
|
|
session.setAttribute(Keys.Session.LoginAccount, account)
|
|
updateLastLoginDate(account.userName)
|
|
|
|
session.getAndRemove[String](Keys.Session.Redirect).map { redirectUrl =>
|
|
if(redirectUrl.replaceFirst("/$", "") == request.getContextPath){
|
|
redirect("/")
|
|
} else {
|
|
redirect(redirectUrl)
|
|
}
|
|
}.getOrElse {
|
|
redirect("/")
|
|
}
|
|
}
|
|
|
|
} |