diff options
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/headers.go | 15 |
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) + }) +} |
