01da5bdec7
Signed-off-by: Michael Mayer <michael@photoprism.app>
105 lines
2.8 KiB
Go
105 lines
2.8 KiB
Go
package api
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"github.com/photoprism/photoprism/internal/config"
|
|
"github.com/photoprism/photoprism/internal/get"
|
|
"github.com/photoprism/photoprism/internal/i18n"
|
|
"github.com/photoprism/photoprism/pkg/clean"
|
|
)
|
|
|
|
func Abort(c *gin.Context, code int, id i18n.Message, params ...interface{}) {
|
|
resp := i18n.NewResponse(code, id, params...)
|
|
|
|
log.Debugf("api-v1: abort %s with code %d (%s)", clean.Log(c.FullPath()), code, strings.ToLower(resp.String()))
|
|
|
|
c.AbortWithStatusJSON(code, resp)
|
|
}
|
|
|
|
func Error(c *gin.Context, code int, err error, id i18n.Message, params ...interface{}) {
|
|
resp := i18n.NewResponse(code, id, params...)
|
|
|
|
if err != nil {
|
|
resp.Details = err.Error()
|
|
log.Errorf("api-v1: error %s with code %d in %s (%s)", clean.Error(err), code, clean.Log(c.FullPath()), strings.ToLower(resp.String()))
|
|
}
|
|
|
|
c.AbortWithStatusJSON(code, resp)
|
|
}
|
|
|
|
// AbortNotFound renders a "404 Not Found" error page or JSON response.
|
|
var AbortNotFound = func(c *gin.Context) {
|
|
conf := get.Config()
|
|
|
|
switch c.NegotiateFormat(gin.MIMEHTML, gin.MIMEJSON) {
|
|
case gin.MIMEJSON:
|
|
c.JSON(http.StatusNotFound, gin.H{"error": i18n.Msg(i18n.ErrNotFound)})
|
|
default:
|
|
var redirect string
|
|
|
|
// Redirect to site root if current path is different.
|
|
if root, path := conf.BaseUri("/"), c.Request.URL.Path; path != "" && path != root {
|
|
redirect = root
|
|
}
|
|
|
|
values := gin.H{
|
|
"signUp": config.SignUp,
|
|
"config": conf.ClientPublic(),
|
|
"error": i18n.Msg(i18n.ErrNotFound),
|
|
"code": http.StatusNotFound,
|
|
"redirect": redirect,
|
|
}
|
|
|
|
c.HTML(http.StatusNotFound, "404.gohtml", values)
|
|
}
|
|
|
|
c.Abort()
|
|
}
|
|
|
|
// AbortUnauthorized aborts with status code 401.
|
|
func AbortUnauthorized(c *gin.Context) {
|
|
Abort(c, http.StatusUnauthorized, i18n.ErrUnauthorized)
|
|
}
|
|
|
|
// AbortForbidden aborts with status code 403.
|
|
func AbortForbidden(c *gin.Context) {
|
|
Abort(c, http.StatusForbidden, i18n.ErrForbidden)
|
|
}
|
|
|
|
// AbortEntityNotFound aborts with status code 404.
|
|
func AbortEntityNotFound(c *gin.Context) {
|
|
Abort(c, http.StatusNotFound, i18n.ErrEntityNotFound)
|
|
}
|
|
|
|
// AbortAlbumNotFound aborts with status code 404.
|
|
func AbortAlbumNotFound(c *gin.Context) {
|
|
Abort(c, http.StatusNotFound, i18n.ErrAlbumNotFound)
|
|
}
|
|
|
|
func AbortSaveFailed(c *gin.Context) {
|
|
Abort(c, http.StatusInternalServerError, i18n.ErrSaveFailed)
|
|
}
|
|
|
|
func AbortDeleteFailed(c *gin.Context) {
|
|
Abort(c, http.StatusInternalServerError, i18n.ErrDeleteFailed)
|
|
}
|
|
|
|
func AbortUnexpectedError(c *gin.Context) {
|
|
Abort(c, http.StatusInternalServerError, i18n.ErrUnexpected)
|
|
}
|
|
|
|
func AbortBadRequest(c *gin.Context) {
|
|
Abort(c, http.StatusBadRequest, i18n.ErrBadRequest)
|
|
}
|
|
|
|
func AbortFeatureDisabled(c *gin.Context) {
|
|
Abort(c, http.StatusForbidden, i18n.ErrFeatureDisabled)
|
|
}
|
|
|
|
func AbortBusy(c *gin.Context) {
|
|
Abort(c, http.StatusTooManyRequests, i18n.ErrBusy)
|
|
}
|