Define session keys.

This commit is contained in:
takezoe
2013-09-23 00:51:57 +09:00
parent 296fc9a3df
commit c57bc487a3
7 changed files with 68 additions and 26 deletions

View File

@@ -3,7 +3,7 @@ package app
import _root_.util.Directory._ import _root_.util.Directory._
import _root_.util.Implicits._ import _root_.util.Implicits._
import _root_.util.ControlUtil._ import _root_.util.ControlUtil._
import _root_.util.{FileUtil, Validations} import _root_.util.{FileUtil, Validations, Keys}
import org.scalatra._ import org.scalatra._
import org.scalatra.json._ import org.scalatra.json._
import org.json4s._ import org.json4s._
@@ -34,7 +34,7 @@ abstract class ControllerBase extends ScalatraFilter
val path = httpRequest.getRequestURI.substring(context.length) val path = httpRequest.getRequestURI.substring(context.length)
if(path.startsWith("/console/")){ if(path.startsWith("/console/")){
val account = httpRequest.getSession.getAttribute("LOGIN_ACCOUNT").asInstanceOf[Account] val account = httpRequest.getSession.getAttribute(Keys.Session.LoginAccount).asInstanceOf[Account]
if(account == null){ if(account == null){
// Redirect to login form // Redirect to login form
httpResponse.sendRedirect(context + "/signin?" + path) httpResponse.sendRedirect(context + "/signin?" + path)
@@ -63,7 +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] = session.getAs[Account]("LOGIN_ACCOUNT") private def LoginAccount: Option[Account] = session.getAs[Account](Keys.Session.LoginAccount)
def ajaxGet(path : String)(action : => Any) : Route = def ajaxGet(path : String)(action : => Any) : Route =
super.get(path){ super.get(path){
@@ -197,14 +197,10 @@ trait FileUploadControllerBase {
// def removeTemporaryFile(fileId: String)(implicit session: HttpSession): Unit = // def removeTemporaryFile(fileId: String)(implicit session: HttpSession): Unit =
// getTemporaryFile(fileId).delete() // getTemporaryFile(fileId).delete()
def removeTemporaryFiles()(implicit session: HttpSession): Unit = FileUtils.deleteDirectory(TemporaryDir) def removeTemporaryFiles()(implicit session: HttpSession): Unit =
FileUtils.deleteDirectory(TemporaryDir)
def getUploadedFilename(fileId: String)(implicit session: HttpSession): Option[String] = def getUploadedFilename(fileId: String)(implicit session: HttpSession): Option[String] =
defining(Option(session.getAttribute("upload_" + fileId).asInstanceOf[String])){ filename => session.getAndRemove[String](Keys.Session.Upload(fileId))
if(filename.isDefined){
session.removeAttribute("upload_" + fileId)
}
filename
}
} }

View File

@@ -1,7 +1,7 @@
package app package app
import service._ import service._
import util.UsersAuthenticator import util.{UsersAuthenticator, Keys}
import util.Implicits._ import util.Implicits._
class DashboardController extends DashboardControllerBase class DashboardController extends DashboardControllerBase
@@ -43,10 +43,9 @@ trait DashboardControllerBase extends ControllerBase {
import IssuesService._ import IssuesService._
// condition // condition
val sessionKey = "dashboard/issues" val condition = session.putAndGet(Keys.Session.DashboardIssues,
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](Keys.Session.DashboardIssues).getOrElse(IssueSearchCondition())
) )
val userName = context.loginAccount.get.userName val userName = context.loginAccount.get.userName
@@ -75,10 +74,9 @@ trait DashboardControllerBase extends ControllerBase {
import PullRequestService._ import PullRequestService._
// condition // condition
val sessionKey = "dashboard/pulls" val condition = session.putAndGet(Keys.Session.DashboardPulls, {
val condition = session.putAndGet(sessionKey, {
if(request.hasQueryString) IssueSearchCondition(request) if(request.hasQueryString) IssueSearchCondition(request)
else session.getAs[IssueSearchCondition](sessionKey).getOrElse(IssueSearchCondition()) else session.getAs[IssueSearchCondition](Keys.Session.DashboardPulls).getOrElse(IssueSearchCondition())
}.copy(repo = repository)) }.copy(repo = repository))
val userName = context.loginAccount.get.userName val userName = context.loginAccount.get.userName

View File

@@ -1,6 +1,6 @@
package app package app
import util.FileUtil import _root_.util.{Keys, FileUtil}
import util.ControlUtil._ import util.ControlUtil._
import org.scalatra._ import org.scalatra._
import org.scalatra.servlet.{MultipartConfig, FileUploadSupport} import org.scalatra.servlet.{MultipartConfig, FileUploadSupport}
@@ -21,7 +21,7 @@ class FileUploadController extends ScalatraServlet
fileParams.get("file") match { fileParams.get("file") match {
case Some(file) if(FileUtil.isImage(file.name)) => defining(generateFileId){ fileId => case Some(file) if(FileUtil.isImage(file.name)) => defining(generateFileId){ fileId =>
FileUtils.writeByteArrayToFile(getTemporaryFile(fileId), file.get) FileUtils.writeByteArrayToFile(getTemporaryFile(fileId), file.get)
session += "upload_" + fileId -> file.name session += Keys.Session.Upload(fileId) -> file.name
Ok(fileId) Ok(fileId)
} }
case None => BadRequest case None => BadRequest

View File

@@ -4,7 +4,7 @@ import jp.sf.amateras.scalatra.forms._
import service._ import service._
import IssuesService._ import IssuesService._
import util.{CollaboratorsAuthenticator, ReferrerAuthenticator, ReadableUsersAuthenticator, Notifier} import util.{CollaboratorsAuthenticator, ReferrerAuthenticator, ReadableUsersAuthenticator, Notifier, Keys}
import util.Implicits._ import util.Implicits._
import util.ControlUtil._ import util.ControlUtil._
import org.scalatra.Ok import org.scalatra.Ok
@@ -328,7 +328,7 @@ trait IssuesControllerBase extends ControllerBase {
defining(repository.owner, repository.name){ case (owner, repoName) => defining(repository.owner, repository.name){ case (owner, repoName) =>
val filterUser = Map(filter -> params.getOrElse("userName", "")) val filterUser = Map(filter -> params.getOrElse("userName", ""))
val page = IssueSearchCondition.page(request) val page = IssueSearchCondition.page(request)
val sessionKey = s"${owner}/${repoName}/issues" val sessionKey = Keys.Session.Issues(owner, repoName)
// retrieve search condition // retrieve search condition
val condition = session.putAndGet(sessionKey, val condition = session.putAndGet(sessionKey,

View File

@@ -1,6 +1,6 @@
package app package app
import util.{LockUtil, CollaboratorsAuthenticator, JGitUtil, ReferrerAuthenticator, Notifier} import util.{LockUtil, CollaboratorsAuthenticator, JGitUtil, ReferrerAuthenticator, Notifier, Keys}
import util.Directory._ import util.Directory._
import util.Implicits._ import util.Implicits._
import util.ControlUtil._ import util.ControlUtil._
@@ -369,7 +369,7 @@ trait PullRequestsControllerBase extends ControllerBase {
defining(repository.owner, repository.name){ case (owner, repoName) => defining(repository.owner, repository.name){ case (owner, repoName) =>
val filterUser = userName.map { x => Map("created_by" -> x) } getOrElse Map("all" -> "") val filterUser = userName.map { x => Map("created_by" -> x) } getOrElse Map("all" -> "")
val page = IssueSearchCondition.page(request) val page = IssueSearchCondition.page(request)
val sessionKey = s"${owner}/${repoName}/pulls" val sessionKey = Keys.Session.Pulls(owner, repoName)
// retrieve search condition // retrieve search condition
val condition = session.putAndGet(sessionKey, val condition = session.putAndGet(sessionKey,

View File

@@ -3,6 +3,7 @@ package app
import service._ import service._
import jp.sf.amateras.scalatra.forms._ import jp.sf.amateras.scalatra.forms._
import util.Implicits._ import util.Implicits._
import util.Keys
class SignInController extends SignInControllerBase with SystemSettingsService with AccountService class SignInController extends SignInControllerBase with SystemSettingsService with AccountService
@@ -18,7 +19,7 @@ trait SignInControllerBase extends ControllerBase { self: SystemSettingsService
get("/signin"){ get("/signin"){
val redirect = params.get("redirect") val redirect = params.get("redirect")
if(redirect.isDefined && redirect.get.startsWith("/")){ if(redirect.isDefined && redirect.get.startsWith("/")){
session.setAttribute("REDIRECT", redirect.get) session.setAttribute(Keys.Session.Redirect, redirect.get)
} }
html.signin(loadSystemSettings()) html.signin(loadSystemSettings())
} }
@@ -39,10 +40,10 @@ trait SignInControllerBase extends ControllerBase { self: SystemSettingsService
* Set account information into HttpSession and redirect. * Set account information into HttpSession and redirect.
*/ */
private def signin(account: model.Account) = { private def signin(account: model.Account) = {
session.setAttribute("LOGIN_ACCOUNT", account) session.setAttribute(Keys.Session.LoginAccount, account)
updateLastLoginDate(account.userName) updateLastLoginDate(account.userName)
session.getAndRemove[String]("REDIRECT").map { redirectUrl => session.getAndRemove[String](Keys.Session.Redirect).map { redirectUrl =>
if(redirectUrl.replaceFirst("/$", "") == request.getContextPath){ if(redirectUrl.replaceFirst("/$", "") == request.getContextPath){
redirect("/") redirect("/")
} else { } else {

View File

@@ -0,0 +1,47 @@
package util
/**
* Define key strings for request attributes, session attributes or flash attributes..
*/
object Keys {
object Session {
/**
* Session key for the logged in account information.
*/
val LoginAccount = "LOGIN_ACCOUNT"
/**
* Session key for the redirect URL.
*/
val Redirect = "REDIRECT"
/**
* Session key for the issue search condition in dashboard.
*/
val DashboardIssues = "dashboard/issues"
/**
* Session key for the pull request search condition in dashboard.
*/
val DashboardPulls = "dashboard/pulls"
/**
* Generate session key for the issue search condition.
*/
def Issues(owner: String, name: String) = s"${owner}/${name}/issues"
/**
* Generate session key for the pull request search condition.
*/
def Pulls(owner: String, name: String) = s"${owner}/${name}/pulls"
/**
* Generate session key for the upload filename.
*/
def Upload(fileId: String) = s"upload_${fileId}"
}
}