diff --git a/src/main/scala/app/ControllerBase.scala b/src/main/scala/app/ControllerBase.scala index a8226c6..e6ac526 100644 --- a/src/main/scala/app/ControllerBase.scala +++ b/src/main/scala/app/ControllerBase.scala @@ -3,7 +3,7 @@ import _root_.util.Directory._ import _root_.util.Implicits._ import _root_.util.ControlUtil._ -import _root_.util.{FileUtil, Validations} +import _root_.util.{FileUtil, Validations, Keys} import org.scalatra._ import org.scalatra.json._ import org.json4s._ @@ -34,7 +34,7 @@ val path = httpRequest.getRequestURI.substring(context.length) 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){ // Redirect to login form httpResponse.sendRedirect(context + "/signin?" + path) @@ -63,7 +63,7 @@ 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 = super.get(path){ @@ -197,14 +197,10 @@ // def removeTemporaryFile(fileId: String)(implicit session: HttpSession): Unit = // 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] = - defining(Option(session.getAttribute("upload_" + fileId).asInstanceOf[String])){ filename => - if(filename.isDefined){ - session.removeAttribute("upload_" + fileId) - } - filename - } + session.getAndRemove[String](Keys.Session.Upload(fileId)) } \ No newline at end of file diff --git a/src/main/scala/app/DashboardController.scala b/src/main/scala/app/DashboardController.scala index 16fa0cb..b8970f1 100644 --- a/src/main/scala/app/DashboardController.scala +++ b/src/main/scala/app/DashboardController.scala @@ -1,7 +1,7 @@ package app import service._ -import util.UsersAuthenticator +import util.{UsersAuthenticator, Keys} import util.Implicits._ class DashboardController extends DashboardControllerBase @@ -43,10 +43,9 @@ import IssuesService._ // condition - val sessionKey = "dashboard/issues" - val condition = session.putAndGet(sessionKey, + val condition = session.putAndGet(Keys.Session.DashboardIssues, 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 @@ -75,10 +74,9 @@ import PullRequestService._ // condition - val sessionKey = "dashboard/pulls" - val condition = session.putAndGet(sessionKey, { + val condition = session.putAndGet(Keys.Session.DashboardPulls, { if(request.hasQueryString) IssueSearchCondition(request) - else session.getAs[IssueSearchCondition](sessionKey).getOrElse(IssueSearchCondition()) + else session.getAs[IssueSearchCondition](Keys.Session.DashboardPulls).getOrElse(IssueSearchCondition()) }.copy(repo = repository)) val userName = context.loginAccount.get.userName diff --git a/src/main/scala/app/FileUploadController.scala b/src/main/scala/app/FileUploadController.scala index b788c24..6ea5fa2 100644 --- a/src/main/scala/app/FileUploadController.scala +++ b/src/main/scala/app/FileUploadController.scala @@ -1,6 +1,6 @@ package app -import util.FileUtil +import _root_.util.{Keys, FileUtil} import util.ControlUtil._ import org.scalatra._ import org.scalatra.servlet.{MultipartConfig, FileUploadSupport} @@ -21,7 +21,7 @@ fileParams.get("file") match { case Some(file) if(FileUtil.isImage(file.name)) => defining(generateFileId){ fileId => FileUtils.writeByteArrayToFile(getTemporaryFile(fileId), file.get) - session += "upload_" + fileId -> file.name + session += Keys.Session.Upload(fileId) -> file.name Ok(fileId) } case None => BadRequest diff --git a/src/main/scala/app/IssuesController.scala b/src/main/scala/app/IssuesController.scala index 9adab7c..bff45dd 100644 --- a/src/main/scala/app/IssuesController.scala +++ b/src/main/scala/app/IssuesController.scala @@ -4,7 +4,7 @@ import service._ import IssuesService._ -import util.{CollaboratorsAuthenticator, ReferrerAuthenticator, ReadableUsersAuthenticator, Notifier} +import util.{CollaboratorsAuthenticator, ReferrerAuthenticator, ReadableUsersAuthenticator, Notifier, Keys} import util.Implicits._ import util.ControlUtil._ import org.scalatra.Ok @@ -328,7 +328,7 @@ defining(repository.owner, repository.name){ case (owner, repoName) => val filterUser = Map(filter -> params.getOrElse("userName", "")) val page = IssueSearchCondition.page(request) - val sessionKey = s"${owner}/${repoName}/issues" + val sessionKey = Keys.Session.Issues(owner, repoName) // retrieve search condition val condition = session.putAndGet(sessionKey, diff --git a/src/main/scala/app/PullRequestsController.scala b/src/main/scala/app/PullRequestsController.scala index 6ee5c34..0d42d92 100644 --- a/src/main/scala/app/PullRequestsController.scala +++ b/src/main/scala/app/PullRequestsController.scala @@ -1,6 +1,6 @@ package app -import util.{LockUtil, CollaboratorsAuthenticator, JGitUtil, ReferrerAuthenticator, Notifier} +import util.{LockUtil, CollaboratorsAuthenticator, JGitUtil, ReferrerAuthenticator, Notifier, Keys} import util.Directory._ import util.Implicits._ import util.ControlUtil._ @@ -369,7 +369,7 @@ defining(repository.owner, repository.name){ case (owner, repoName) => val filterUser = userName.map { x => Map("created_by" -> x) } getOrElse Map("all" -> "") val page = IssueSearchCondition.page(request) - val sessionKey = s"${owner}/${repoName}/pulls" + val sessionKey = Keys.Session.Pulls(owner, repoName) // retrieve search condition val condition = session.putAndGet(sessionKey, diff --git a/src/main/scala/app/SignInController.scala b/src/main/scala/app/SignInController.scala index 79d946e..7d4b2a9 100644 --- a/src/main/scala/app/SignInController.scala +++ b/src/main/scala/app/SignInController.scala @@ -3,6 +3,7 @@ import service._ import jp.sf.amateras.scalatra.forms._ import util.Implicits._ +import util.Keys class SignInController extends SignInControllerBase with SystemSettingsService with AccountService @@ -18,7 +19,7 @@ get("/signin"){ val redirect = params.get("redirect") if(redirect.isDefined && redirect.get.startsWith("/")){ - session.setAttribute("REDIRECT", redirect.get) + session.setAttribute(Keys.Session.Redirect, redirect.get) } html.signin(loadSystemSettings()) } @@ -39,10 +40,10 @@ * Set account information into HttpSession and redirect. */ private def signin(account: model.Account) = { - session.setAttribute("LOGIN_ACCOUNT", account) + session.setAttribute(Keys.Session.LoginAccount, account) updateLastLoginDate(account.userName) - session.getAndRemove[String]("REDIRECT").map { redirectUrl => + session.getAndRemove[String](Keys.Session.Redirect).map { redirectUrl => if(redirectUrl.replaceFirst("/$", "") == request.getContextPath){ redirect("/") } else { diff --git a/src/main/scala/util/Keys.scala b/src/main/scala/util/Keys.scala new file mode 100644 index 0000000..9dae8d0 --- /dev/null +++ b/src/main/scala/util/Keys.scala @@ -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}" + + } + +}