|
|
|
@ -13,12 +13,13 @@ import (
|
|
|
|
"github.com/creack/ehttp"
|
|
|
|
"github.com/creack/ehttp"
|
|
|
|
// "github.com/auth0/go-jwt-middleware"
|
|
|
|
// "github.com/auth0/go-jwt-middleware"
|
|
|
|
"github.com/dgrijalva/jwt-go"
|
|
|
|
"github.com/dgrijalva/jwt-go"
|
|
|
|
|
|
|
|
"github.com/asaskevich/govalidator"
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
type User struct {
|
|
|
|
type User struct {
|
|
|
|
Name string
|
|
|
|
Name string `valid:"alphanum,required"`
|
|
|
|
Pass string
|
|
|
|
Pass string `valid:"required,runelength(8|999)"`
|
|
|
|
Email string
|
|
|
|
Email string `valid:"email"`
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var users []User
|
|
|
|
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")
|
|
|
|
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() {
|
|
|
|
func main() {
|
|
|
|
users = []User{ {Name:"foo",Pass:"bar"}, {Name:"baz",Pass:"bla"}}
|
|
|
|
users = []User{ {Name:"foo",Pass:"bar"}, {Name:"baz",Pass:"bla"}}
|
|
|
|
|
|
|
|
|
|
|
|
r := mux.NewRouter()
|
|
|
|
r := mux.NewRouter()
|
|
|
|
r.Handle("/getToken", ehttp.HandlerFunc(getToken))
|
|
|
|
r.Handle("/getToken", ehttp.HandlerFunc(getToken))
|
|
|
|
|
|
|
|
r.Handle("/register", ehttp.HandlerFunc(register))
|
|
|
|
|
|
|
|
|
|
|
|
http.Handle("/", r)
|
|
|
|
http.Handle("/", r)
|
|
|
|
http.ListenAndServe(":8000", nil)
|
|
|
|
http.ListenAndServe(":8000", nil)
|
|
|
|
|