67 lines
2.2 KiB
Go
67 lines
2.2 KiB
Go
package validation
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"bitbucket.org/nemt/nemt-portal-api/application/viewmodel"
|
|
"bitbucket.org/nemt/nemt-portal-api/infra/errors"
|
|
)
|
|
|
|
func characterIsUpperCase(character rune) bool {
|
|
return (character >= 65) && (character <= 90)
|
|
}
|
|
|
|
func characterIsLowerCase(character rune) bool {
|
|
return (character >= 97) && (character <= 122)
|
|
}
|
|
|
|
func characterIsNumber(character rune) bool {
|
|
return (character >= 48) && (character <= 57)
|
|
}
|
|
|
|
func ValidatePassword(user *viewmodel.User) []errors.ValidationError {
|
|
var result []errors.ValidationError
|
|
|
|
userOrganizationName := ""
|
|
if len(user.Organizations) > 0 {
|
|
userOrganizationName = user.Organizations[0].Name
|
|
}
|
|
|
|
if len(user.Pass) < 8 {
|
|
result = append(result, errors.ValidationError{Field: "password", Message: "Password must be at least 8 characters."})
|
|
}
|
|
|
|
if strings.Contains(user.Pass, user.First) {
|
|
result = append(result, errors.ValidationError{Field: "password", Message: "Password cannot include your First Name."})
|
|
}
|
|
|
|
if strings.Contains(user.Pass, user.Last) {
|
|
result = append(result, errors.ValidationError{Field: "password", Message: "Password cannot include your Last Name."})
|
|
}
|
|
|
|
if len(userOrganizationName) > 0 {
|
|
if strings.Contains(user.Pass, userOrganizationName) {
|
|
result = append(result, errors.ValidationError{Field: "password", Message: "Password cannot include your Organization Name."})
|
|
}
|
|
}
|
|
|
|
containsUpperCaseLetter := false
|
|
containsLowerCaseLetter := false
|
|
containsNumber := false
|
|
|
|
for _, character := range user.Pass {
|
|
containsUpperCaseLetter = containsUpperCaseLetter || characterIsUpperCase(character)
|
|
containsLowerCaseLetter = containsLowerCaseLetter || characterIsLowerCase(character)
|
|
containsNumber = containsNumber || characterIsNumber(character)
|
|
}
|
|
|
|
if !containsUpperCaseLetter || !containsLowerCaseLetter || !containsNumber {
|
|
result = append(result, errors.ValidationError{Field: "password", Message: "Password must contain one of EACH :"})
|
|
result = append(result, errors.ValidationError{Field: "password-tab", Message: "an uppercase letter"})
|
|
result = append(result, errors.ValidationError{Field: "password-tab", Message: "a lowercase letter"})
|
|
result = append(result, errors.ValidationError{Field: "password-tab", Message: "a number"})
|
|
}
|
|
|
|
return result
|
|
}
|