package user import ( "log" "net/http" "github.com/go-playground/validator/v10" "gitlab.com/alexkavon/newsstand/src/server" "gitlab.com/alexkavon/newsstand/src/sessions" ) var Routes = server.Routes{ server.Route{ Name: "Create", Method: "GET", Path: "/u/create", HandlerFunc: Create, Middlewares: server.NewMiddlewares(sessions.GuestSession), }, server.Route{ Name: "Store", Method: "POST", Path: "/user", HandlerFunc: Store, }, server.Route{ Name: "LoginForm", Method: "GET", Path: "/u/login", HandlerFunc: LoginForm, }, server.Route{ Name: "Authenticate", Method: "POST", Path: "/u/auth", HandlerFunc: Authenticate, }, server.Route{ Name: "Me", Method: "GET", Path: "/u/me", AuthRequired: true, HandlerFunc: Show, Middlewares: server.NewMiddlewares(sessions.AuthSession), }, } func Create(s *server.Server) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { s.Ui.Render(w, "user/create", nil) } } func Store(s *server.Server) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { r.ParseForm() user := &User{ Db: s.Db, Username: r.PostFormValue("username"), Secret: r.PostFormValue("secret"), Email: r.PostFormValue("email"), } // Validate User Input v := validator.New() err := v.Struct(user) if err != nil { log.Println("Validator failed", err.(validator.ValidationErrors)) } // Hash secret err = user.HashSecret() if err != nil { log.Println("Hash failure", err) } // Store user err = user.Insert() if err != nil { log.Println("Insert Error", err) } // Send email validation // Create cookie session sessions.NewSession(w, map[string]interface{}{"uid": user.Id, "username": user.Username}) // Redirect to user profile http.Redirect(w, r, "/u/me", http.StatusSeeOther) } } func LoginForm(s *server.Server) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { s.Ui.Render(w, "user/login", nil) } } func Authenticate(s *server.Server) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) {} } func Show(s *server.Server) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { s.Ui.Render(w, "user/me", &struct{ Message, Username string }{"Congrats on getting this far!", session.Username()}) } }