feat: finished create task
This commit is contained in:
@@ -2,17 +2,69 @@ package password
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Check checks if password is valid, and returns message, and if its a strong password
|
||||
func Check(input string, wordList, passwordList []string) (string, error) {
|
||||
// Variables to check state of password
|
||||
hasCapitalLetter := false
|
||||
hasSpecialCharacter := false
|
||||
isTwelveCharacters := false
|
||||
hasNumber := false
|
||||
|
||||
// Check if password is shorter than 8 characters
|
||||
if len(input) < 8 {
|
||||
return "Weak password", fmt.Errorf("password cannot be shorter than 8 characters")
|
||||
if len(input) < 2 {
|
||||
return "Weak password", fmt.Errorf("password cannot be shorter than 12 characters")
|
||||
} else {
|
||||
isTwelveCharacters = true
|
||||
}
|
||||
|
||||
// Check if password contains a number and a special character
|
||||
// Check if password contains a number and a special character and a capital letter
|
||||
for _, letter := range input {
|
||||
// Check ASCII code to see if has special character
|
||||
if letter >= 33 && letter <= 47 || letter >= 58 && letter <= 62 {
|
||||
hasSpecialCharacter = true
|
||||
}
|
||||
|
||||
// Check ASCII code to see if password contains a number
|
||||
if letter >= 48 && letter <= 57 {
|
||||
hasNumber = true
|
||||
}
|
||||
|
||||
// Check ASCII code to see if password contains a capital letter
|
||||
if letter >= 65 && letter <= 90 {
|
||||
hasCapitalLetter = true
|
||||
}
|
||||
|
||||
// Check ASCII code to see if there is a space
|
||||
if letter == 32 {
|
||||
return "Weak password", fmt.Errorf("password cannot contain a space")
|
||||
}
|
||||
}
|
||||
|
||||
// Check if password is in common passwords
|
||||
for _, entry := range passwordList {
|
||||
if strings.Contains(entry, input) {
|
||||
return "Weak password", fmt.Errorf("password found inside common passwords")
|
||||
}
|
||||
}
|
||||
|
||||
// Check if password contains any common words
|
||||
re, _ := regexp.Compile(`[^a-zA-Z]+`) // Use regex to match anything thats not a letter
|
||||
// Replace all nonletter characters with blank space
|
||||
strippedPassword := re.ReplaceAllString(input, "")
|
||||
// Iterate through common words and see if input contains any
|
||||
for _, word := range wordList {
|
||||
if strings.Contains(word, strippedPassword) {
|
||||
return "Weak password", fmt.Errorf("password contains common word from wordlist")
|
||||
}
|
||||
}
|
||||
|
||||
if !(hasNumber && hasSpecialCharacter && isTwelveCharacters && hasCapitalLetter) {
|
||||
return "Weak password", nil
|
||||
}
|
||||
|
||||
return "Strong password", nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user