From a9420a2a4f3221d1771e7f28786ccdd80ceed88d Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Tue, 13 Feb 2024 18:33:05 +0100 Subject: Replace chi by http/net ServeMux --- main.go | 61 +++++++++++++++++++++++++++++++------------------------------ 1 file changed, 31 insertions(+), 30 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 10ec34a..cef556e 100644 --- a/main.go +++ b/main.go @@ -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) } -- cgit v1.2.3-70-g09d2