package main import "fmt" import "log" import "net/http" import "html/template" import "strconv" import "strings" import "unicode/utf8" import "alfheimgame/models" type templatedata struct { Formerrors map[string]string } func favicon(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, "favicon.ico") } func home(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { http.NotFound(w, r); return } text, err := template.ParseFiles("base.html", "index.html") if err != nil { http.Error(w, "Internal Server Error", 500) log.Fatal(err) } switch r.Method { case http.MethodGet: err = text.Execute(w, true) if err != nil { log.Fatal(err) http.Error(w, "Internal Server Error", 500) } case http.MethodPost: data := LoginData{username: r.FormValue("username"), password: r.FormValue("password")} fmt.Println(data) err = text.Execute(w, false) if err != nil { log.Fatal(err) http.Error(w, "Internal Server Error", 500) } } } func login(w http.ResponseWriter, r *http.Request) { text, err := template.ParseFiles("base.html", "login/index.html") if err != nil { http.Error(w, "Internal Server Error", 500) log.Fatal(err) } switch r.Method { case http.MethodGet: text.Execute(w, templatedata{}) if err != nil { log.Fatal(err) http.Error(w, "Internal Server Error", 500) } case http.MethodPost: logindata := LoginData{username: r.FormValue("username"), password: r.FormValue("password")} errors := make(map[string]string) if strings.TrimSpace(logindata.username) == "" { errors["username"] = "This field cannot be blank" } else if utf8.RuneCountInString(logindata.username) > 20 { errors["username"] = "This field is too long (the maximum is 20 characters)" } if strings.TrimSpace(logindata.password) == "" { errors["password"] = "This field cannot be blank" } else if utf8.RuneCountInString(logindata.password) < 8 { errors["password"] = "This field is too short (the minimum is 8 characters)" } if len(errors) > 0 { text.Execute(w, templatedata{errors}) if err != nil { log.Fatal(err) http.Error(w, "Internal Server Error", 500) } } } } func register(w http.ResponseWriter, r *http.Request) { text, err := template.ParseFiles("base.html", "register/index.html") if err != nil { http.Error(w, "Internal Server Error", 500) log.Fatal(err) } switch r.Method { case http.MethodGet: text.Execute(w, templatedata{}) if err != nil { log.Fatal(err) http.Error(w, "Internal Server Error", 500) } case http.MethodPost: account := models.Account{Username: r.FormValue("username"), Password: []byte(r.FormValue("password")), Firstname: r.FormValue("firstname"), Lastname: r.FormValue("lastname"), Email: r.FormValue("email")} errors := make(map[string]string) if strings.TrimSpace(account.Username) == "" { errors["username"] = "This field cannot be blank" } else if utf8.RuneCountInString(account.Username) > 20 { errors["username"] = "This field is too long (the maximum is 20 characters)" } if strings.TrimSpace(string(account.Password)) == "" { errors["password"] = "This field cannot be blank" } else if utf8.RuneCountInString(string(account.Password)) < 8 { errors["password"] = "This field is too short (the minimum is 8 characters)" } if len(errors) > 0 { text.Execute(w, templatedata{errors}) if err != nil { log.Fatal(err) http.Error(w, "Internal Server Error", 500) } } fmt.Println(account) users.Insert(account.Username, string(account.Password), account.Firstname, account.Lastname, account.Email) http.Redirect(w, r, "/login", http.StatusSeeOther) } } func account(w http.ResponseWriter, r *http.Request) { id, err := strconv.Atoi(r.URL.Query().Get("id")) if err != nil || id < 1 { http.NotFound(w, r) return } account, err := users.Get_account(int32(id)); if err != nil { log.Fatal(err); } text, err := template.ParseFiles("base.html", "account/index.html") if err != nil { http.Error(w, "Internal Server Error", 500) log.Fatal(err) } switch r.Method { case http.MethodGet: text.Execute(w, account) if err != nil { log.Fatal(err) http.Error(w, "Internal Server Error", 500) } fmt.Printf("executed"); //case http.MethodPost: // data := LoginData{username: r.FormValue("username"), password: r.FormValue("password")} // fmt.Println(data) // text.Execute(w, false) // if err != nil { // log.Fatal(err) // http.Error(w, "Internal Server Error", 500) // } } }