From 0bf2046da7f2f5bf1b7d9fa055ae28de9a06ddaf Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Mon, 11 Jan 2021 13:35:12 -0700 Subject: [PATCH] requestbody: Allow overwriting remote address An experimental feature, let's see if it's useful. --- modules/caddyhttp/requestbody/requestbody.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/modules/caddyhttp/requestbody/requestbody.go b/modules/caddyhttp/requestbody/requestbody.go index 76cd27433..35aa1af1a 100644 --- a/modules/caddyhttp/requestbody/requestbody.go +++ b/modules/caddyhttp/requestbody/requestbody.go @@ -29,6 +29,11 @@ func init() { type RequestBody struct { // The maximum number of bytes to allow reading from the body by a later handler. MaxSize int64 `json:"max_size,omitempty"` + + // Overwrites the remote address from which the request came. This is destructive; + // handlers later in the chain will not be able to recover the true originating + // address of the request. EXPERIMENTAL: May get changed or removed later. + RemoteAddress string `json:"remote_address,omitempty"` } // CaddyModule returns the Caddy module information. @@ -40,6 +45,10 @@ func (RequestBody) CaddyModule() caddy.ModuleInfo { } func (rb RequestBody) ServeHTTP(w http.ResponseWriter, r *http.Request, next caddyhttp.Handler) error { + if rb.RemoteAddress != "" { + repl := r.Context().Value(caddy.ReplacerCtxKey).(*caddy.Replacer) + r.RemoteAddr = repl.ReplaceAll(rb.RemoteAddress, "") + } if r.Body == nil { return next.ServeHTTP(w, r) }