summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorRené 'Necoro' Neumann <necoro@necoro.eu>2024-02-13 18:33:05 +0100
committerRené 'Necoro' Neumann <necoro@necoro.eu>2024-02-13 18:33:05 +0100
commita9420a2a4f3221d1771e7f28786ccdd80ceed88d (patch)
treeeeff221124f2843922fa2f052084e81c39633ec5 /main.go
parentf42f426667c69d8a902ca803b77db9830f3e5a45 (diff)
downloadgosten-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.go61
1 files changed, 31 insertions, 30 deletions
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)
}