s1llyw0rdz/web/handler/register.go
2021-11-24 07:30:19 +01:00

117 lines
2.3 KiB
Go

package handler
import (
"bytes"
"errors"
"html/template"
"log"
"net/http"
"status/model"
"status/web/handler/form"
)
func (h *Handler) handleRegister(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case "GET":
h.showRegisterView(w, r)
case "POST":
h.register(w, r)
}
}
func (h *Handler) showRegisterView(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case "GET":
h.renderLayout(w, "register", nil, "")
}
}
type keyStatus struct {
Success bool `json:"success"`
Uses int `json:"uses"`
}
//func verifyKey(key string) error {
// hc := http.Client{}
//
// f := url.Values{}
// f.Add("product_permalink", "YccHL")
// f.Add("license_key", key)
// req, err := http.NewRequest("POST", "https://api.gumroad.com/v2/licenses/verify", strings.NewReader(f.Encode()))
// if err != nil {
// return err
// }
// req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
//
// resp, err := hc.Do(req)
// if err != nil {
// return err
// }
//
// if resp.Body != nil {
// defer resp.Body.Close()
// }
//
// body, readErr := ioutil.ReadAll(resp.Body)
// if readErr != nil {
// return err
// }
//
// ks := keyStatus{}
// jsonErr := json.Unmarshal(body, &ks)
// if jsonErr != nil {
// return err
// }
//
// if ks.Success != true || ks.Uses > 1 {
// return errors.New("invalid license key")
// }
//
// return nil
//}
func buildIndex(t *template.Template, name string) []byte {
html := bytes.NewBufferString("")
err := t.Execute(html, name)
if err != nil {
log.Fatal(err)
}
return html.Bytes()
}
func (h *Handler) register(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case "POST":
f := form.NewRegisterForm(r)
showError := func(err error) {
f.Error = err.Error()
h.renderLayout(w, "register", map[string]interface{}{"form": *f}, "")
return
}
if err := f.Validate(); err != nil {
showError(err)
return
}
user := model.User{
Name: f.Username,
Password: f.Password,
}
if err := user.Validate(); err != nil {
showError(err)
return
}
if h.storage.UserExists(user.Name) {
showError(errors.New("username already exists"))
return
}
if err := h.storage.CreateUser(user); err != nil {
showError(err)
return
}
if err := h.sess.Save(r, w, r.FormValue("name")); err != nil {
serverError(w, err)
return
}
http.Redirect(w, r, "/", http.StatusFound)
}
}