feat(middleware): add X-Forwarded-For middleware

close #73
This commit is contained in:
Nicolas Carlier 2022-12-30 08:26:06 +00:00
parent 3f96db8af5
commit dba7604a43
2 changed files with 28 additions and 0 deletions

View File

@ -9,6 +9,7 @@ import (
)
var commonMiddlewares = middleware.Middlewares{
middleware.XFF,
middleware.Cors,
middleware.Logger,
middleware.Tracing(nextRequestID),

27
pkg/middleware/xff.go Normal file
View File

@ -0,0 +1,27 @@
package middleware
import (
"net"
"net/http"
)
const xForwardedFor = "X-Forwarded-For"
func getIP(req *http.Request) string {
ip, _, err := net.SplitHostPort(req.RemoteAddr)
if err != nil {
return req.RemoteAddr
}
return ip
}
// XFF is a middleware to identifying the originating IP address using X-Forwarded-For header
func XFF(inner http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
xff := r.Header.Get(xForwardedFor)
if xff == "" {
r.Header.Set(xForwardedFor, getIP(r))
}
inner.ServeHTTP(w, r)
})
}