aboutsummaryrefslogtreecommitdiff
path: root/go-src
diff options
context:
space:
mode:
Diffstat (limited to 'go-src')
-rw-r--r--go-src/windows/dataValidations.go55
-rw-r--r--go-src/windows/errorMessages.go4
-rw-r--r--go-src/windows/windows.go45
3 files changed, 86 insertions, 18 deletions
diff --git a/go-src/windows/dataValidations.go b/go-src/windows/dataValidations.go
new file mode 100644
index 0000000..3df61c1
--- /dev/null
+++ b/go-src/windows/dataValidations.go
@@ -0,0 +1,55 @@
+package windows
+
+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, ' ', '\'', '-')
+}
diff --git a/go-src/windows/errorMessages.go b/go-src/windows/errorMessages.go
index 2dc364a..cd18fc7 100644
--- a/go-src/windows/errorMessages.go
+++ b/go-src/windows/errorMessages.go
@@ -4,3 +4,7 @@ const (
invalidArgument = "Invalid argument!"
invalidCommand = "Invalid command!"
)
+
+func invalidValueFor(typeName string) string {
+ return "Invalid value for " + typeName + "!"
+}
diff --git a/go-src/windows/windows.go b/go-src/windows/windows.go
index 5076053..5db54d1 100644
--- a/go-src/windows/windows.go
+++ b/go-src/windows/windows.go
@@ -10,7 +10,7 @@ import (
"gitlab.com/Syndamia/ctfc/go-src/ui"
)
-func StartupWindow() {
+func StartupWindow(...string) {
clearScreen()
fmt.Println(ui.NormalBox(true, "Login", "Register"))
@@ -22,8 +22,7 @@ func StartupWindow() {
} else if command == "r" {
defer RegisterWindow()
} else {
- ShowError(invalidCommand)
- defer StartupWindow()
+ defer ShowError(invalidCommand, StartupWindow)
}
}
@@ -42,11 +41,10 @@ func LoginWindow(values ...string) {
val := ui.GetInput()
- switch len(values) {
- case 0:
+ if len(values) == 0 {
defer LoginWindow(val)
- case 1:
- fmt.Println(values[0], val)
+ } else {
+ defer fmt.Println(values[0], val)
}
}
@@ -55,37 +53,48 @@ func RegisterWindow(values ...string) {
fmt.Println(ui.NormalBox(true, "Register"))
+ var validationF func(string) bool
+ var fieldName, specification string
+
switch len(values) {
case 0:
- fmt.Print(ui.InputField("Username"))
+ validationF = StringValidUsername
+ fieldName, specification = "Username", "[A-z, 0-9, *, ., _, -; at least 1 letter]"
case 1:
fmt.Println(ui.InputFieldFilled("Username", values[0]))
- fmt.Print(ui.InputField("Password"))
+ validationF = StringValidPassword
+ fieldName, specification = "Password", "[5-40 characters; at least 1 number]"
case 2:
fmt.Println(ui.InputFieldFilled("Username", values[0]))
fmt.Println(ui.InputFieldFilled("Password", values[1]))
- fmt.Print(ui.InputField("Name"))
+ validationF = StringValidName
+ fieldName, specification = "Name", "[2-60 characters]"
}
+ fmt.Print(ui.InputField(fieldName + " " + specification))
val := ui.GetInput()
- switch len(values) {
- case 0:
- defer RegisterWindow(val)
- case 1:
- defer RegisterWindow(values[0], val)
- case 2:
- fmt.Println(values, val)
+ if validationF(val) {
+ values = append(values, val)
+ if len(values) != 3 {
+ defer RegisterWindow(values...)
+ } else { // When user has entered all required values
+ defer fmt.Println(values)
+ }
+ } else {
+ defer ShowError(invalidValueFor(fieldName), RegisterWindow, values...)
}
}
var clearNext = true
-func ShowError(message string) {
+func ShowError(message string, callback func(...string), callbackData ...string) {
clearScreen()
fmt.Println(ui.ErrorBox(message))
clearNext = false
+
+ defer callback(callbackData...)
}
func clearScreen() {