diff options
Diffstat (limited to 'go-src/windows')
| -rw-r--r-- | go-src/windows/dataValidations.go | 55 | ||||
| -rw-r--r-- | go-src/windows/errorMessages.go | 4 | ||||
| -rw-r--r-- | go-src/windows/windows.go | 45 |
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() { |
