aboutsummaryrefslogtreecommitdiff
path: root/internal/headers.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/headers.go')
-rw-r--r--internal/headers.go15
1 files changed, 15 insertions, 0 deletions
diff --git a/internal/headers.go b/internal/headers.go
index 1de845d..681d076 100644
--- a/internal/headers.go
+++ b/internal/headers.go
@@ -5,6 +5,7 @@ import (
"net/http"
"github.com/TecharoHQ/anubis"
+ "github.com/sebest/xff"
)
// UnchangingCache sets the Cache-Control header to cache a response for 1 year if
@@ -33,3 +34,17 @@ func DefaultXRealIP(defaultIP string, next http.Handler) http.Handler {
next.ServeHTTP(w, r)
})
}
+
+// XForwardedForToXRealIP sets the X-Real-Ip header based on the contents
+// of the X-Forwarded-For header.
+func XForwardedForToXRealIP(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ if xffHeader := r.Header.Get("X-Forwarded-For"); r.Header.Get("X-Real-Ip") == "" && xffHeader != "" {
+ ip := xff.Parse(xffHeader)
+ slog.Debug("setting x-real-ip", "val", ip)
+ r.Header.Set("X-Real-Ip", ip)
+ }
+
+ next.ServeHTTP(w, r)
+ })
+}