mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-10-30 18:15:59 +01:00
90 lines
2.4 KiB
Scala
90 lines
2.4 KiB
Scala
package app
|
|
|
|
import model.Account
|
|
import util.Validations
|
|
import org.scalatra._
|
|
import org.scalatra.json._
|
|
import org.json4s._
|
|
import jp.sf.amateras.scalatra.forms._
|
|
|
|
/**
|
|
* Provides generic features for ScalatraServlet implementations.
|
|
*/
|
|
abstract class ControllerBase extends ScalatraFilter
|
|
with ClientSideValidationFormSupport with JacksonJsonSupport with Validations {
|
|
|
|
implicit val jsonFormats = DefaultFormats
|
|
|
|
/**
|
|
* Returns the context object for the request.
|
|
*/
|
|
implicit def context: Context = Context(servletContext.getContextPath, LoginAccount, currentURL)
|
|
|
|
private def currentURL: String = {
|
|
val queryString = request.getQueryString
|
|
request.getRequestURI + (if(queryString != null) "?" + queryString else "")
|
|
}
|
|
|
|
private def LoginAccount: Option[Account] = {
|
|
session.get("LOGIN_ACCOUNT") match {
|
|
case Some(x: Account) => Some(x)
|
|
case _ => None
|
|
}
|
|
}
|
|
|
|
def ajaxGet(path : String)(action : => Any) : Route = {
|
|
super.get(path){
|
|
request.setAttribute("AJAX", "true")
|
|
action
|
|
}
|
|
}
|
|
|
|
override def ajaxGet[T](path : String, form : MappingValueType[T])(action : T => Any) : Route = {
|
|
super.ajaxGet(path, form){ form =>
|
|
request.setAttribute("AJAX", "true")
|
|
action(form)
|
|
}
|
|
}
|
|
|
|
def ajaxPost(path : String)(action : => Any) : Route = {
|
|
super.post(path){
|
|
request.setAttribute("AJAX", "true")
|
|
action
|
|
}
|
|
}
|
|
|
|
override def ajaxPost[T](path : String, form : MappingValueType[T])(action : T => Any) : Route = {
|
|
super.ajaxPost(path, form){ form =>
|
|
request.setAttribute("AJAX", "true")
|
|
action(form)
|
|
}
|
|
}
|
|
|
|
protected def NotFound() = {
|
|
if(request.getAttribute("AJAX") == null){
|
|
org.scalatra.NotFound(html.error("Not Found"))
|
|
} else {
|
|
org.scalatra.NotFound()
|
|
}
|
|
}
|
|
|
|
protected def Unauthorized()(implicit context: app.Context) = {
|
|
if(request.getAttribute("AJAX") == null){
|
|
if(context.loginAccount.isDefined){
|
|
org.scalatra.Unauthorized(redirect("/"))
|
|
} else {
|
|
org.scalatra.Unauthorized(redirect("/signin?" + currentURL))
|
|
}
|
|
} else {
|
|
org.scalatra.Unauthorized()
|
|
}
|
|
}
|
|
|
|
protected def baseUrl = {
|
|
val url = request.getRequestURL.toString
|
|
url.substring(0, url.length - (request.getRequestURI.length - request.getContextPath.length))
|
|
}
|
|
|
|
}
|
|
|
|
case class Context(path: String, loginAccount: Option[Account], currentUrl: String) |