Initial
This commit is contained in:
commit
97dc0a3570
78 files changed
+7054
No files matched your search
@@ -0,0 +1,71 @@
|
||||
package user
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"image"
|
||||
_ "image/jpeg"
|
||||
_ "image/png"
|
||||
"log/slog"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Validator struct {
|
||||
emailRegex *regexp.Regexp
|
||||
loginRegex *regexp.Regexp
|
||||
}
|
||||
|
||||
func NewValidator() (*Validator, error) {
|
||||
emailRegexp := regexp.MustCompile(`^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`)
|
||||
loginRegex := regexp.MustCompile(`^[a-zA-Z0-9_-]+$`)
|
||||
|
||||
return &Validator{emailRegex: emailRegexp, loginRegex: loginRegex}, nil
|
||||
}
|
||||
|
||||
func (v *Validator) VerifyEmail(email string) bool {
|
||||
if len(email) < 3 || len(email) > 254 {
|
||||
return false
|
||||
}
|
||||
|
||||
return v.emailRegex.MatchString(email)
|
||||
}
|
||||
|
||||
func (v *Validator) VerifyLogin(login string) bool {
|
||||
username := strings.TrimSpace(login)
|
||||
if len(username) < 3 || len(username) > 30 {
|
||||
return false
|
||||
}
|
||||
if !v.loginRegex.MatchString(username) {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func (v *Validator) VerifyPassword(password string) bool {
|
||||
if len(password) < 8 || len(password) > 72 {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func (v *Validator) VerifyImage(data []byte) error {
|
||||
r := bytes.NewReader(data)
|
||||
cfg, format, err := image.DecodeConfig(r)
|
||||
if err != nil {
|
||||
slog.Error("decode image config", slog.String("op", "validator.VerifyImage"), slog.Any("error", err))
|
||||
return err
|
||||
}
|
||||
|
||||
switch format {
|
||||
case "jpeg", "png":
|
||||
default:
|
||||
return ErrUnsupportedFormat
|
||||
}
|
||||
|
||||
if cfg.Width > MaxImageWidth || cfg.Height > MaxImageHeight {
|
||||
return ErrExceedDimensions
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in new issue
Block a user