diff --git a/src/main/scala/app/AccountController.scala b/src/main/scala/app/AccountController.scala index 3304480..1db5882 100644 --- a/src/main/scala/app/AccountController.scala +++ b/src/main/scala/app/AccountController.scala @@ -5,6 +5,7 @@ import util.StringUtil._ import util.Directory._ import util.ControlUtil._ +import util.Implicits._ import ssh.SshUtil import jp.sf.amateras.scalatra.forms._ import org.apache.commons.io.FileUtils diff --git a/src/main/scala/app/ControllerBase.scala b/src/main/scala/app/ControllerBase.scala index 2bdc417..b36d53c 100644 --- a/src/main/scala/app/ControllerBase.scala +++ b/src/main/scala/app/ControllerBase.scala @@ -9,8 +9,7 @@ import org.json4s._ import jp.sf.amateras.scalatra.forms._ import org.apache.commons.io.FileUtils -import slick.jdbc.JdbcBackend -import model.Account +import model._ import service.{SystemSettingsService, AccountService} import javax.servlet.http.{HttpServletResponse, HttpServletRequest} import javax.servlet.{FilterChain, ServletResponse, ServletRequest} @@ -25,10 +24,6 @@ implicit val jsonFormats = DefaultFormats - // Convert to slick session. - implicit def request2Session(implicit request: HttpServletRequest): JdbcBackend#Session = - request.getAttribute(Keys.Request.DBSession).asInstanceOf[JdbcBackend#Session] - // Don't set content type via Accept header. override def format(implicit request: HttpServletRequest) = "" diff --git a/src/main/scala/app/IndexController.scala b/src/main/scala/app/IndexController.scala index 802b9b1..84270b8 100644 --- a/src/main/scala/app/IndexController.scala +++ b/src/main/scala/app/IndexController.scala @@ -1,6 +1,7 @@ package app import util._ +import util.Implicits._ import service._ import jp.sf.amateras.scalatra.forms._ diff --git a/src/main/scala/app/LabelsController.scala b/src/main/scala/app/LabelsController.scala index acbfef8..2ac47fc 100644 --- a/src/main/scala/app/LabelsController.scala +++ b/src/main/scala/app/LabelsController.scala @@ -3,6 +3,7 @@ import jp.sf.amateras.scalatra.forms._ import service._ import util.CollaboratorsAuthenticator +import util.Implicits._ import org.scalatra.i18n.Messages class LabelsController extends LabelsControllerBase diff --git a/src/main/scala/app/RepositorySettingsController.scala b/src/main/scala/app/RepositorySettingsController.scala index 92b4360..1f2c35e 100644 --- a/src/main/scala/app/RepositorySettingsController.scala +++ b/src/main/scala/app/RepositorySettingsController.scala @@ -2,13 +2,14 @@ import service._ import util.Directory._ +import util.ControlUtil._ +import util.Implicits._ import util.{UsersAuthenticator, OwnerAuthenticator} +import util.JGitUtil.CommitInfo import jp.sf.amateras.scalatra.forms._ import org.apache.commons.io.FileUtils import org.scalatra.i18n.Messages import service.WebHookService.WebHookPayload -import util.JGitUtil.CommitInfo -import util.ControlUtil._ import org.eclipse.jgit.api.Git class RepositorySettingsController extends RepositorySettingsControllerBase diff --git a/src/main/scala/app/UserManagementController.scala b/src/main/scala/app/UserManagementController.scala index dc3543c..ee568f3 100644 --- a/src/main/scala/app/UserManagementController.scala +++ b/src/main/scala/app/UserManagementController.scala @@ -4,10 +4,11 @@ import util.AdminAuthenticator import util.StringUtil._ import util.ControlUtil._ +import util.Directory._ +import util.Implicits._ import jp.sf.amateras.scalatra.forms._ import org.scalatra.i18n.Messages import org.apache.commons.io.FileUtils -import util.Directory._ class UserManagementController extends UserManagementControllerBase with AccountService with RepositoryService with AdminAuthenticator diff --git a/src/main/scala/app/WikiController.scala b/src/main/scala/app/WikiController.scala index d7399ed..5270d03 100644 --- a/src/main/scala/app/WikiController.scala +++ b/src/main/scala/app/WikiController.scala @@ -4,10 +4,10 @@ import util._ import util.Directory._ import util.ControlUtil._ +import util.Implicits._ import jp.sf.amateras.scalatra.forms._ import org.eclipse.jgit.api.Git import org.scalatra.i18n.Messages -import scala.Some import java.util.ResourceBundle class WikiController extends WikiControllerBase diff --git a/src/main/scala/service/RequestCache.scala b/src/main/scala/service/RequestCache.scala index b53cc28..34c5ef3 100644 --- a/src/main/scala/service/RequestCache.scala +++ b/src/main/scala/service/RequestCache.scala @@ -2,6 +2,7 @@ import model._ import slick.jdbc.JdbcBackend +import util.Implicits.request2Session /** * This service is used for a view helper mainly. @@ -11,22 +12,25 @@ */ trait RequestCache extends SystemSettingsService with AccountService with IssuesService { + private implicit def context2Session(implicit context: app.Context): JdbcBackend#Session = + request2Session(context.request) + def getIssue(userName: String, repositoryName: String, issueId: String) - (implicit context: app.Context, session: JdbcBackend#Session): Option[Issue] = { + (implicit context: app.Context): Option[Issue] = { context.cache(s"issue.${userName}/${repositoryName}#${issueId}"){ super.getIssue(userName, repositoryName, issueId) } } def getAccountByUserName(userName: String) - (implicit context: app.Context, session: JdbcBackend#Session): Option[Account] = { + (implicit context: app.Context): Option[Account] = { context.cache(s"account.${userName}"){ super.getAccountByUserName(userName) } } def getAccountByMailAddress(mailAddress: String) - (implicit context: app.Context, session: JdbcBackend#Session): Option[Account] = { + (implicit context: app.Context): Option[Account] = { context.cache(s"account.${mailAddress}"){ super.getAccountByMailAddress(mailAddress) } diff --git a/src/main/scala/servlet/BasicAuthenticationFilter.scala b/src/main/scala/servlet/BasicAuthenticationFilter.scala index aab6e21..64d85ad 100644 --- a/src/main/scala/servlet/BasicAuthenticationFilter.scala +++ b/src/main/scala/servlet/BasicAuthenticationFilter.scala @@ -3,7 +3,7 @@ import javax.servlet._ import javax.servlet.http._ import service.{SystemSettingsService, AccountService, RepositoryService} -import model.Account +import model._ import org.slf4j.LoggerFactory import slick.jdbc.JdbcBackend import util.Implicits._ @@ -22,9 +22,8 @@ def destroy(): Unit = {} def doFilter(req: ServletRequest, res: ServletResponse, chain: FilterChain): Unit = { - val request = req.asInstanceOf[HttpServletRequest] + implicit val request = req.asInstanceOf[HttpServletRequest] val response = res.asInstanceOf[HttpServletResponse] - implicit val session = req.getAttribute(Keys.Request.DBSession).asInstanceOf[JdbcBackend#Session] val wrappedResponse = new HttpServletResponseWrapper(response){ override def setCharacterEncoding(encoding: String) = {} diff --git a/src/main/scala/servlet/GitRepositoryServlet.scala b/src/main/scala/servlet/GitRepositoryServlet.scala index bb357ad..0b19858 100644 --- a/src/main/scala/servlet/GitRepositoryServlet.scala +++ b/src/main/scala/servlet/GitRepositoryServlet.scala @@ -17,6 +17,7 @@ import org.eclipse.jgit.api.Git import util.JGitUtil.CommitInfo import service.IssuesService.IssueSearchCondition +import slick.jdbc.JdbcBackend /** * Provides Git repository via HTTP. @@ -64,7 +65,7 @@ } class GitBucketReceivePackFactory extends ReceivePackFactory[HttpServletRequest] with SystemSettingsService { - + private val logger = LoggerFactory.getLogger(classOf[GitBucketReceivePackFactory]) override def create(request: HttpServletRequest, db: Repository): ReceivePack = { @@ -81,9 +82,11 @@ logger.debug("repository:" + owner + "/" + repository) if(!repository.endsWith(".wiki")){ - val hook = new CommitLogHook(owner, repository, pusher, baseUrl(request)) - receivePack.setPreReceiveHook(hook) - receivePack.setPostReceiveHook(hook) + defining(request) { implicit r => + val hook = new CommitLogHook(owner, repository, pusher, baseUrl) + receivePack.setPreReceiveHook(hook) + receivePack.setPostReceiveHook(hook) + } } receivePack } @@ -92,7 +95,8 @@ import scala.collection.JavaConverters._ -class CommitLogHook(owner: String, repository: String, pusher: String, baseUrl: String) extends PostReceiveHook with PreReceiveHook +class CommitLogHook(owner: String, repository: String, pusher: String, baseUrl: String)(implicit session: JdbcBackend#Session) + extends PostReceiveHook with PreReceiveHook with RepositoryService with AccountService with IssuesService with ActivityService with PullRequestService with WebHookService { private val logger = LoggerFactory.getLogger(classOf[CommitLogHook])