From d928fb2a4b69dec7e7689d6aa623b9b29c9711a1 Mon Sep 17 00:00:00 2001 From: Lucas BEE Date: Sun, 13 Nov 2016 13:18:32 +0000 Subject: [PATCH 1/3] Better navbar --- src/templates/navbar.tmpl | 109 +++++++++++++++++++++----------------- 1 file changed, 61 insertions(+), 48 deletions(-) diff --git a/src/templates/navbar.tmpl b/src/templates/navbar.tmpl index 26293af..89c5d12 100644 --- a/src/templates/navbar.tmpl +++ b/src/templates/navbar.tmpl @@ -1,58 +1,71 @@ From c0087ba978eadf93376d0b90a72e3a593c944d88 Mon Sep 17 00:00:00 2001 From: Lucas BEE Date: Sun, 13 Nov 2016 13:18:56 +0000 Subject: [PATCH 2/3] Better templating for erros and success messages --- src/templates/errors.tmpl | 9 +++++++++ src/templates/layout.tmpl | 2 ++ src/templates/success.tmpl | 9 +++++++++ 3 files changed, 20 insertions(+) create mode 100644 src/templates/errors.tmpl create mode 100644 src/templates/success.tmpl diff --git a/src/templates/errors.tmpl b/src/templates/errors.tmpl new file mode 100644 index 0000000..56877aa --- /dev/null +++ b/src/templates/errors.tmpl @@ -0,0 +1,9 @@ +{{ if $.Data.Errors }} +
+
+
+

{{ $.Data.Errors }}

+
+
+
+{{ end }} diff --git a/src/templates/layout.tmpl b/src/templates/layout.tmpl index c20cf23..f00cec8 100644 --- a/src/templates/layout.tmpl +++ b/src/templates/layout.tmpl @@ -10,6 +10,8 @@ + {{ template "errors" $ }} + {{ template "success" $ }} {{ template "navbar" $ }}
diff --git a/src/templates/success.tmpl b/src/templates/success.tmpl new file mode 100644 index 0000000..cd05d1f --- /dev/null +++ b/src/templates/success.tmpl @@ -0,0 +1,9 @@ +{{ if $.Data.Success }} +
+
+
+ {{ $.Data.Success }} +
+
+
+{{ end }} From 41c80386b54258c9d1051999f3a03ebe96a7cee5 Mon Sep 17 00:00:00 2001 From: Lucas BEE Date: Sun, 13 Nov 2016 13:23:56 +0000 Subject: [PATCH 3/3] Create a Sign up page and handler and route --- src/internal/users/handlers.go | 66 ++++++++++++++++++++++++++++++++- src/internal/users/users.go | 11 ++++++ src/main.go | 2 + src/templates/users/signup.tmpl | 39 +++++++++++++++++++ 4 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 src/templates/users/signup.tmpl diff --git a/src/internal/users/handlers.go b/src/internal/users/handlers.go index e6a38ff..122a254 100644 --- a/src/internal/users/handlers.go +++ b/src/internal/users/handlers.go @@ -17,6 +17,69 @@ func LoginGETHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error { return e.Rends(w, r, "users/login") } +func SignupGETHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error { + return e.Rends(w, r, "users/signup") +} + +func SignupPOSTHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error { + type newForm struct { + Username string + Password string + PasswordVerify string + } + e.Log.Debugf("creating new user ...") + + err := r.ParseForm() + if err != nil { + return err + } + + form := new(newForm) + decoder := schema.NewDecoder() + err = decoder.Decode(form, r.PostForm) + if err != nil { + return err + } + + user := User{ + Name: form.Username, + } + if form.Password != "" || form.PasswordVerify != "" { + if form.Password != form.PasswordVerify { + data.SetData(r, "Errors", "Password mismatch") + return e.Rends(w, r, "users/signup") + } + user.Hash, err = e.Auth.GenHash(form.Password) + if err != nil { + return err + } + } + + err = user.NewConfig() + if err != nil { + return err + } + + err = user.Add(e.Database) + if err != nil { + pretty.Println(err) + return err + } + e.Log.Debugf("new user %s created ...", form.Username) + + err = e.Auth.Login(w, r, form.Username, form.Password) + if err != nil { + if err == auth.ErrInvalidPassword || err == ErrUnknownUser { + data.SetData(r, "Errors", "Error invalid user or password") + return e.Rends(w, r, "users/signup") + } + return err + } + + http.Redirect(w, r, "/", http.StatusTemporaryRedirect) + return nil +} + func LoginPOSTHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error { type loginForm struct { Username string @@ -38,7 +101,7 @@ func LoginPOSTHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error err = e.Auth.Login(w, r, form.Username, form.Password) if err != nil { if err == auth.ErrInvalidPassword || err == ErrUnknownUser { - data.SetData(r, "FormErrors", "Error invalid user or password") + data.SetData(r, "Errors", "Error invalid user or password") return e.Rends(w, r, "users/login") } return err @@ -49,6 +112,7 @@ func LoginPOSTHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error if err != nil { return err } + e.Log.Debugf("redirecting to %s", path) if path != "" { http.Redirect(w, r, path, http.StatusTemporaryRedirect) diff --git a/src/internal/users/users.go b/src/internal/users/users.go index 5359dae..a0f036b 100644 --- a/src/internal/users/users.go +++ b/src/internal/users/users.go @@ -75,6 +75,17 @@ func (u *User) SetConfig(key string, v interface{}) error { return u.RawConfig.UnmarshalJSON(b) } +// NewConfig creates a new empty config +func (u *User) NewConfig() error { + var configMap map[string]*json.RawMessage + b, err := json.Marshal(configMap) + if err != nil { + return err + } + + return u.RawConfig.UnmarshalJSON(b) +} + // Token represents a token type Token struct { sqly.BaseModel diff --git a/src/main.go b/src/main.go index 90e474b..16ac02c 100644 --- a/src/main.go +++ b/src/main.go @@ -72,6 +72,8 @@ func main() { env.Handle("/", movies.ExplorePopular).Name("movies.home") env.Handle("/users/login", users.LoginGETHandler).Name("users.login").Methods("GET") env.Handle("/users/login", users.LoginPOSTHandler).Name("users.login").Methods("POST") + env.Handle("/users/signup", users.SignupGETHandler).Name("users.signup").Methods("GET") + env.Handle("/users/signup", users.SignupPOSTHandler).Name("users.signup").Methods("POST") env.Handle("/users/logout", users.LogoutHandler).Name("users.logout") env.Handle("/users/details", users.DetailsHandler).Name("users.details").WithRole(users.UserRole) env.Handle("/users/edit", users.EditHandler).Name("users.edit").WithRole(users.UserRole) diff --git a/src/templates/users/signup.tmpl b/src/templates/users/signup.tmpl new file mode 100644 index 0000000..76a9058 --- /dev/null +++ b/src/templates/users/signup.tmpl @@ -0,0 +1,39 @@ +
+
+
+

Sign up

+
+
+
+

+ +
+ + +

+
+
+

+ +
+ + +

+
+
+

+ +
+ + +

+
+
+ +
+
+ Cancel +
+
+
+