Files
guz.one/router.go

36 lines
1016 B
Go

package main
import (
"log/slog"
"net/http"
"code.capytal.cc/loreddev/smalltrip"
"code.capytal.cc/loreddev/smalltrip/middleware"
"code.capytal.cc/loreddev/smalltrip/multiplexer"
"code.capytal.cc/loreddev/smalltrip/problem"
"code.capytal.cc/loreddev/x/xtemplate"
)
func newRouter(assets http.Handler, templates xtemplate.Templater, logger *slog.Logger) http.Handler {
mux := multiplexer.New()
mux = multiplexer.WithPatternRules(mux,
multiplexer.EnsureMethod(),
multiplexer.EnsureStrictEnd(),
multiplexer.EnsureTrailingSlash(),
)
router := smalltrip.NewRouter(smalltrip.WithMultiplexer(mux), smalltrip.WithLogger(logger))
router.Use(problem.Middleware(problem.DefaultHandler))
router.Use(middleware.Logger(logger))
router.Handle("GET /assets/{file...}", assets)
router.HandleFunc("GET /{$}", func(w http.ResponseWriter, r *http.Request) {
if err := templates.ExecuteTemplate(w, "landing", nil); err != nil {
problem.NewInternalServerError(err).ServeHTTP(w, r)
}
})
return router
}