aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--internal/handlers/middleware.go20
-rw-r--r--main.go2
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))
nihil fit ex nihilo