summaryrefslogtreecommitdiff
path: root/handler.go
diff options
context:
space:
mode:
authorKevin Chabowski <kevin@kch42.de>2013-08-30 15:11:50 +0200
committerKevin Chabowski <kevin@kch42.de>2013-08-30 15:11:50 +0200
commit3a501d85a560b2e2c5c5ded47cc431e4f1315d21 (patch)
tree4a339c9c992645d69b22e592b12ccb3e051a0d40 /handler.go
parentbf1207d7f3a4e95124c5f1498f96fad298e496a6 (diff)
downloadmailremind-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.go65
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)
+ }
+ }
+}