// package controllers // import ( // "errors" // "net/http" // "git.technical.kiwi/go/otfe/misc/cookie" // "git.technical.kiwi/go/otfe/misc/helpers" // "git.technical.kiwi/go/otfe/misc/rand" // "git.technical.kiwi/go/otfe/models" // ) // //Session controllers // type Session struct{} // type pageData struct { // Title string // Err string // User models.User // } // //New login form // func (s *Session) New(w http.ResponseWriter, r *http.Request) { // var err error // data := pageData{Title: "Login"} // data.Err, err = cookie.Read(r, "error") // if err == nil { // cookie.Delete(w, "error") // } // t(w, data, "/static/login.gtpl") // } // //Create a new session // func (s *Session) Create(w http.ResponseWriter, r *http.Request) { // r.ParseForm() // //Get email and password and check they are not empty // email := r.Form.Get("email") // password := r.Form.Get("password") // //Check if user exists // var user models.User // //Check password is correct // if user.Read("email", email) == nil && // helpers.CheckPasswordHash(password, user.Password) == nil { // id, _ := rand.B64String(32) // sess := models.Session{ID: id, UserID: user.ID} // sess.Create() // cookie.Create(w, "session", sess.ID) // http.Redirect(w, r, "/", http.StatusFound) // } else { // loginFail(w, r, errors.New("Email or password incorrect")) // } // } // //Delete session // func (s *Session) Delete(w http.ResponseWriter, r *http.Request) { // id, err := cookie.Read(r, "session") // //Check user is logged in // if err == nil { // cookie.Delete(w, "session") // var session models.Session // session.Delete(id) // http.Redirect(w, r, "/", http.StatusFound) // } // } // func loginFail(w http.ResponseWriter, r *http.Request, err error) { // cookie.Create(w, "error", err.Error()) // http.Redirect(w, r, "/login", http.StatusFound) // }