36 lines
1016 B
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
|
|
}
|