From ae03697698c241d9cee0823ac2d6b8325725f303 Mon Sep 17 00:00:00 2001 From: Raúl Benencia Date: Thu, 4 Jun 2026 18:25:07 -0300 Subject: Inline middleware chain --- internal/handlers/middleware.go | 20 ++++++++++++++------ 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 } diff --git a/main.go b/main.go index 040ba32..3b8cd15 100644 --- a/main.go +++ b/main.go @@ -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)) -- cgit v1.2.3