mirror of
https://github.com/hazemKrimi/crimson-vault.git
synced 2026-05-01 18:20:27 +00:00
39 lines
874 B
Go
39 lines
874 B
Go
package api
|
|
|
|
import (
|
|
"net/http"
|
|
"regexp"
|
|
|
|
"github.com/go-playground/validator/v10"
|
|
"github.com/labstack/echo/v4"
|
|
)
|
|
|
|
type CustomValidator struct {
|
|
validator *validator.Validate
|
|
}
|
|
|
|
func (validator *CustomValidator) Validate(i any) error {
|
|
if err := validator.validator.Struct(i); err != nil {
|
|
return echo.NewHTTPError(http.StatusBadRequest, err.Error())
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func PasswordValidator(fieldLevel validator.FieldLevel) bool {
|
|
password := fieldLevel.Field().String()
|
|
|
|
var (
|
|
upper = regexp.MustCompile(`[A-Z]`)
|
|
lower = regexp.MustCompile(`[a-z]`)
|
|
number = regexp.MustCompile(`[0-9]`)
|
|
special = regexp.MustCompile(`[!@#~$%^&*()+|_{}:<>?,./;'\[\]\\-]`)
|
|
minChars = 8
|
|
)
|
|
|
|
return len(password) >= minChars &&
|
|
upper.MatchString(password) &&
|
|
lower.MatchString(password) &&
|
|
number.MatchString(password) &&
|
|
special.MatchString(password)
|
|
}
|