summaryrefslogtreecommitdiff
path: root/login.go
diff options
context:
space:
mode:
authorKevin Chabowski <kevin@kch42.de>2013-08-30 13:46:34 +0200
committerKevin Chabowski <kevin@kch42.de>2013-08-30 13:46:34 +0200
commitbf1207d7f3a4e95124c5f1498f96fad298e496a6 (patch)
treeef6317abdddbbbf8da152b7f18d1f15720019381 /login.go
parent5c0a901b1b3e522ed523e966feb9901b8c7e01ff (diff)
downloadmailremind-bf1207d7f3a4e95124c5f1498f96fad298e496a6.tar.gz
mailremind-bf1207d7f3a4e95124c5f1498f96fad298e496a6.tar.bz2
mailremind-bf1207d7f3a4e95124c5f1498f96fad298e496a6.zip
Implemented Logout and improved sessions
Diffstat (limited to 'login.go')
-rw-r--r--login.go43
1 files changed, 40 insertions, 3 deletions
diff --git a/login.go b/login.go
index f678216..e5d039d 100644
--- a/login.go
+++ b/login.go
@@ -40,6 +40,15 @@ func userFromSess(sess *sessions.Session) model.User {
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) {
outdata := &loginTpldata{}
defer func() {
@@ -48,9 +57,10 @@ func login(rw http.ResponseWriter, req *http.Request) {
}
}()
- sess, err := SessionStorage.Get(req, "mailremind-sess")
+ sess, err := getSess(req)
if err != nil {
- sess, _ = SessionStorage.New(req, "mailremind-sess")
+ outdata.Error = "Could not create a session. " + err.Error()
+ return
}
defer func() {
if err := sess.Save(req, rw); err != nil {
@@ -103,7 +113,7 @@ func login(rw http.ResponseWriter, req *http.Request) {
}
func logincheck(rw http.ResponseWriter, req *http.Request) {
- sess, _ := SessionStorage.Get(req, "mailremind-sess")
+ sess, _ := getSess(req)
user := userFromSess(sess)
outdata := new(msgTpldata)
if user == nil {
@@ -113,3 +123,30 @@ func logincheck(rw http.ResponseWriter, req *http.Request) {
}
tplMsg.Execute(rw, 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
+ }
+ }()
+
+ delete(sess.Values, "uid")
+ outdata.Class = "success"
+ outdata.Msg = "Your are now logged out."
+}