61 lines
1.5 KiB
Go
61 lines
1.5 KiB
Go
package routing
|
|
|
|
import (
|
|
"errors"
|
|
lishwist "lishwist/core"
|
|
"lishwist/http/api"
|
|
"lishwist/http/rsvp"
|
|
"net/http"
|
|
)
|
|
|
|
func Register(h http.Header, r *rsvp.Request) rsvp.Response {
|
|
props := api.NewRegisterProps("", "", "")
|
|
|
|
session := r.GetSession()
|
|
flash := session.FlashGet()
|
|
|
|
flashProps, _ := flash.(*api.RegisterProps)
|
|
if flashProps != nil {
|
|
props.Username.Value = flashProps.Username.Value
|
|
|
|
props.GeneralError = flashProps.GeneralError
|
|
props.Username.Error = flashProps.Username.Error
|
|
props.ConfirmPassword.Error = flashProps.ConfirmPassword.Error
|
|
}
|
|
|
|
return rsvp.Data("register.gotmpl", props).SaveSession(session)
|
|
}
|
|
|
|
func RegisterPost(h http.Header, r *rsvp.Request) rsvp.Response {
|
|
form := r.ParseForm()
|
|
s := r.GetSession()
|
|
|
|
username := form.Get("username")
|
|
newPassword := form.Get("newPassword")
|
|
confirmPassword := form.Get("confirmPassword")
|
|
|
|
props := api.NewRegisterProps(username, newPassword, confirmPassword)
|
|
|
|
valid := props.Validate()
|
|
props.Password.Value = ""
|
|
props.ConfirmPassword.Value = ""
|
|
if !valid {
|
|
s.FlashSet(&props)
|
|
return rsvp.SeeOther("/").SaveSession(s).Log("Invalid props: %#v\n", props)
|
|
}
|
|
|
|
_, err := lishwist.Register(username, newPassword)
|
|
if err != nil {
|
|
if errors.Is(err, lishwist.ErrorUsernameTaken) {
|
|
props.Username.Error = "Username is taken"
|
|
} else {
|
|
props.GeneralError = "Something went wrong."
|
|
}
|
|
s.FlashSet(&props)
|
|
return rsvp.SeeOther("/register").SaveSession(s).Log("Registration failed: %s\n", err)
|
|
}
|
|
|
|
s.FlashSet(true)
|
|
return rsvp.SeeOther("/").SaveSession(s)
|
|
}
|