diff options
author | René 'Necoro' Neumann <necoro@necoro.eu> | 2024-02-13 18:33:05 +0100 |
---|---|---|
committer | René 'Necoro' Neumann <necoro@necoro.eu> | 2024-02-13 18:33:05 +0100 |
commit | a9420a2a4f3221d1771e7f28786ccdd80ceed88d (patch) | |
tree | eeff221124f2843922fa2f052084e81c39633ec5 /main.go | |
parent | f42f426667c69d8a902ca803b77db9830f3e5a45 (diff) | |
download | gosten-a9420a2a4f3221d1771e7f28786ccdd80ceed88d.tar.gz gosten-a9420a2a4f3221d1771e7f28786ccdd80ceed88d.tar.bz2 gosten-a9420a2a4f3221d1771e7f28786ccdd80ceed88d.zip |
Replace chi by http/net ServeMux
Diffstat (limited to 'main.go')
-rw-r--r-- | main.go | 61 |
1 files changed, 31 insertions, 30 deletions
@@ -6,15 +6,14 @@ import ( "log" "net" "net/http" + "os" "strconv" + "github.com/gorilla/handlers" "github.com/gorilla/schema" "gosten/model" "gosten/templ" - - "github.com/go-chi/chi/v5" - "github.com/go-chi/chi/v5/middleware" ) // flags @@ -42,38 +41,40 @@ func main() { Q = model.New(db) s = schema.NewDecoder() - r := chi.NewRouter() + mux := http.NewServeMux() + + mux.HandleFunc("/{$}", showTemplate("index", nil)) + mux.HandleFunc("GET /login", showTemplate("login", User{})) + mux.HandleFunc("POST /login", handleLogin) - // A good base middleware stack - r.Use(middleware.RequestID) - r.Use(middleware.RealIP) - r.Use(middleware.CleanPath) - r.Use(middleware.Logger) - r.Use(middleware.Recoverer) + handler := handlers.CombinedLoggingHandler(os.Stderr, mux) + handler = handlers.ProxyHeaders(handler) - r.Get("/", func(w http.ResponseWriter, _ *http.Request) { - templ.Lookup("index").Execute(w, nil) - }) + address := net.JoinHostPort(host, strconv.FormatUint(port, 10)) + log.Fatal(http.ListenAndServe(address, handler)) +} - r.Route("/login", func(r chi.Router) { +type User struct { + Name string `form:"options=required"` + Password string `form:"type=password;options=required"` +} - type User struct { - Name string `form:"options=required"` - Password string `form:"type=password;options=required"` +func showTemplate(tpl string, data any) http.HandlerFunc { + return func(w http.ResponseWriter, _ *http.Request) { + if err := templ.Lookup(tpl).Execute(w, data); err != nil { + log.Panicf("Executing '%s' with %+v: %v", tpl, data, err) } + } +} - r.Get("/", func(w http.ResponseWriter, _ *http.Request) { - templ.Lookup("login").Execute(w, User{}) - }) - - r.Post("/", func(w http.ResponseWriter, r *http.Request) { - u := User{} - r.ParseForm() - s.Decode(&u, r.PostForm) - templ.Lookup("login2").Execute(w, u) - }) - }) +func handleLogin(w http.ResponseWriter, r *http.Request) { + u := User{} + if err := r.ParseForm(); err != nil { + log.Panic("Parsing form: ", err) + } + if err := s.Decode(&u, r.PostForm); err != nil { + log.Panic("Decoding form: ", err) + } - address := net.JoinHostPort(host, strconv.FormatUint(port, 10)) - log.Fatal(http.ListenAndServe(address, r)) + showTemplate("login2", u).ServeHTTP(w, r) } |