package users import ( "fmt" "net/http" "github.com/gorilla/Schema" "gitlab.quimbo.fr/odwrtw/canape-sql/auth" "gitlab.quimbo.fr/odwrtw/canape-sql/web" ) func LoginHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error { if r.Method == "GET" { return e.Rends(w, r, "users/login") } type loginForm struct { Username string Password string } err := r.ParseForm() if err != nil { return err } form := new(loginForm) decoder := schema.NewDecoder() err = decoder.Decode(form, r.PostForm) if err != nil { return err } err = e.Auth.Login(w, r, form.Username, form.Password) if err != nil { if err == auth.ErrInvalidPassword || err == ErrUnknownUser { web.SetData(r, "FormErrors", "Error invalid user or password") return e.Rends(w, r, "users/login") } return err } //TODO: redirect to user details or to previous location return nil } func LogoutHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error { e.Auth.Logout(w, r) //TODO: redirect to login page return nil } func DetailsHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error { u := auth.GetCurrentUser(r) if u == nil { return nil } _, ok := u.(*User) if !ok { return fmt.Errorf("Invalid user type") } return nil }