veza/veza-backend-api/internal/utils/password_validator.go
2025-12-03 20:29:37 +01:00

48 lines
1.2 KiB
Go

package utils
import (
"fmt"
"unicode"
)
// ValidatePasswordStrength validates password strength according to security rules
// T0197: Validates password with minimum 8 characters, uppercase, lowercase, number, and special character
func ValidatePasswordStrength(password string) error {
if len(password) < 8 {
return fmt.Errorf("password must be at least 8 characters")
}
if len(password) > 128 {
return fmt.Errorf("password must be less than 128 characters")
}
var hasUpper, hasLower, hasNumber, hasSpecial bool
for _, char := range password {
switch {
case unicode.IsUpper(char):
hasUpper = true
case unicode.IsLower(char):
hasLower = true
case unicode.IsNumber(char):
hasNumber = true
case unicode.IsPunct(char) || unicode.IsSymbol(char):
hasSpecial = true
}
}
if !hasUpper {
return fmt.Errorf("password must contain at least one uppercase letter")
}
if !hasLower {
return fmt.Errorf("password must contain at least one lowercase letter")
}
if !hasNumber {
return fmt.Errorf("password must contain at least one number")
}
if !hasSpecial {
return fmt.Errorf("password must contain at least one special character")
}
return nil
}