117 lines
2.3 KiB
Go
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)
|
|
}
|
|
}
|