]> source.dussan.org Git - gitea.git/commitdiff
Return json on 500 error from API (#11574) (#11660)
author6543 <6543@obermui.de>
Thu, 28 May 2020 18:27:29 +0000 (20:27 +0200)
committerGitHub <noreply@github.com>
Thu, 28 May 2020 18:27:29 +0000 (19:27 +0100)
Backport #11574

add API specific InternalServerError()

InternalServerError

modules/context/api.go

index 4e189ce07767b227f9d5fcf386c4d1d32405666b..963c5c14f30c32a9c081f49e65e5d4bc5e84bd14 100644 (file)
@@ -7,6 +7,7 @@ package context
 
 import (
        "fmt"
+       "net/http"
        "net/url"
        "strings"
 
@@ -64,18 +65,18 @@ type APINotFound struct{}
 // swagger:response redirect
 type APIRedirect struct{}
 
-// Error responses error message to client with given message.
+// Error responds with an error message to client with given obj as the message.
 // If status is 500, also it prints error to log.
 func (ctx *APIContext) Error(status int, title string, obj interface{}) {
        var message string
        if err, ok := obj.(error); ok {
                message = err.Error()
        } else {
-               message = obj.(string)
+               message = fmt.Sprintf("%s", obj)
        }
 
-       if status == 500 {
-               log.Error("%s: %s", title, message)
+       if status == http.StatusInternalServerError {
+               log.ErrorWithSkip(1, "%s: %s", title, message)
        }
 
        ctx.JSON(status, APIError{
@@ -84,6 +85,22 @@ func (ctx *APIContext) Error(status int, title string, obj interface{}) {
        })
 }
 
+// InternalServerError responds with an error message to the client with the error as a message
+// and the file and line of the caller.
+func (ctx *APIContext) InternalServerError(err error) {
+       log.ErrorWithSkip(1, "InternalServerError: %v", err)
+
+       var message string
+       if macaron.Env != macaron.PROD {
+               message = err.Error()
+       }
+
+       ctx.JSON(http.StatusInternalServerError, APIError{
+               Message: message,
+               URL:     setting.API.SwaggerURL,
+       })
+}
+
 func genAPILinks(curURL *url.URL, total, pageSize, curPage int) []string {
        page := NewPagination(total, pageSize, curPage, 0)
        paginater := page.Paginater