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 "") request.getRequestURI + (if(queryString != null) "?" + queryString else "")
} }
private def LoginAccount: Option[Account] = private def LoginAccount: Option[Account] = session.getAs[Account]("LOGIN_ACCOUNT")
session.get("LOGIN_ACCOUNT") match {
case Some(x: Account) => Some(x)
case _ => None
}
def ajaxGet(path : String)(action : => Any) : Route = def ajaxGet(path : String)(action : => Any) : Route =
super.get(path){ super.get(path){

View File

@@ -78,7 +78,7 @@ trait DashboardControllerBase extends ControllerBase {
val sessionKey = "dashboard/pulls" val sessionKey = "dashboard/pulls"
val condition = session.putAndGet(sessionKey, { val condition = session.putAndGet(sessionKey, {
if(request.hasQueryString) IssueSearchCondition(request) if(request.hasQueryString) IssueSearchCondition(request)
else session.get(sessionKey).getOrElse(IssueSearchCondition()).asInstanceOf[IssueSearchCondition] else session.getAs[IssueSearchCondition](sessionKey).getOrElse(IssueSearchCondition())
}.copy(repo = repository)) }.copy(repo = repository))
val userName = context.loginAccount.get.userName val userName = context.loginAccount.get.userName

View File

@@ -333,7 +333,7 @@ trait IssuesControllerBase extends ControllerBase {
// retrieve search condition // retrieve search condition
val condition = session.putAndGet(sessionKey, val condition = session.putAndGet(sessionKey,
if(request.hasQueryString) IssueSearchCondition(request) if(request.hasQueryString) IssueSearchCondition(request)
else session.get(sessionKey).getOrElse(IssueSearchCondition()).asInstanceOf[IssueSearchCondition] else session.getAs[IssueSearchCondition](sessionKey).getOrElse(IssueSearchCondition())
) )
issues.html.list( issues.html.list(

View File

@@ -374,7 +374,7 @@ trait PullRequestsControllerBase extends ControllerBase {
// retrieve search condition // retrieve search condition
val condition = session.putAndGet(sessionKey, val condition = session.putAndGet(sessionKey,
if(request.hasQueryString) IssueSearchCondition(request) if(request.hasQueryString) IssueSearchCondition(request)
else session.get(sessionKey).getOrElse(IssueSearchCondition()).asInstanceOf[IssueSearchCondition] else session.getAs[IssueSearchCondition](sessionKey).getOrElse(IssueSearchCondition())
) )
pulls.html.list( pulls.html.list(

View File

@@ -2,6 +2,7 @@ package app
import service._ import service._
import jp.sf.amateras.scalatra.forms._ import jp.sf.amateras.scalatra.forms._
import util.Implicits._
class SignInController extends SignInControllerBase with SystemSettingsService with AccountService class SignInController extends SignInControllerBase with SystemSettingsService with AccountService
@@ -41,8 +42,7 @@ trait SignInControllerBase extends ControllerBase { self: SystemSettingsService
session.setAttribute("LOGIN_ACCOUNT", account) session.setAttribute("LOGIN_ACCOUNT", account)
updateLastLoginDate(account.userName) updateLastLoginDate(account.userName)
session.get("REDIRECT").map { case redirectUrl: String => session.getAndRemove[String]("REDIRECT").map { redirectUrl =>
session.removeAttribute("REDIRECT")
if(redirectUrl.replaceFirst("/$", "") == request.getContextPath){ if(redirectUrl.replaceFirst("/$", "") == request.getContextPath){
redirect("/") redirect("/")
} else { } else {

View File

@@ -54,10 +54,19 @@ object Implicits {
} }
implicit class RichSession(session: HttpSession){ implicit class RichSession(session: HttpSession){
def putAndGet[T](key: String, value: T): T = { def putAndGet[T](key: String, value: T): T = {
session.setAttribute(key, value) session.setAttribute(key, value)
value value
} }
def getAndRemove[T](key: String): Option[T] = {
val value = session.getAttribute(key).asInstanceOf[T]
if(value == null){
session.removeAttribute(key)
}
Option(value)
}
} }
} }