aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSyndamia <kamen.d.mladenov@protonmail.com>2021-07-09 10:10:11 +0300
committerSyndamia <kamen.d.mladenov@protonmail.com>2021-07-09 10:10:11 +0300
commit703029f1cb8ce8d3ca4d5a9231886f734bed7783 (patch)
tree549b6d155aad6778ab02711dd9027c7f0db66286
parent4fe16d9b4949304984badf85801cdccea847f06c (diff)
downloadctfc-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
-rw-r--r--go-src/windows.go114
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
}