aboutsummaryrefslogtreecommitdiff
path: root/go-src/dataValidations.go
blob: 5c44e47b35dc1f708672164c09a5b7af002ec4c9 (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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package ctfc

import (
	"os"
	"regexp"

	"gitlab.com/Syndamia/ctfc/go-src/folderPaths"
)

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 atLeastOneLetter(value string) bool {
	return stringValidRuneAmount(value, 'A', 'Z', 1) || stringValidRuneAmount(value, 'a', 'z', 1)
}

// Between 2 and 40 characters (A-z, 0-9, ., *, _, -, at least one letter)
func stringValidUsername(value string) bool {
	return stringValidLength(2, 40, value) &&
		stringValidCharacters(value, true, true, '.', '*', '_', '-') &&
		atLeastOneLetter(value)
}

// Between 5 and 40 characters (any character, but at least one number)
func stringValidPassword(value string) bool {
	return stringValidLength(5, 40, value) &&
		stringValidCharacters(value, true, true, SpecialCharacters...) &&
		stringValidRuneAmount(value, '0', '9', 1)
}

// Between 2 and 60 characters (A-z, spaces, ', -)
func stringValidName(value string) bool {
	return stringValidLength(2, 60, value) &&
		stringValidCharacters(value, true, false, ' ', '\'', '-')
}

// Between 2 and 20 characters (A-z, 0-9, spaces, \_, -, at least one letter)
func stringValidChatName(value string) bool {
	return stringValidLength(2, 20, value) &&
		stringValidCharacters(value, true, true, ' ', '_', '-') &&
		atLeastOneLetter(value)
}

// Between 0 and 30 characters (any character)
func stringValidChatDesc(value string) bool {
	return stringValidLength(0, 30, value)
}

func usernameExists(username string) bool {
	_, err := os.Stat(folderPaths.FileAtUsersFolder(username))
	return err == nil
}

func chatNameExists(name string) bool {
	_, err := os.Stat(folderPaths.FileAtChatsFolder(name))
	return err == nil
}