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) }