diff options
| author | Raúl Benencia <id@rbenencia.name> | 2026-06-04 18:25:07 -0300 |
|---|---|---|
| committer | Raul Benencia <46945030+raul-te@users.noreply.github.com> | 2026-06-05 12:44:26 -0300 |
| commit | ae03697698c241d9cee0823ac2d6b8325725f303 (patch) | |
| tree | b85c864e1645230ba29796d941ab54ad6733b0a6 | |
| parent | a9f0622ed9750593ca6de12a27bb3a92c4e419e4 (diff) | |
Inline middleware chain
| -rw-r--r-- | internal/handlers/middleware.go | 20 | ||||
| -rw-r--r-- | main.go | 2 |
2 files changed, 15 insertions, 7 deletions
diff --git a/internal/handlers/middleware.go b/internal/handlers/middleware.go index 7ad00a0..5270a1f 100644 --- a/internal/handlers/middleware.go +++ b/internal/handlers/middleware.go @@ -16,7 +16,6 @@ package handlers import ( "context" - "github.com/justinas/alice" "net/http" "regexp" @@ -90,9 +89,11 @@ func disableCacheMiddleware(h http.Handler) http.Handler { }) } -// MiddlewareChain receives a Shoelaces environment and returns a chains of -// middlewares to apply to every request. -func MiddlewareChain(env *environment.Environment) alice.Chain { +type middleware func(http.Handler) http.Handler + +// MiddlewareChain receives a Shoelaces environment and returns a handler with +// all global middlewares applied. +func MiddlewareChain(env *environment.Environment, h http.Handler) http.Handler { // contextMiddleware sets the environment key in the request Context. contextMiddleware := func(h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { @@ -101,10 +102,17 @@ func MiddlewareChain(env *environment.Environment) alice.Chain { }) } - return alice.New( + middlewares := []middleware{ secureHeadersMiddleware, disableCacheMiddleware, environmentMiddleware, contextMiddleware, - loggingMiddleware) + loggingMiddleware, + } + + for i := len(middlewares) - 1; i >= 0; i-- { + h = middlewares[i](h) + } + + return h } @@ -25,7 +25,7 @@ import ( func main() { env := environment.New() - app := handlers.MiddlewareChain(env).Then(router.ShoelacesRouter(env)) + app := handlers.MiddlewareChain(env, router.ShoelacesRouter(env)) env.Logger.Info("listening", "component", "main", "transport", "http", "addr", env.BindAddr) env.Logger.Error("server exited", "component", "main", "err", http.ListenAndServe(env.BindAddr, app)) |
