67 lines
1.9 KiB
Go
67 lines
1.9 KiB
Go
package validator
|
|
|
|
import (
|
|
"RenewCMS/internal/domain/author"
|
|
"RenewCMS/internal/domain/image"
|
|
"RenewCMS/internal/domain/site"
|
|
"reflect"
|
|
"regexp"
|
|
|
|
"github.com/go-playground/validator/v10"
|
|
)
|
|
|
|
const inviteEmailTag = "inviteemail"
|
|
const variantNameTag = "variantname"
|
|
const siteKeyTag = "sitekey"
|
|
const siteNameTag = "sitename"
|
|
const AuthorNameTag = "authorname"
|
|
const AuthorSlugTag = "authorslug"
|
|
const SocialTypeTag = "socialtype"
|
|
|
|
var inviteEmailPattern = regexp.MustCompile(`^[^\s@]+@[^\s@.]+(\.[^\s@.]+)+$`)
|
|
|
|
var Validate *validator.Validate
|
|
|
|
func InitValidator() {
|
|
Validate = validator.New()
|
|
_ = Validate.RegisterValidation(inviteEmailTag, isInviteEmail)
|
|
_ = Validate.RegisterValidation(variantNameTag, isVariantName)
|
|
_ = Validate.RegisterValidation(siteKeyTag, isSiteKey)
|
|
_ = Validate.RegisterValidation(siteNameTag, isSiteName)
|
|
_ = Validate.RegisterValidation(AuthorNameTag, isAuthorName, true)
|
|
_ = Validate.RegisterValidation(AuthorSlugTag, isAuthorSlug, true)
|
|
_ = Validate.RegisterValidation(SocialTypeTag, isSocialType, true)
|
|
}
|
|
|
|
func isAbsent(field validator.FieldLevel) bool {
|
|
return field.Field().Kind() == reflect.Ptr && field.Field().IsNil()
|
|
}
|
|
|
|
func isAuthorName(field validator.FieldLevel) bool {
|
|
return isAbsent(field) || author.IsValidName(field.Field().String())
|
|
}
|
|
|
|
func isSocialType(field validator.FieldLevel) bool {
|
|
return author.IsValidSocialType(field.Field().String())
|
|
}
|
|
|
|
func isAuthorSlug(field validator.FieldLevel) bool {
|
|
return isAbsent(field) || author.IsValidSlug(field.Field().String())
|
|
}
|
|
|
|
func isSiteKey(field validator.FieldLevel) bool {
|
|
return site.IsValidKey(field.Field().String())
|
|
}
|
|
|
|
func isSiteName(field validator.FieldLevel) bool {
|
|
return site.IsValidName(field.Field().String())
|
|
}
|
|
|
|
func isVariantName(field validator.FieldLevel) bool {
|
|
return image.IsValidVariantName(field.Field().String())
|
|
}
|
|
|
|
func isInviteEmail(field validator.FieldLevel) bool {
|
|
return inviteEmailPattern.MatchString(field.Field().String())
|
|
}
|