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") } }