diff options
| author | Syndamia <kamen.d.mladenov@protonmail.com> | 2021-07-09 10:10:11 +0300 |
|---|---|---|
| committer | Syndamia <kamen.d.mladenov@protonmail.com> | 2021-07-09 10:10:11 +0300 |
| commit | 703029f1cb8ce8d3ca4d5a9231886f734bed7783 (patch) | |
| tree | 549b6d155aad6778ab02711dd9027c7f0db66286 /go-src | |
| parent | 4fe16d9b4949304984badf85801cdccea847f06c (diff) | |
| download | ctfc-703029f1cb8ce8d3ca4d5a9231886f734bed7783.tar ctfc-703029f1cb8ce8d3ca4d5a9231886f734bed7783.tar.gz ctfc-703029f1cb8ce8d3ca4d5a9231886f734bed7783.zip | |
Updated startup window to utilise handlInputActions and moved form logic from login and register windows to a separate function
Diffstat (limited to 'go-src')
| -rw-r--r-- | go-src/windows.go | 114 |
1 files changed, 57 insertions, 57 deletions
diff --git a/go-src/windows.go b/go-src/windows.go index 148ee96..a0237c9 100644 --- a/go-src/windows.go +++ b/go-src/windows.go @@ -15,77 +15,43 @@ func StartupWindow(...string) { ui.NormalBox(true, "Login", "Register") input := ui.InputField("[L/R]") - command := strings.ToLower(input) - if command == "l" { - defer loginWindow() - } else if command == "r" { - defer registerWindow() - } else { + handled := handleInputActions(input, false, + inputAction{"L", loginWindow, nil}, + inputAction{"R", registerWindow, nil}, + ) + if !handled { defer showError(invalidCommand, StartupWindow) } } func loginWindow(values ...string) { - clearScreen() - - ui.NormalBox(true, "Login") - - var input string - - switch len(values) { - case 0: - input = ui.InputField("Username") - case 1: - ui.InputFieldFilled("Username", values[0]) - input = ui.InputField("Password") - } + inputs := formWindow("Login", []formInput{ + {"Username", "", nil}, + {"Password", "", nil}, + }, values..., + ) - if len(values) == 0 { - defer loginWindow(input) - } else if logInUser(values[0], input) { + if logInUser(inputs[0], inputs[1]) { defer chatsWindow() } else { - defer showError(invalidCredentials, loginWindow, values...) + defer showError(invalidCredentials, loginWindow, inputs[0]) } } func registerWindow(values ...string) { clearScreen() - ui.NormalBox(true, "Register") - - var inputidationF func(string) bool - var fieldName, specification string - - switch len(values) { - case 0: - inputidationF, fieldName, specification = stringValidUsername, "Username", "[A-z, 0-9, *, ., _, -; at least 1 letter]" - case 1: - ui.InputFieldFilled("Username", values[0]) - inputidationF, fieldName, specification = stringValidPassword, "Password", "[5-40 characters; at least 1 number]" - case 2: - ui.InputFieldFilled("Username", values[0]) - ui.InputFieldFilled("Password", values[1]) - inputidationF, fieldName, specification = stringValidName, "Name", "[2-60 characters]" - } - - input := ui.InputField(fieldName + " " + specification) - - if inputidationF(input) { - values = append(values, input) + inputs := formWindow("Register", []formInput{ + {"Username", " [A-z, 0-9, *, ., _, -; at least 1 letter]", stringValidUsername}, + {"Password", " [5-40 characters; at least 1 number]", stringValidPassword}, + {"Name", " [2-60 characters]", stringValidName}, + }, values..., + ) - // When user has entered all required values - if len(values) == 3 { - createUser(values) - logInUser(values[0], values[1]) - defer chatsWindow() - } else { // When there are still values to be given - defer registerWindow(values...) - } - } else { - defer showError(invalidValueFor(fieldName), registerWindow, values...) - } + createUser(inputs) + logInUser(inputs[0], inputs[1]) + defer chatsWindow() } func chatsWindow(values ...string) { @@ -111,8 +77,42 @@ func chatsWindow(values ...string) { } } +type formInput struct { + name string + specification string + validationFunc func(string) bool +} + +func formWindow(boxTitle string, formInputs []formInput, currentValues ...string) (userInputs []string) { + userInputs = currentValues + for _, v := range formInputs[len(currentValues):] { + clearScreen() + + ui.NormalBox(true, boxTitle) + + for j, va := range userInputs { + ui.InputFieldFilled(formInputs[j].name, va) + } + + input := ui.InputField(v.name + v.specification) + + if v.validationFunc != nil { + if !v.validationFunc(input) { + formCallback := func(...string) { + defer formWindow(boxTitle, formInputs, userInputs...) + } + defer showError(invalidValueFor(v.name), formCallback) + return + } + } + + userInputs = append(userInputs, input) + } + return +} + type inputAction struct { - inputue string + value string execute func(...string) args []string } @@ -127,7 +127,7 @@ func handleInputActions(input string, handleNav bool, ia ...inputAction) bool { ) } for _, v := range ia { - if input == v.inputue { + if strings.ToLower(input) == strings.ToLower(v.value) { defer v.execute(v.args...) return true } |
