mirror of
https://github.com/fosrl/badger.git
synced 2026-10-20 19:49:09 +02:00
optionally stamp ip header
This commit is contained in:
@@ -24,6 +24,7 @@ type Config struct {
|
|||||||
TrustIP []string `json:"trustip,omitempty"`
|
TrustIP []string `json:"trustip,omitempty"`
|
||||||
DisableDefaultCFIPs bool `json:"disableDefaultCFIPs,omitempty"`
|
DisableDefaultCFIPs bool `json:"disableDefaultCFIPs,omitempty"`
|
||||||
CustomIPHeader string `json:"customIPHeader,omitempty"`
|
CustomIPHeader string `json:"customIPHeader,omitempty"`
|
||||||
|
RealIPHeader string `json:"realIpHeader,omitempty"`
|
||||||
RemoteUserIDHeader string `json:"remoteUserIdHeader,omitempty"`
|
RemoteUserIDHeader string `json:"remoteUserIdHeader,omitempty"`
|
||||||
RemoteVirtualApiKeyIDHeader string `json:"remoteVirtualApiKeyIdHeader,omitempty"`
|
RemoteVirtualApiKeyIDHeader string `json:"remoteVirtualApiKeyIdHeader,omitempty"`
|
||||||
RemoteUserHeader string `json:"remoteUserHeader,omitempty"`
|
RemoteUserHeader string `json:"remoteUserHeader,omitempty"`
|
||||||
@@ -59,6 +60,7 @@ type Badger struct {
|
|||||||
disableForwardAuth bool
|
disableForwardAuth bool
|
||||||
trustIP []*net.IPNet
|
trustIP []*net.IPNet
|
||||||
customIPHeader string
|
customIPHeader string
|
||||||
|
realIPHeader string
|
||||||
remoteUserIDHeader string
|
remoteUserIDHeader string
|
||||||
remoteVirtualApiKeyIDHeader string
|
remoteVirtualApiKeyIDHeader string
|
||||||
remoteUserHeader string
|
remoteUserHeader string
|
||||||
@@ -142,6 +144,7 @@ func New(ctx context.Context, next http.Handler, config *Config, name string) (h
|
|||||||
accessTokenHeader: config.AccessTokenHeader,
|
accessTokenHeader: config.AccessTokenHeader,
|
||||||
disableForwardAuth: config.DisableForwardAuth,
|
disableForwardAuth: config.DisableForwardAuth,
|
||||||
customIPHeader: config.CustomIPHeader,
|
customIPHeader: config.CustomIPHeader,
|
||||||
|
realIPHeader: config.RealIPHeader,
|
||||||
remoteUserIDHeader: stringOrDefault(config.RemoteUserIDHeader, defaultRemoteUserIDHeader),
|
remoteUserIDHeader: stringOrDefault(config.RemoteUserIDHeader, defaultRemoteUserIDHeader),
|
||||||
remoteVirtualApiKeyIDHeader: stringOrDefault(config.RemoteVirtualApiKeyIDHeader, defaultRemoteVirtualApiKeyIDHeader),
|
remoteVirtualApiKeyIDHeader: stringOrDefault(config.RemoteVirtualApiKeyIDHeader, defaultRemoteVirtualApiKeyIDHeader),
|
||||||
remoteUserHeader: stringOrDefault(config.RemoteUserHeader, defaultRemoteUserHeader),
|
remoteUserHeader: stringOrDefault(config.RemoteUserHeader, defaultRemoteUserHeader),
|
||||||
@@ -609,4 +612,15 @@ func (p *Badger) setIPHeaders(req *http.Request, realIP string) {
|
|||||||
req.Header.Del(cfVisitor)
|
req.Header.Del(cfVisitor)
|
||||||
req.Header.Del(cfConnectingIP)
|
req.Header.Del(cfConnectingIP)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// realIPHeader is a non-standard header name (opt-in via config), set
|
||||||
|
// unconditionally on every request regardless of trust. It exists for
|
||||||
|
// deployments with another proxy between Badger and the backend that
|
||||||
|
// unconditionally overwrites X-Forwarded-For/X-Real-Ip instead of
|
||||||
|
// appending to them - a proxy like that has no reason to touch a header
|
||||||
|
// name it doesn't recognize, so this survives where the standard ones
|
||||||
|
// don't.
|
||||||
|
if p.realIPHeader != "" {
|
||||||
|
req.Header.Set(p.realIPHeader, realIP)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user