user-base/utils/token.go

81 lines
1.7 KiB
Go

package utils
import (
"errors"
"fmt"
"reflect"
"strings"
"github.com/gin-gonic/gin"
"github.com/go-playground/locales/zh"
ut "github.com/go-playground/universal-translator"
"github.com/go-playground/validator/v10"
zhtrans "github.com/go-playground/validator/v10/translations/zh"
"github.com/google/uuid"
)
// 生成用户token
func NewUserToken() string {
id := uuid.Must(uuid.NewRandom()).String()
return strings.ReplaceAll(id, "-", "")
}
// NewRequestID 新请求ID生成
func NewRequestID(c *gin.Context) string {
if c == nil {
return uuid.Must(uuid.NewRandom()).String()
}
reqid := c.Request.Header.Get("requestid")
if reqid == "" {
reqid = uuid.Must(uuid.NewRandom()).String()
}
return reqid
}
// 新项目ID生成
func NewProjectID() string {
id := strings.ReplaceAll(uuid.Must(uuid.NewRandom()).String(), "-", "")
return id[6:]
}
func NewUserID() string {
id := strings.ReplaceAll(uuid.Must(uuid.NewRandom()).String(), "-", "")
return id[4:]
}
// NewGroupID 新组ID
func NewGroupID() string {
id := strings.ReplaceAll(uuid.Must(uuid.NewRandom()).String(), "-", "")
return id[2:]
}
func init() {
validate = validator.New()
}
var validate *validator.Validate
func ValidateError(req interface{}) error {
zh := zh.New()
uni := ut.New(zh)
trans, _ := uni.GetTranslator("zh")
validate.RegisterTagNameFunc(func(field reflect.StructField) string {
return field.Tag.Get("label")
})
e := zhtrans.RegisterDefaultTranslations(validate, trans)
if e != nil {
return errors.New("翻译器注册失败")
}
err := validate.Struct(req)
if err != nil {
for _, err := range err.(validator.ValidationErrors) {
return fmt.Errorf(err.Translate(trans))
}
}
return nil
}