diff options
Diffstat (limited to 'go-src/windows.go')
| -rw-r--r-- | go-src/windows.go | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/go-src/windows.go b/go-src/windows.go new file mode 100644 index 0000000..983d450 --- /dev/null +++ b/go-src/windows.go @@ -0,0 +1,121 @@ +package ctfc + +import ( + "fmt" + "os" + "os/exec" + "runtime" + "strings" + + "gitlab.com/Syndamia/ctfc/go-src/ui" +) + +func StartupWindow(...string) { + clearScreen() + + fmt.Println(ui.NormalBox(true, "Login", "Register")) + fmt.Print(ui.InputField("[L/R]")) + command := strings.ToLower(ui.GetInput()) + + if command == "l" { + defer loginWindow() + } else if command == "r" { + defer registerWindow() + } else { + defer showError(invalidCommand, StartupWindow) + } +} + +func loginWindow(values ...string) { + clearScreen() + + fmt.Println(ui.NormalBox(true, "Login")) + + switch len(values) { + case 0: + fmt.Print(ui.InputField("Username")) + case 1: + fmt.Println(ui.InputFieldFilled("Username", values[0])) + fmt.Print(ui.InputField("Password")) + } + + val := ui.GetInput() + + if len(values) == 0 { + defer loginWindow(val) + } else if logInUser(values[0], val) { + defer chatsWindow() + } else { + defer showError(invalidCredentials, loginWindow, values...) + } +} + +func registerWindow(values ...string) { + clearScreen() + + fmt.Println(ui.NormalBox(true, "Register")) + + var validationF func(string) bool + var fieldName, specification string + + switch len(values) { + case 0: + validationF, fieldName, specification = stringValidUsername, "Username", "[A-z, 0-9, *, ., _, -; at least 1 letter]" + case 1: + fmt.Println(ui.InputFieldFilled("Username", values[0])) + validationF, fieldName, specification = stringValidPassword, "Password", "[5-40 characters; at least 1 number]" + case 2: + fmt.Println(ui.InputFieldFilled("Username", values[0])) + fmt.Println(ui.InputFieldFilled("Password", values[1])) + validationF, fieldName, specification = stringValidName, "Name", "[2-60 characters]" + } + + fmt.Print(ui.InputField(fieldName + " " + specification)) + val := ui.GetInput() + + if validationF(val) { + values = append(values, val) + + // 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...) + } +} + +func chatsWindow(...string) { + fmt.Println("Works!") + fmt.Println(loggedInUser) +} + +var clearNext = true + +func showError(message string, callback func(...string), callbackData ...string) { + clearScreen() + + fmt.Println(ui.ErrorBox(message)) + clearNext = false + + defer callback(callbackData...) +} + +func clearScreen() { + if !clearNext { + clearNext = true + return + } + + if runtime.GOOS == "windows" { + cmd := exec.Command("cmd", "/c", "cls") + cmd.Stdout = os.Stdout + cmd.Run() + } else { + fmt.Println("\033[2J") + } +} |
