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