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 (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 }