diff --git a/src/main/scala/ScalatraBootstrap.scala b/src/main/scala/ScalatraBootstrap.scala index 4ef4c88..de3c40d 100644 --- a/src/main/scala/ScalatraBootstrap.scala +++ b/src/main/scala/ScalatraBootstrap.scala @@ -17,7 +17,6 @@ context.mount(new IndexController, "/") context.mount(new SearchController, "/") context.mount(new FileUploadController, "/upload") - context.mount(new SignInController, "/*") context.mount(new DashboardController, "/*") context.mount(new UserManagementController, "/*") context.mount(new SystemSettingsController, "/*") diff --git a/src/main/scala/app/IndexController.scala b/src/main/scala/app/IndexController.scala index 1310372..2f5f689 100644 --- a/src/main/scala/app/IndexController.scala +++ b/src/main/scala/app/IndexController.scala @@ -1,15 +1,23 @@ package app import util._ +import util.Implicits._ import service._ +import jp.sf.amateras.scalatra.forms._ class IndexController extends IndexControllerBase with RepositoryService with SystemSettingsService with ActivityService with AccountService with UsersAuthenticator trait IndexControllerBase extends ControllerBase { - self: RepositoryService with SystemSettingsService with ActivityService with AccountService - with UsersAuthenticator => + self: RepositoryService with SystemSettingsService with ActivityService with AccountService with UsersAuthenticator => + + 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("/"){ val loginAccount = context.loginAccount @@ -21,6 +29,44 @@ ) } + 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("/") + } + } + /** * JSON API for collaborator completion. * diff --git a/src/main/scala/app/SignInController.scala b/src/main/scala/app/SignInController.scala deleted file mode 100644 index b6a43f0..0000000 --- a/src/main/scala/app/SignInController.scala +++ /dev/null @@ -1,58 +0,0 @@ -package app - -import service._ -import jp.sf.amateras.scalatra.forms._ -import util.Implicits._ -import util.StringUtil._ -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("/") - } - } - -} \ No newline at end of file