Improve session handling.

This commit is contained in:
takezoe
2013-09-23 00:18:38 +09:00
parent fd8b5780f3
commit 296fc9a3df
6 changed files with 16 additions and 11 deletions

View File

@@ -63,11 +63,7 @@ abstract class ControllerBase extends ScalatraFilter
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){

View File

@@ -78,7 +78,7 @@ trait DashboardControllerBase extends ControllerBase {
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

View File

@@ -333,7 +333,7 @@ trait IssuesControllerBase extends ControllerBase {
// 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(

View File

@@ -374,7 +374,7 @@ trait PullRequestsControllerBase extends ControllerBase {
// 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(

View File

@@ -2,6 +2,7 @@ package app
import service._
import jp.sf.amateras.scalatra.forms._
import util.Implicits._
class SignInController extends SignInControllerBase with SystemSettingsService with AccountService
@@ -41,8 +42,7 @@ trait SignInControllerBase extends ControllerBase { self: SystemSettingsService
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 {

View File

@@ -54,10 +54,19 @@ object Implicits {
}
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)
}
}
}