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 /handler.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 'handler.go')
-rw-r--r-- | handler.go | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/handler.go b/handler.go new file mode 100644 index 0000000..d710b2a --- /dev/null +++ b/handler.go @@ -0,0 +1,65 @@ +package main + +import ( + "github.com/gorilla/sessions" + "html/template" + "kch42.de/gostuff/mailremind/model" + "log" + "net/http" +) + +type Handler func(user model.User, sess *sessions.Session, req *http.Request) interface{} + +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 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 mkHttpHandler(h Handler, tpl *template.Template) http.HandlerFunc { + return func(rw http.ResponseWriter, req *http.Request) { + sess, err := getSess(req) + if err != nil { + log.Printf("Error while getting session: %s", err) + rw.Write([]byte("Unable to create session")) // TODO: Better error message... + } + + user := userFromSess(sess) + outdata := h(user, sess, req) + + if err := sess.Save(req, rw); err != nil { + log.Printf("Error while saving session: %s", err) + } + + if err := tpl.Execute(rw, outdata); err != nil { + log.Printf("Error executing template %s: %s", tpl.Name, err) + } + } +} |