You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.5 KiB
65 lines
1.5 KiB
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, "user/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)
|
|
}
|