diff --git a/src/main/scala/app/ControllerBase.scala b/src/main/scala/app/ControllerBase.scala index 31eac0e..a8226c6 100644 --- a/src/main/scala/app/ControllerBase.scala +++ b/src/main/scala/app/ControllerBase.scala @@ -63,11 +63,7 @@ request.getRequestURI + (if(queryString != null) "?" + queryString else "") } - private def LoginAccount: Option[Account] = - session.get("LOGIN_ACCOUNT") match { - case Some(x: Account) => Some(x) - case _ => None - } + private def LoginAccount: Option[Account] = session.getAs[Account]("LOGIN_ACCOUNT") def ajaxGet(path : String)(action : => Any) : Route = super.get(path){ diff --git a/src/main/scala/app/DashboardController.scala b/src/main/scala/app/DashboardController.scala index b0509dd..16fa0cb 100644 --- a/src/main/scala/app/DashboardController.scala +++ b/src/main/scala/app/DashboardController.scala @@ -78,7 +78,7 @@ val sessionKey = "dashboard/pulls" val condition = session.putAndGet(sessionKey, { if(request.hasQueryString) IssueSearchCondition(request) - else session.get(sessionKey).getOrElse(IssueSearchCondition()).asInstanceOf[IssueSearchCondition] + else session.getAs[IssueSearchCondition](sessionKey).getOrElse(IssueSearchCondition()) }.copy(repo = repository)) val userName = context.loginAccount.get.userName diff --git a/src/main/scala/app/IssuesController.scala b/src/main/scala/app/IssuesController.scala index b4f5376..9adab7c 100644 --- a/src/main/scala/app/IssuesController.scala +++ b/src/main/scala/app/IssuesController.scala @@ -333,7 +333,7 @@ // retrieve search condition val condition = session.putAndGet(sessionKey, if(request.hasQueryString) IssueSearchCondition(request) - else session.get(sessionKey).getOrElse(IssueSearchCondition()).asInstanceOf[IssueSearchCondition] + else session.getAs[IssueSearchCondition](sessionKey).getOrElse(IssueSearchCondition()) ) issues.html.list( diff --git a/src/main/scala/app/PullRequestsController.scala b/src/main/scala/app/PullRequestsController.scala index 5d4ec90..6ee5c34 100644 --- a/src/main/scala/app/PullRequestsController.scala +++ b/src/main/scala/app/PullRequestsController.scala @@ -374,7 +374,7 @@ // retrieve search condition val condition = session.putAndGet(sessionKey, if(request.hasQueryString) IssueSearchCondition(request) - else session.get(sessionKey).getOrElse(IssueSearchCondition()).asInstanceOf[IssueSearchCondition] + else session.getAs[IssueSearchCondition](sessionKey).getOrElse(IssueSearchCondition()) ) pulls.html.list( diff --git a/src/main/scala/app/SignInController.scala b/src/main/scala/app/SignInController.scala index 3b56301..79d946e 100644 --- a/src/main/scala/app/SignInController.scala +++ b/src/main/scala/app/SignInController.scala @@ -2,6 +2,7 @@ import service._ import jp.sf.amateras.scalatra.forms._ +import util.Implicits._ class SignInController extends SignInControllerBase with SystemSettingsService with AccountService @@ -25,7 +26,7 @@ post("/signin", form){ form => authenticate(loadSystemSettings(), form.userName, form.password) match { case Some(account) => signin(account) - case None => redirect("/signin") + case None => redirect("/signin") } } @@ -41,8 +42,7 @@ session.setAttribute("LOGIN_ACCOUNT", account) updateLastLoginDate(account.userName) - session.get("REDIRECT").map { case redirectUrl: String => - session.removeAttribute("REDIRECT") + session.getAndRemove[String]("REDIRECT").map { redirectUrl => if(redirectUrl.replaceFirst("/$", "") == request.getContextPath){ redirect("/") } else { diff --git a/src/main/scala/util/Implicits.scala b/src/main/scala/util/Implicits.scala index 75d34b3..957a030 100644 --- a/src/main/scala/util/Implicits.scala +++ b/src/main/scala/util/Implicits.scala @@ -54,10 +54,19 @@ } implicit class RichSession(session: HttpSession){ + def putAndGet[T](key: String, value: T): T = { session.setAttribute(key, value) value } + + def getAndRemove[T](key: String): Option[T] = { + val value = session.getAttribute(key).asInstanceOf[T] + if(value == null){ + session.removeAttribute(key) + } + Option(value) + } } } \ No newline at end of file