diff options
Diffstat (limited to 'go-src/dataValidations.go')
| -rw-r--r-- | go-src/dataValidations.go | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/go-src/dataValidations.go b/go-src/dataValidations.go new file mode 100644 index 0000000..b391eb3 --- /dev/null +++ b/go-src/dataValidations.go @@ -0,0 +1,55 @@ +package ctfc + +import ( + "regexp" +) + +var SpecialCharacters = []rune{'!', '@', '#', '$', '%', '^', '&', '*'} + +// Inclusive minimum and maximum +func stringValidLength(min int, max int, value string) bool { + return len(value) >= min && len(value) <= max +} + +func stringValidCharacters(value string, letters bool, numbers bool, special ...rune) bool { + expr := "^[" + if letters { + expr += "A-z" + } + if numbers { + expr += "0-9" + } + for _, v := range special { + expr += string(v) + } + expr += "]+$" + + return regexp.MustCompile(expr).MatchString(value) +} + +func stringValidRuneAmount(value string, runeStart rune, runeEnd rune, minAmount int) bool { + var sum int + for _, v := range value { + if v >= runeStart && v <= runeEnd { + sum++ + } + } + return sum >= minAmount +} + +func stringValidUsername(value string) bool { + return stringValidLength(2, 40, value) && + stringValidCharacters(value, true, true, '.', '*', '_', '-') && + (stringValidRuneAmount(value, 'A', 'Z', 1) || stringValidRuneAmount(value, 'a', 'z', 1)) +} + +func stringValidPassword(value string) bool { + return stringValidLength(5, 40, value) && + stringValidCharacters(value, true, true, SpecialCharacters...) && + stringValidRuneAmount(value, '0', '9', 1) +} + +func stringValidName(value string) bool { + return stringValidLength(2, 60, value) && + stringValidCharacters(value, true, false, ' ', '\'', '-') +} |
