mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-06 21:45:50 +01:00
Add RawData and 404 error response for plugin action
This commit is contained in:
@@ -7,6 +7,7 @@ package object plugin {
|
|||||||
|
|
||||||
case class Redirect(path: String)
|
case class Redirect(path: String)
|
||||||
case class Fragment(html: Html)
|
case class Fragment(html: Html)
|
||||||
|
case class RawData(contentType: String, content: Array[Byte])
|
||||||
|
|
||||||
object db {
|
object db {
|
||||||
// TODO labelled place holder support
|
// TODO labelled place holder support
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import play.twirl.api.Html
|
|||||||
import service.{AccountService, RepositoryService, SystemSettingsService}
|
import service.{AccountService, RepositoryService, SystemSettingsService}
|
||||||
import model.{Account, Session}
|
import model.{Account, Session}
|
||||||
import util.{JGitUtil, Keys}
|
import util.{JGitUtil, Keys}
|
||||||
import plugin.{Fragment, PluginConnectionHolder, Redirect}
|
import plugin.{RawData, Fragment, PluginConnectionHolder, Redirect}
|
||||||
import service.RepositoryService.RepositoryInfo
|
import service.RepositoryService.RepositoryInfo
|
||||||
import plugin.Security._
|
import plugin.Security._
|
||||||
|
|
||||||
@@ -46,13 +46,7 @@ class PluginActionInvokeFilter extends Filter with SystemSettingsService with Re
|
|||||||
} finally {
|
} finally {
|
||||||
PluginConnectionHolder.threadLocal.remove()
|
PluginConnectionHolder.threadLocal.remove()
|
||||||
}
|
}
|
||||||
result match {
|
processActionResult(result, request, response, context)
|
||||||
case x: String => renderGlobalHtml(request, response, context, x)
|
|
||||||
case x: Html => renderGlobalHtml(request, response, context, x.toString)
|
|
||||||
case x: Fragment => renderFragmentHtml(request, response, context, x.html.toString)
|
|
||||||
case x: Redirect => response.sendRedirect(x.path)
|
|
||||||
case x: AnyRef => renderJson(request, response, x)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// TODO NotFound or Error?
|
// TODO NotFound or Error?
|
||||||
}
|
}
|
||||||
@@ -81,13 +75,7 @@ class PluginActionInvokeFilter extends Filter with SystemSettingsService with Re
|
|||||||
} finally {
|
} finally {
|
||||||
PluginConnectionHolder.threadLocal.remove()
|
PluginConnectionHolder.threadLocal.remove()
|
||||||
}
|
}
|
||||||
result match {
|
processActionResult(result, request, response, context)
|
||||||
case x: String => renderRepositoryHtml(request, response, context, repository, x)
|
|
||||||
case x: Html => renderGlobalHtml(request, response, context, x.toString)
|
|
||||||
case x: Fragment => renderFragmentHtml(request, response, context, x.html.toString)
|
|
||||||
case x: Redirect => response.sendRedirect(x.path)
|
|
||||||
case x: AnyRef => renderJson(request, response, x)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// TODO NotFound or Error?
|
// TODO NotFound or Error?
|
||||||
}
|
}
|
||||||
@@ -97,6 +85,24 @@ class PluginActionInvokeFilter extends Filter with SystemSettingsService with Re
|
|||||||
} else false
|
} else false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private def processActionResult(result: Any, request: HttpServletRequest, response: HttpServletResponse,
|
||||||
|
context: app.Context): Unit = {
|
||||||
|
result match {
|
||||||
|
case null|None => renderError(request, response, context, 404)
|
||||||
|
case x: String => renderGlobalHtml(request, response, context, x)
|
||||||
|
case Some(x: String) => renderGlobalHtml(request, response, context, x)
|
||||||
|
case x: Html => renderGlobalHtml(request, response, context, x.toString)
|
||||||
|
case Some(x: Html) => renderGlobalHtml(request, response, context, x.toString)
|
||||||
|
case x: Fragment => renderFragmentHtml(request, response, context, x.html.toString)
|
||||||
|
case Some(x: Fragment) => renderFragmentHtml(request, response, context, x.html.toString)
|
||||||
|
case x: RawData => renderRawData(request, response, context, x)
|
||||||
|
case Some(x: RawData) => renderRawData(request, response, context, x)
|
||||||
|
case x: Redirect => response.sendRedirect(x.path)
|
||||||
|
case Some(x: Redirect) => response.sendRedirect(x.path)
|
||||||
|
case x: AnyRef => renderJson(request, response, x)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Authentication for global action
|
* Authentication for global action
|
||||||
*/
|
*/
|
||||||
@@ -145,6 +151,10 @@ class PluginActionInvokeFilter extends Filter with SystemSettingsService with Re
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private def renderError(request: HttpServletRequest, response: HttpServletResponse, context: app.Context, error: Int): Unit = {
|
||||||
|
response.sendError(error)
|
||||||
|
}
|
||||||
|
|
||||||
private def renderGlobalHtml(request: HttpServletRequest, response: HttpServletResponse, context: app.Context, body: String): Unit = {
|
private def renderGlobalHtml(request: HttpServletRequest, response: HttpServletResponse, context: app.Context, body: String): Unit = {
|
||||||
response.setContentType("text/html; charset=UTF-8")
|
response.setContentType("text/html; charset=UTF-8")
|
||||||
val html = _root_.html.main("GitBucket", None)(Html(body))(context)
|
val html = _root_.html.main("GitBucket", None)(Html(body))(context)
|
||||||
@@ -162,6 +172,11 @@ class PluginActionInvokeFilter extends Filter with SystemSettingsService with Re
|
|||||||
IOUtils.write(body.getBytes("UTF-8"), response.getOutputStream)
|
IOUtils.write(body.getBytes("UTF-8"), response.getOutputStream)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private def renderRawData(request: HttpServletRequest, response: HttpServletResponse, context: app.Context, rawData: RawData): Unit = {
|
||||||
|
response.setContentType(rawData.contentType)
|
||||||
|
IOUtils.write(rawData.content, response.getOutputStream)
|
||||||
|
}
|
||||||
|
|
||||||
private def renderJson(request: HttpServletRequest, response: HttpServletResponse, obj: AnyRef): Unit = {
|
private def renderJson(request: HttpServletRequest, response: HttpServletResponse, obj: AnyRef): Unit = {
|
||||||
import org.json4s._
|
import org.json4s._
|
||||||
import org.json4s.jackson.Serialization
|
import org.json4s.jackson.Serialization
|
||||||
|
|||||||
Reference in New Issue
Block a user