Documentation
¶
Overview ¶
Package validator is a set of functions to validate passwords
Index ¶
- func Ratio(pass, attr string) float64
- type ValidateFunc
- func CommonPassword(customError error) ValidateFunc
- func ContainsAtLeast(chars string, occurrences int, customError error) ValidateFunc
- func ContainsOnly(chars string, customError error) ValidateFunc
- func MaxLength(length int, customError error) ValidateFunc
- func MinLength(length int, customError error) ValidateFunc
- func Noop(customError error) ValidateFunc
- func Regex(pattern string, customError error) ValidateFunc
- func Similarity(attributes []string, maxSimilarity *float64, customError error) ValidateFunc
- func StartsWith(letters string, customError error) ValidateFunc
- func Unique(customError error) ValidateFunc
- type Validator
Examples ¶
- CommonPassword
- CommonPassword (CustomError)
- ContainsAtLeast
- ContainsAtLeast (CustomError)
- ContainsOnly
- ContainsOnly (CustomError)
- MaxLength
- MaxLength (CustomError)
- MinLength
- MinLength (CustomError)
- Noop
- Noop (CustomError)
- Regex
- Regex (CustomError)
- Similarity
- Similarity (CustomError)
- StartsWith
- StartsWith (CustomError)
- Unique
- Unique (CustomError)
- Validator.Validate
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type ValidateFunc ¶
ValidateFunc defines a function to validate.
func CommonPassword ¶
func CommonPassword(customError error) ValidateFunc
CommonPassword returns ValidateFunc that validate whether the password is a common password.
The password is rejected if it occurs in one of the provided lists: https://xato.net/passwords/more-top-worst-passwords/ - created by Mark Burnett https://nordpass.com/most-common-passwords-list/ - created by NordPass https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/100k-most-used-passwords-NCSC.txt - created by NCSC
Example ¶
package main import ( "fmt" "github.com/go-passwd/validator" ) func main() { passwordValidator := validator.CommonPassword(nil) fmt.Println(passwordValidator("password")) fmt.Println(passwordValidator("qaz123")) fmt.Println(passwordValidator("pa$$w0rd@")) fmt.Println(passwordValidator("Mod7tygrysow")) }
Output: Password can't be a commonly used password Password can't be a commonly used password <nil> Password can't be a commonly used password
Example (CustomError) ¶
package main import ( "errors" "fmt" "github.com/go-passwd/validator" ) func main() { err := errors.New("custom error message") passwordValidator := validator.CommonPassword(err) fmt.Println(passwordValidator("password")) }
Output: custom error message
func ContainsAtLeast ¶
func ContainsAtLeast(chars string, occurrences int, customError error) ValidateFunc
ContainsAtLeast returns a ValidateFunc that count occurrences of a chars and compares it with required value.
Example ¶
package main import ( "fmt" "github.com/go-passwd/validator" ) func main() { passwordValidator := validator.ContainsAtLeast("abcdefghijklmnopqrstuvwxyz", 4, nil) fmt.Println(passwordValidator("password")) fmt.Println(passwordValidator("PASSWORD")) fmt.Println(passwordValidator("passWORD")) }
Output: <nil> Password must contains at least 4 chars from abcdefghijklmnopqrstuvwxyz <nil>
Example (CustomError) ¶
package main import ( "errors" "fmt" "github.com/go-passwd/validator" ) func main() { err := errors.New("custom error message") passwordValidator := validator.ContainsAtLeast("abcdefghijklmnopqrstuvwxyz", 4, err) fmt.Println(passwordValidator("PASSWORD")) }
Output: custom error message
func ContainsOnly ¶
func ContainsOnly(chars string, customError error) ValidateFunc
ContainsOnly returns a ValidateFunc that check if password contains only selected chars.
Example ¶
package main import ( "fmt" "github.com/go-passwd/validator" ) func main() { passwordValidator := validator.ContainsOnly("abcdefghijklmnopqrstuvwxyz", nil) fmt.Println(passwordValidator("password")) fmt.Println(passwordValidator("password0")) fmt.Println(passwordValidator("passWORD")) }
Output: <nil> the password must contains only abcdefghijklmnopqrstuvwxyz the password must contains only abcdefghijklmnopqrstuvwxyz
Example (CustomError) ¶
package main import ( "errors" "fmt" "github.com/go-passwd/validator" ) func main() { err := errors.New("custom error message") passwordValidator := validator.ContainsOnly("abcdefghijklmnopqrstuvwxyz", err) fmt.Println(passwordValidator("password")) fmt.Println(passwordValidator("password0")) fmt.Println(passwordValidator("passWORD")) }
Output: <nil> custom error message custom error message
func MaxLength ¶
func MaxLength(length int, customError error) ValidateFunc
MaxLength returns a ValidateFunc that check if password length is not greater that "length".
Example ¶
package main import ( "fmt" "github.com/go-passwd/validator" ) func main() { passwordValidator := validator.MaxLength(5, nil) fmt.Println(passwordValidator("password")) fmt.Println(passwordValidator("pass")) fmt.Println(passwordValidator("passw")) }
Output: Password length must be not greater that 5 chars <nil> <nil>
Example (CustomError) ¶
package main import ( "errors" "fmt" "github.com/go-passwd/validator" ) func main() { err := errors.New("custom error message") passwordValidator := validator.MaxLength(5, err) fmt.Println(passwordValidator("password")) }
Output: custom error message
func MinLength ¶
func MinLength(length int, customError error) ValidateFunc
MinLength returns a ValidateFunc that check if password length is not lower that "length".
Example ¶
package main import ( "fmt" "github.com/go-passwd/validator" ) func main() { passwordValidator := validator.MinLength(5, nil) fmt.Println(passwordValidator("password")) fmt.Println(passwordValidator("pass")) fmt.Println(passwordValidator("passw")) }
Output: <nil> Password length must be not lower that 5 chars <nil>
Example (CustomError) ¶
package main import ( "errors" "fmt" "github.com/go-passwd/validator" ) func main() { err := errors.New("custom error message") passwordValidator := validator.MinLength(5, err) fmt.Println(passwordValidator("pass")) }
Output: custom error message
func Noop ¶
func Noop(customError error) ValidateFunc
Noop returns a ValidateFunc that always return custom error.
Example ¶
package main import ( "fmt" "github.com/go-passwd/validator" ) func main() { passwordValidator := validator.Noop(nil) fmt.Println(passwordValidator("password")) }
Output: <nil>
Example (CustomError) ¶
package main import ( "errors" "fmt" "github.com/go-passwd/validator" ) func main() { err := errors.New("custom error message") passwordValidator := validator.Noop(err) fmt.Println(passwordValidator("password")) }
Output: custom error message
func Regex ¶
func Regex(pattern string, customError error) ValidateFunc
Regex returns ValidateFunc that check if password match regexp pattern.
Example ¶
package main import ( "fmt" "github.com/go-passwd/validator" ) func main() { passwordValidator := validator.Regex("^\\w+$", nil) fmt.Println(passwordValidator("password")) fmt.Println(passwordValidator("pa$$w0rd")) }
Output: Password shouldn't match "^\w+$" pattern <nil>
Example (CustomError) ¶
package main import ( "errors" "fmt" "github.com/go-passwd/validator" ) func main() { err := errors.New("custom error message") passwordValidator := validator.Regex("^\\w+$", err) fmt.Println(passwordValidator("password")) }
Output: custom error message
func Similarity ¶
func Similarity(attributes []string, maxSimilarity *float64, customError error) ValidateFunc
Similarity returns ValidateFunc that validate whether the password is sufficiently different from the attributes
Attributes can be: user login, email, first name, last name, ….
Example ¶
package main import ( "fmt" "github.com/go-passwd/validator" ) func main() { passwordValidator := validator.Similarity([]string{"username", "username@example.com"}, nil, nil) fmt.Println(passwordValidator("username")) fmt.Println(passwordValidator("example")) similarity := 0.5 passwordValidator = validator.Similarity([]string{"username", "username@example.com"}, &similarity, nil) fmt.Println(passwordValidator("username")) fmt.Println(passwordValidator("examplecom")) }
Output: The password is too similar to the username <nil> The password is too similar to the username The password is too similar to the username@example.com
Example (CustomError) ¶
package main import ( "errors" "fmt" "github.com/go-passwd/validator" ) func main() { err := errors.New("custom error message") passwordValidator := validator.Similarity([]string{"username", "username@example.com"}, nil, err) fmt.Println(passwordValidator("username")) }
Output: custom error message
func StartsWith ¶
func StartsWith(letters string, customError error) ValidateFunc
StartsWith returns ValidateFunc that validate whether the password is starts with one of letter.
Example ¶
package main import ( "fmt" "github.com/go-passwd/validator" ) func main() { passwordValidator := validator.StartsWith("abc", nil) fmt.Println(passwordValidator("bui87j")) fmt.Println(passwordValidator("qwerty")) }
Output: <nil> the password must starts with one of: abc
Example (CustomError) ¶
package main import ( "errors" "fmt" "github.com/go-passwd/validator" ) func main() { err := errors.New("custom error message") passwordValidator := validator.StartsWith("abc", err) fmt.Println(passwordValidator("bui87j")) fmt.Println(passwordValidator("qwerty")) }
Output: <nil> custom error message
func Unique ¶
func Unique(customError error) ValidateFunc
Unique returns ValidateFunc that validate whether the password has only unique chars.
Example ¶
package main import ( "fmt" "github.com/go-passwd/validator" ) func main() { passwordValidator := validator.Unique(nil) fmt.Println(passwordValidator("bui87j")) fmt.Println(passwordValidator("qwerte")) }
Output: <nil> the password must contains unique chars
Example (CustomError) ¶
package main import ( "errors" "fmt" "github.com/go-passwd/validator" ) func main() { err := errors.New("custom error message") passwordValidator := validator.Unique(err) fmt.Println(passwordValidator("bui87j")) fmt.Println(passwordValidator("qwerte")) }
Output: <nil> custom error message
type Validator ¶
type Validator []ValidateFunc
Validator represents set of password validators.
func (*Validator) Validate ¶
Validate the password.
Example ¶
package main import ( "fmt" "github.com/go-passwd/validator" ) func main() { passwordValidator := validator.Validator{validator.MinLength(5, nil), validator.MaxLength(10, nil)} fmt.Println(passwordValidator.Validate("password")) fmt.Println(passwordValidator.Validate("pass1")) fmt.Println(passwordValidator.Validate("password12")) fmt.Println(passwordValidator.Validate("pass")) fmt.Println(passwordValidator.Validate("password123")) }
Output: <nil> <nil> <nil> Password length must be not lower that 5 chars Password length must be not greater that 10 chars