package controllers import ( "net/http" "git.aiterp.net/AiteRP/aitestory/view" "git.aiterp.net/AiteRP/aitestory/viewmodel" "git.aiterp.net/gisle/wrouter" "git.aiterp.net/gisle/wrouter/auth" ) // UserController serves and handles the login form var UserController = wrouter.Router{} func userLogin(path string, w http.ResponseWriter, req *http.Request, user *auth.User) bool { //var err error if (req.Method != "GET" && req.Method != "POST") || len(req.URL.Path) > len(path) { return false } if req.Method == "GET" && user != nil { http.Redirect(w, req, "/", 302) return true } ul := viewmodel.UserLogin{} if req.Method == "POST" { req.ParseForm() wa := WikiAthenticator{} newUser, err := wa.Login(req.Form.Get("username"), req.Form.Get("password")) if err == nil { sess := auth.OpenSession(newUser) http.SetCookie(w, &http.Cookie{Name: auth.SessionCookieName, Value: sess.ID, Expires: sess.Time.Add(auth.SessionMaxTime), Path: "/", HttpOnly: true}) http.Redirect(w, req, "/", 302) return true } ul.UserName = req.Form.Get("username") ul.Error = err.Error() } ul.Setup(user) view.Render(w, "login", 200, ul) return true } func userLogout(path string, w http.ResponseWriter, req *http.Request, user *auth.User) bool { //var err error if user != nil { auth.CloseSession(user.Session.ID) } http.Redirect(w, req, "/", 302) return true } func init() { UserController.Function("/login", userLogin) UserController.Function("/logout", userLogout) }