summaryrefslogtreecommitdiff
path: root/login.go
diff options
context:
space:
mode:
Diffstat (limited to 'login.go')
-rw-r--r--login.go109
1 files changed, 16 insertions, 93 deletions
diff --git a/login.go b/login.go
index e5d039d..459d2ff 100644
--- a/login.go
+++ b/login.go
@@ -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."}
}