diff --git a/src/main/scala/gitbucket/core/controller/ControllerBase.scala b/src/main/scala/gitbucket/core/controller/ControllerBase.scala index 60e7893..41b45cd 100644 --- a/src/main/scala/gitbucket/core/controller/ControllerBase.scala +++ b/src/main/scala/gitbucket/core/controller/ControllerBase.scala @@ -26,6 +26,7 @@ import org.eclipse.jgit.revwalk.RevCommit import org.eclipse.jgit.treewalk._ import org.apache.commons.io.IOUtils +import org.slf4j.LoggerFactory /** * Provides generic features for controller implementations. @@ -34,6 +35,8 @@ with ClientSideValidationFormSupport with JacksonJsonSupport with I18nSupport with FlashMapSupport with Validations with SystemSettingsService { + private val logger = LoggerFactory.getLogger(getClass) + implicit val jsonFormats = gitbucket.core.api.JsonFormat.jsonFormats before("/api/v3/*") { @@ -147,6 +150,20 @@ } } + error{ + case e => { + logger.error(s"Catch unhandled error in request: ${request}", e) + if(request.hasAttribute(Keys.Request.Ajax)){ + org.scalatra.InternalServerError() + } else if(request.hasAttribute(Keys.Request.APIv3)){ + contentType = formats("json") + org.scalatra.InternalServerError(ApiError("Internal Server Error")) + } else { + org.scalatra.InternalServerError(gitbucket.core.html.error("Internal Server Error", Some(e))) + } + } + } + override def url(path: String, params: Iterable[(String, Any)] = Iterable.empty, includeContextPath: Boolean = true, includeServletPath: Boolean = true, absolutize: Boolean = true, withSessionId: Boolean = true) diff --git a/src/main/twirl/gitbucket/core/error.scala.html b/src/main/twirl/gitbucket/core/error.scala.html index 3c987d8..211073c 100644 --- a/src/main/twirl/gitbucket/core/error.scala.html +++ b/src/main/twirl/gitbucket/core/error.scala.html @@ -1,8 +1,18 @@ -@(title: String)(implicit context: gitbucket.core.controller.Context) +@(title: String, e: Option[Throwable]=None)(implicit context: gitbucket.core.controller.Context) @gitbucket.core.html.main("Error"){
@st |