mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-07 05:55:51 +01:00
(refs #341) Migrate slick session.
This commit is contained in:
@@ -9,6 +9,7 @@ import org.scalatra.json._
|
||||
import org.json4s._
|
||||
import jp.sf.amateras.scalatra.forms._
|
||||
import org.apache.commons.io.FileUtils
|
||||
import slick.jdbc.JdbcBackend
|
||||
import model.Account
|
||||
import service.{SystemSettingsService, AccountService}
|
||||
import javax.servlet.http.{HttpServletResponse, HttpServletRequest}
|
||||
@@ -24,6 +25,10 @@ abstract class ControllerBase extends ScalatraFilter
|
||||
|
||||
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) = ""
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import javax.servlet.http._
|
||||
import service.{SystemSettingsService, AccountService, RepositoryService}
|
||||
import model.Account
|
||||
import org.slf4j.LoggerFactory
|
||||
import slick.jdbc.JdbcBackend
|
||||
import util.Implicits._
|
||||
import util.ControlUtil._
|
||||
import util.Keys
|
||||
@@ -23,6 +24,7 @@ class BasicAuthenticationFilter extends Filter with RepositoryService with Accou
|
||||
def doFilter(req: ServletRequest, res: ServletResponse, chain: FilterChain): Unit = {
|
||||
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) = {}
|
||||
@@ -65,7 +67,8 @@ class BasicAuthenticationFilter extends Filter with RepositoryService with Accou
|
||||
}
|
||||
}
|
||||
|
||||
private def getWritableUser(username: String, password: String, repository: RepositoryService.RepositoryInfo): Option[Account] =
|
||||
private def getWritableUser(username: String, password: String, repository: RepositoryService.RepositoryInfo)
|
||||
(implicit session: JdbcBackend#Session): Option[Account] =
|
||||
authenticate(loadSystemSettings(), username, password) match {
|
||||
case x @ Some(account) if(hasWritePermission(repository.owner, repository.name, x)) => x
|
||||
case _ => None
|
||||
|
||||
@@ -3,6 +3,7 @@ package servlet
|
||||
import javax.servlet._
|
||||
import org.slf4j.LoggerFactory
|
||||
import javax.servlet.http.HttpServletRequest
|
||||
import util.Keys
|
||||
|
||||
/**
|
||||
* Controls the transaction with the open session in view pattern.
|
||||
@@ -20,8 +21,9 @@ class TransactionFilter extends Filter {
|
||||
// assets don't need transaction
|
||||
chain.doFilter(req, res)
|
||||
} else {
|
||||
Database(req.getServletContext) withTransaction {
|
||||
Database(req.getServletContext) withTransaction { session =>
|
||||
logger.debug("begin transaction")
|
||||
req.setAttribute(Keys.Request.DBSession, session)
|
||||
chain.doFilter(req, res)
|
||||
logger.debug("end transaction")
|
||||
}
|
||||
@@ -31,8 +33,8 @@ class TransactionFilter extends Filter {
|
||||
}
|
||||
|
||||
object Database {
|
||||
def apply(context: ServletContext): scala.slick.session.Database =
|
||||
scala.slick.session.Database.forURL(context.getInitParameter("db.url"),
|
||||
def apply(context: ServletContext): slick.jdbc.JdbcBackend.Database =
|
||||
slick.jdbc.JdbcBackend.Database.forURL(context.getInitParameter("db.url"),
|
||||
context.getInitParameter("db.user"),
|
||||
context.getInitParameter("db.password"))
|
||||
}
|
||||
|
||||
@@ -61,6 +61,11 @@ object Keys {
|
||||
*/
|
||||
object Request {
|
||||
|
||||
/**
|
||||
* Request key for the Slick Session.
|
||||
*/
|
||||
val DBSession = "DB_SESSION"
|
||||
|
||||
/**
|
||||
* Request key for the Ajax request flag.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user