diff options
-rw-r--r-- | activate.go | 64 | ||||
-rw-r--r-- | main.go | 1 | ||||
-rw-r--r-- | tpls.go | 10 | ||||
-rw-r--r-- | tpls/master.tpl | 4 | ||||
-rw-r--r-- | tpls/msg.tpl | 9 |
5 files changed, 85 insertions, 3 deletions
diff --git a/activate.go b/activate.go new file mode 100644 index 0000000..ae392d1 --- /dev/null +++ b/activate.go @@ -0,0 +1,64 @@ +package main + +import ( + "kch42.de/gostuff/mailremind/model" + "log" + "net/http" +) + +func activate(rw http.ResponseWriter, req *http.Request) { + outdata := &msgTpldata{Title: "Activate Account", Class: "error"} + defer func() { + if err := tplMsg.Execute(rw, outdata); err != nil { + log.Printf("Could not execute template in activate: %s", err) + } + }() + + req.ParseForm() + + _userid := req.FormValue("U") + code := req.FormValue("Code") + + if (_userid == "") || (code == "") { + outdata.Msg = "User or code invalid. Check, if the activation link was correctly copied from the mail." + return + } + + userid, err := db.ParseDBID(_userid) + if err != nil { + outdata.Msg = "User or code invalid. Check, if the activation link was correctly copied from the mail." + return + } + + user, err := dbcon.UserByID(userid) + switch err { + case nil: + case model.NotFound: + outdata.Msg = "User not found." + return + default: + log.Printf("Error while getting user by ID <%s>: %s", userid, err) + outdata.Msg = "An error occurred while loading user data. Send a message to the support, if this happens again." + return + } + + if user.ActivationCode() != code { + outdata.Msg = "Wrong activation code." + return + } + + if err := user.SetActivationCode(""); err != nil { + log.Printf("Error while resetting activation code: %s", err) + outdata.Msg = "An error occurred while activating the user. Send a message to the support, if this happens again." + return + } + + if err := user.SetActive(true); err != nil { + log.Printf("Error while resetting activation code: %s", err) + outdata.Msg = "An error occurred while activating the user. Send a message to the support, if this happens again." + return + } + + outdata.Class = "success" + outdata.Msg = "Account activated!" +} @@ -50,6 +50,7 @@ func main() { router := mux.NewRouter() router.PathPrefix("/static").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir(staticpath)))) router.HandleFunc("/register", register) + router.HandleFunc("/activate", activate) http.Handle("/", router) @@ -16,7 +16,10 @@ func loadTpl(tplpath, name string) *template.Template { return tpl } -var tplRegister *template.Template +var ( + tplRegister *template.Template + tplMsg *template.Template +) func initTpls() { tplpath, err := conf.GetString("paths", "tpls") @@ -25,4 +28,9 @@ func initTpls() { } tplRegister = loadTpl(tplpath, "register") + tplMsg = loadTpl(tplpath, "msg") +} + +type msgTpldata struct { + Title, Class, Msg string } diff --git a/tpls/master.tpl b/tpls/master.tpl index b675598..4e2b90f 100644 --- a/tpls/master.tpl +++ b/tpls/master.tpl @@ -1,9 +1,9 @@ <html> <head> - <title>{{template "title"}} – mailremind</title> + <title>{{template "title" .}} – mailremind</title> </head> <body> - <h1>{{template "title"}}</h1> + <h1>{{template "title" .}}</h1> <div class="content"> {{template "content" .}} diff --git a/tpls/msg.tpl b/tpls/msg.tpl new file mode 100644 index 0000000..f7e75f3 --- /dev/null +++ b/tpls/msg.tpl @@ -0,0 +1,9 @@ +{{define "title"}}{{.Title}}{{end}} + +{{define "content"}} + {{if .Class}} + <div class="{{.Class}}">{{.Msg}}</div> + {{else}} + <div>{{.Msg}}</div> + {{end}} +{{end}}
\ No newline at end of file |