diff --git a/server/main.go b/server/main.go index 4a1b9a1..abca6d4 100644 --- a/server/main.go +++ b/server/main.go @@ -13,12 +13,13 @@ import ( "github.com/creack/ehttp" // "github.com/auth0/go-jwt-middleware" "github.com/dgrijalva/jwt-go" + "github.com/asaskevich/govalidator" ) type User struct { - Name string - Pass string - Email string + Name string `valid:"alphanum,required"` + Pass string `valid:"required,runelength(8|999)"` + Email string `valid:"email"` } var users []User @@ -56,12 +57,39 @@ func getToken(w http.ResponseWriter, r *http.Request) error { return ehttp.NewErrorf(http.StatusForbidden, "Cannot find user or password") } +func register(w http.ResponseWriter, r *http.Request) error { + decoder := schema.NewDecoder() + err := r.ParseForm() + if err != nil { + return ehttp.NewErrorf(http.StatusInternalServerError, "could not parse form") + } + + var input User + err = decoder.Decode(&input, r.PostForm) + if err != nil { + return ehttp.NewErrorf(http.StatusInternalServerError, "could not decode user") + } + + res, err := govalidator.ValidateStruct(input) + if err != nil || res != true { + log.Println("user",input,"was invalid because", err) + return ehttp.NewErrorf(http.StatusBadRequest, "Could not validate your data") + } + + users = append(users, input) + log.Println("registered user", input) + + return nil +} + + func main() { users = []User{ {Name:"foo",Pass:"bar"}, {Name:"baz",Pass:"bla"}} r := mux.NewRouter() r.Handle("/getToken", ehttp.HandlerFunc(getToken)) + r.Handle("/register", ehttp.HandlerFunc(register)) http.Handle("/", r) http.ListenAndServe(":8000", nil)