Create a Sign up page and handler and route
This commit is contained in:
parent
c0087ba978
commit
41c80386b5
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
39
src/templates/users/signup.tmpl
Normal file
39
src/templates/users/signup.tmpl
Normal file
@ -0,0 +1,39 @@
|
||||
<div class="container">
|
||||
<div class="content-fluid">
|
||||
<div class="col-md-6 col-md-offset-3 col-xs-12">
|
||||
<h2>Sign up</h2>
|
||||
<hr>
|
||||
<form accept-charset="UTF-8" action="{{ URL "users.signup" }}" method="POST" class="form-horizontal" id="new_user">
|
||||
<div>
|
||||
<p class="">
|
||||
<label for="user_email">Username</label>
|
||||
<br>
|
||||
<input autofocus="autofocus" class="form-control" id="username" name="Username" type="username" value="">
|
||||
<span class="error"></span>
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="">
|
||||
<label for="user_password">Password</label>
|
||||
<br>
|
||||
<input autocomplete="off" class="form-control" id="password" name="Password" type="password" value="">
|
||||
<span class="error"></span>
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="">
|
||||
<label for="user_password">Confirm Password</label>
|
||||
<br>
|
||||
<input autocomplete="off" class="form-control" id="passwordVerify" name="PasswordVerify" type="password" value="">
|
||||
<span class="error"></span>
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<input class="btn btn-primary pull-right" type="submit" value="Sign up">
|
||||
<br>
|
||||
</div>
|
||||
<a class="btn btn-default btn-sm pull-left" href="/movies/%3cnil%3e">Cancel</a>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
Loading…
x
Reference in New Issue
Block a user