mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-30 22:02:25 -05:00 
			
		
		
		
	* start fixing up tests * fix up tests + automate with drone * fiddle with linting * messing about with drone.yml * some more fiddling * hmmm * add cache * add vendor directory * verbose * ci updates * update some little things * update sig
		
			
				
	
	
		
			75 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 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
 | |
| }
 |