github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/routers/controllers/main.go (about)

     1  package controllers
     2  
     3  import (
     4  	"encoding/json"
     5  
     6  	model "github.com/cloudreve/Cloudreve/v3/models"
     7  	"github.com/cloudreve/Cloudreve/v3/pkg/serializer"
     8  	"github.com/gin-gonic/gin"
     9  	"github.com/go-playground/validator/v10"
    10  )
    11  
    12  // ParamErrorMsg 根据Validator返回的错误信息给出错误提示
    13  func ParamErrorMsg(filed string, tag string) string {
    14  	// 未通过验证的表单域与中文对应
    15  	fieldMap := map[string]string{
    16  		"UserName": "Email",
    17  		"Password": "Password",
    18  		"Path":     "Path",
    19  		"SourceID": "Source resource",
    20  		"URL":      "URL",
    21  		"Nick":     "Nickname",
    22  	}
    23  	// 未通过的规则与中文对应
    24  	tagMap := map[string]string{
    25  		"required": "cannot be empty",
    26  		"min":      "too short",
    27  		"max":      "too long",
    28  		"email":    "format error",
    29  	}
    30  	fieldVal, findField := fieldMap[filed]
    31  	if !findField {
    32  		fieldVal = filed
    33  	}
    34  	tagVal, findTag := tagMap[tag]
    35  	if findTag {
    36  		// 返回拼接出来的错误信息
    37  		return fieldVal + " " + tagVal
    38  	}
    39  	return ""
    40  }
    41  
    42  // ErrorResponse 返回错误消息
    43  func ErrorResponse(err error) serializer.Response {
    44  	// 处理 Validator 产生的错误
    45  	if ve, ok := err.(validator.ValidationErrors); ok {
    46  		for _, e := range ve {
    47  			return serializer.ParamErr(
    48  				ParamErrorMsg(e.Field(), e.Tag()),
    49  				err,
    50  			)
    51  		}
    52  	}
    53  
    54  	if _, ok := err.(*json.UnmarshalTypeError); ok {
    55  		return serializer.ParamErr("JSON marshall error", err)
    56  	}
    57  
    58  	return serializer.ParamErr("Parameter error", err)
    59  }
    60  
    61  // CurrentUser 获取当前用户
    62  func CurrentUser(c *gin.Context) *model.User {
    63  	if user, _ := c.Get("user"); user != nil {
    64  		if u, ok := user.(*model.User); ok {
    65  			return u
    66  		}
    67  	}
    68  	return nil
    69  }