diff --git a/internal/middleware/redirect.go b/internal/middleware/redirect.go new file mode 100644 index 0000000..1b1a2f6 --- /dev/null +++ b/internal/middleware/redirect.go @@ -0,0 +1,32 @@ +package middleware + +import ( + "net/http" + "net/url" +) + +type RedirectConfig struct { + Skipper Skipper + URL *url.URL + Code int +} + +func Redirect(config RedirectConfig) Interceptor { + if config.Skipper == nil { + config.Skipper = DefaultSkipper + } + + if config.Code == 0 { + config.Code = http.StatusMovedPermanently + } + + return func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) { + if config.Skipper(r) { + next(w, r) + + return + } + + http.RedirectHandler(config.URL.String(), config.Code).ServeHTTP(w, r) + } +}