You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.6 KiB
70 lines
1.6 KiB
package controllers
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
model "github.com/cloudreve/Cloudreve/v3/models"
|
|
"github.com/cloudreve/Cloudreve/v3/pkg/serializer"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/go-playground/validator/v10"
|
|
)
|
|
|
|
// ParamErrorMsg 根据Validator返回的错误信息给出错误提示
|
|
func ParamErrorMsg(filed string, tag string) string {
|
|
// 未通过验证的表单域与中文对应
|
|
fieldMap := map[string]string{
|
|
"UserName": "Email",
|
|
"Password": "Password",
|
|
"Path": "Path",
|
|
"SourceID": "Source resource",
|
|
"URL": "URL",
|
|
"Nick": "Nickname",
|
|
}
|
|
// 未通过的规则与中文对应
|
|
tagMap := map[string]string{
|
|
"required": "cannot be empty",
|
|
"min": "too short",
|
|
"max": "too long",
|
|
"email": "format error",
|
|
}
|
|
fieldVal, findField := fieldMap[filed]
|
|
if !findField {
|
|
fieldVal = filed
|
|
}
|
|
tagVal, findTag := tagMap[tag]
|
|
if findTag {
|
|
// 返回拼接出来的错误信息
|
|
return fieldVal + " " + tagVal
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// ErrorResponse 返回错误消息
|
|
func ErrorResponse(err error) serializer.Response {
|
|
// 处理 Validator 产生的错误
|
|
if ve, ok := err.(validator.ValidationErrors); ok {
|
|
for _, e := range ve {
|
|
return serializer.ParamErr(
|
|
ParamErrorMsg(e.Field(), e.Tag()),
|
|
err,
|
|
)
|
|
}
|
|
}
|
|
|
|
if _, ok := err.(*json.UnmarshalTypeError); ok {
|
|
return serializer.ParamErr("JSON marshall error", err)
|
|
}
|
|
|
|
return serializer.ParamErr("Parameter error", err)
|
|
}
|
|
|
|
// CurrentUser 获取当前用户
|
|
func CurrentUser(c *gin.Context) *model.User {
|
|
if user, _ := c.Get("user"); user != nil {
|
|
if u, ok := user.(*model.User); ok {
|
|
return u
|
|
}
|
|
}
|
|
return nil
|
|
}
|