From 231ad8195ca2dde0bf560a188614bcdcc26398cc Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Thu, 29 Aug 2013 22:42:14 +0200 Subject: Account activation done --- activate.go | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.go | 1 + tpls.go | 10 ++++++++- tpls/master.tpl | 4 ++-- tpls/msg.tpl | 9 ++++++++ 5 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 activate.go create mode 100644 tpls/msg.tpl 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!" +} diff --git a/main.go b/main.go index 9eaebcc..4eb58c2 100644 --- a/main.go +++ b/main.go @@ -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) diff --git a/tpls.go b/tpls.go index e7298fa..846bdda 100644 --- a/tpls.go +++ b/tpls.go @@ -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 @@ - {{template "title"}} – mailremind + {{template "title" .}} – mailremind -

{{template "title"}}

+

{{template "title" .}}

{{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}} +
{{.Msg}}
+ {{else}} +
{{.Msg}}
+ {{end}} +{{end}} \ No newline at end of file -- cgit v1.2.3-54-g00ecf