aboutsummaryrefslogtreecommitdiff
path: root/go-src/windows.go
diff options
context:
space:
mode:
authorSyndamia <kamen.d.mladenov@protonmail.com>2021-07-05 16:47:10 +0300
committerSyndamia <kamen.d.mladenov@protonmail.com>2021-07-05 16:47:10 +0300
commitacdb157282ac4705d8ec3ffab75b6bba2cc08550 (patch)
tree709c534d40edef276fda092b44765f1ba34ca2cc /go-src/windows.go
parentdd0862468b9f76d0d335b0fb3720ce3cd364d9a9 (diff)
downloadctfc-acdb157282ac4705d8ec3ffab75b6bba2cc08550.tar
ctfc-acdb157282ac4705d8ec3ffab75b6bba2cc08550.tar.gz
ctfc-acdb157282ac4705d8ec3ffab75b6bba2cc08550.zip
Changed file structure and implemented rester file creation and login check
Diffstat (limited to 'go-src/windows.go')
-rw-r--r--go-src/windows.go121
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")
+ }
+}