summaryrefslogtreecommitdiff
path: root/vendor/github.com/wagslane/go-password-validator/base.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/wagslane/go-password-validator/base.go')
-rw-r--r--vendor/github.com/wagslane/go-password-validator/base.go75
1 files changed, 75 insertions, 0 deletions
diff --git a/vendor/github.com/wagslane/go-password-validator/base.go b/vendor/github.com/wagslane/go-password-validator/base.go
new file mode 100644
index 000000000..0e0cedca2
--- /dev/null
+++ b/vendor/github.com/wagslane/go-password-validator/base.go
@@ -0,0 +1,75 @@
+package passwordvalidator
+
+import "strings"
+
+const (
+ replaceChars = `!@$&*`
+ sepChars = `_-., `
+ otherSpecialChars = `"#%'()+/:;<=>?[\]^{|}~`
+ lowerChars = `abcdefghijklmnopqrstuvwxyz`
+ upperChars = `ABCDEFGHIJKLMNOPQRSTUVWXYZ`
+ digitsChars = `0123456789`
+)
+
+func getBase(password string) int {
+ chars := map[rune]struct{}{}
+ for _, c := range password {
+ chars[c] = struct{}{}
+ }
+
+ hasReplace := false
+ hasSep := false
+ hasOtherSpecial := false
+ hasLower := false
+ hasUpper := false
+ hasDigits := false
+ base := 0
+
+ for c := range chars {
+ if strings.ContainsRune(replaceChars, c) {
+ hasReplace = true
+ continue
+ }
+ if strings.ContainsRune(sepChars, c) {
+ hasSep = true
+ continue
+ }
+ if strings.ContainsRune(otherSpecialChars, c) {
+ hasOtherSpecial = true
+ continue
+ }
+ if strings.ContainsRune(lowerChars, c) {
+ hasLower = true
+ continue
+ }
+ if strings.ContainsRune(upperChars, c) {
+ hasUpper = true
+ continue
+ }
+ if strings.ContainsRune(digitsChars, c) {
+ hasDigits = true
+ continue
+ }
+ base++
+ }
+
+ if hasReplace {
+ base += len(replaceChars)
+ }
+ if hasSep {
+ base += len(sepChars)
+ }
+ if hasOtherSpecial {
+ base += len(otherSpecialChars)
+ }
+ if hasLower {
+ base += len(lowerChars)
+ }
+ if hasUpper {
+ base += len(upperChars)
+ }
+ if hasDigits {
+ base += len(digitsChars)
+ }
+ return base
+}