aboutsummaryrefslogtreecommitdiff
path: root/go-src/dataValidations.go
blob: b391eb3d81a43896062827b0b4a4af50da6fd9f3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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, ' ', '\'', '-')
}