package main import ( "html/template" "net/http" "strings" "astraltech.xyz/accountmanager/src/logging" ) type LoginPageData struct { IsHiddenClassList string } func loginHandler(w http.ResponseWriter, r *http.Request) { logging.Info("Handing login page") w.Header().Set("Content-Type", "text/html; charset=utf-8") tmpl := template.Must(template.ParseFiles("src/pages/login_page.html")) if r.Method == http.MethodGet { logging.Info("Rending login page") tmpl.Execute(w, LoginPageData{IsHiddenClassList: "hidden"}) return } if r.Method == http.MethodPost { username := r.FormValue("username") if strings.Contains(username, "/") { tmpl.Execute(w, LoginPageData{IsHiddenClassList: ""}) } password := r.FormValue("password") logging.Infof("New Login request for %s\n", username) newUserData, err := authenticateUser(username, password) userDataMutex.Lock() userData[username] = newUserData userDataMutex.Unlock() if err == ErrPasswordExpired { http.Redirect(w, r, "/reset-password?token=this_is_the_only_token_that_works", http.StatusFound) } else if err != nil { logging.Error(err.Error()) tmpl.Execute(w, LoginPageData{IsHiddenClassList: ""}) } else { if newUserData.isAuth == true { cookie, err := sessionManager.CreateSession(username) if err != nil { logging.Error(err.Error()) http.Error(w, "Session error", http.StatusInternalServerError) return } http.SetCookie(w, cookie) http.Redirect(w, r, "/profile", http.StatusFound) } else { tmpl.Execute(w, LoginPageData{IsHiddenClassList: ""}) } } } }