diff options
author | Kevin Chabowski <kevin@kch42.de> | 2013-08-30 15:11:50 +0200 |
---|---|---|
committer | Kevin Chabowski <kevin@kch42.de> | 2013-08-30 15:11:50 +0200 |
commit | 3a501d85a560b2e2c5c5ded47cc431e4f1315d21 (patch) | |
tree | 4a339c9c992645d69b22e592b12ccb3e051a0d40 /login.go | |
parent | bf1207d7f3a4e95124c5f1498f96fad298e496a6 (diff) | |
download | mailremind-3a501d85a560b2e2c5c5ded47cc431e4f1315d21.tar.gz mailremind-3a501d85a560b2e2c5c5ded47cc431e4f1315d21.tar.bz2 mailremind-3a501d85a560b2e2c5c5ded47cc431e4f1315d21.zip |
Defined own handler type to reduce repetive jobs.
Diffstat (limited to 'login.go')
-rw-r--r-- | login.go | 109 |
1 files changed, 16 insertions, 93 deletions
@@ -16,79 +16,27 @@ type loginFormdata struct { Mail, Password string } -func userFromSess(sess *sessions.Session) model.User { - _id, ok := sess.Values["uid"] - if !ok { - return nil - } - - id, ok := _id.(string) - if !ok { - return nil - } - - uid, err := db.ParseDBID(id) - if err != nil { - return nil - } - - user, err := dbcon.UserByID(uid) - if err != nil { - return nil - } - - return user -} - -func getSess(req *http.Request) (*sessions.Session, error) { - sess, err := SessionStorage.Get(req, "mailremind-sess") - if err != nil { - sess, err = SessionStorage.New(req, "mailremind-sess") - } - - return sess, err -} - -func login(rw http.ResponseWriter, req *http.Request) { +func login(user model.User, sess *sessions.Session, req *http.Request) interface{} { outdata := &loginTpldata{} - defer func() { - if err := tplLogin.Execute(rw, outdata); err != nil { - log.Printf("Error executing template in login: %s", err) - } - }() - sess, err := getSess(req) - if err != nil { - outdata.Error = "Could not create a session. " + err.Error() - return - } - defer func() { - if err := sess.Save(req, rw); err != nil { - log.Printf("Error while saving session: %s", err) - outdata.Success = "" - outdata.Error = "Error while saving session." - return - } - }() - - if user := userFromSess(sess); user != nil { + if user != nil { outdata.Success = "You are already logged in" - return + return outdata } if req.Method != "POST" { - return + return outdata } if err := req.ParseForm(); err != nil { outdata.Error = "Data of form could not be understand. If this happens again, please contact support!" - return + return outdata } indata := new(loginFormdata) if err := formdec.Decode(indata, req.Form); (err != nil) || (indata.Mail == "") || (indata.Password == "") { outdata.Error = "Input data wrong or missing. Please fill in all values." - return + return outdata } user, err := dbcon.UserByMail(indata.Mail) @@ -96,57 +44,32 @@ func login(rw http.ResponseWriter, req *http.Request) { case nil: case model.NotFound: outdata.Error = "E-Mail or password was wrong." - return + return outdata default: log.Printf("Error while loding user data (login): %s", err) outdata.Error = "User data could not be loaded. Please contact support, if this happens again." - return + return outdata } if bcrypt.CompareHashAndPassword(user.PWHash(), []byte(indata.Password)) != nil { outdata.Error = "E-Mail or password was wrong." - return + return outdata } sess.Values["uid"] = user.ID().String() outdata.Success = "Login successful" + return outdata } -func logincheck(rw http.ResponseWriter, req *http.Request) { - sess, _ := getSess(req) - user := userFromSess(sess) - outdata := new(msgTpldata) - if user == nil { - outdata.Msg = "<nil>" - } else { +func logincheck(user model.User, sess *sessions.Session, req *http.Request) interface{} { + outdata := &msgTpldata{Msg: "<nil>"} + if user != nil { outdata.Msg = user.Email() } - tplMsg.Execute(rw, outdata) + return outdata } -func logout(rw http.ResponseWriter, req *http.Request) { - outdata := &msgTpldata{Class: "error", Title: "Logout"} - defer func() { - if err := tplMsg.Execute(rw, outdata); err != nil { - log.Printf("Error executing template in login: %s", err) - } - }() - - sess, err := getSess(req) - if err != nil { - outdata.Msg = "Could not create a session." - return - } - defer func() { - if err := sess.Save(req, rw); err != nil { - log.Printf("Error while saving session: %s", err) - outdata.Class = "error" - outdata.Msg = "Error while saving session." - return - } - }() - +func logout(user model.User, sess *sessions.Session, req *http.Request) interface{} { delete(sess.Values, "uid") - outdata.Class = "success" - outdata.Msg = "Your are now logged out." + return &msgTpldata{Class: "success", Title: "Logout", Msg: "Your are now logged out."} } |