package windows 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 { defer fmt.Println(values[0], val) } } 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) 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, 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") } }