From 4a1cba40701a8685dc6acca9c01ea0e4e592a7dc Mon Sep 17 00:00:00 2001 From: Adrien Pensart Date: Mon, 4 Sep 2023 12:57:09 +0000 Subject: [PATCH 1/3] Add: request_body replace directive --- modules/caddyhttp/requestbody/caddyfile.go | 6 ++++++ modules/caddyhttp/requestbody/requestbody.go | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/modules/caddyhttp/requestbody/caddyfile.go b/modules/caddyhttp/requestbody/caddyfile.go index 8378ad7f471..7e4ee129eb3 100644 --- a/modules/caddyhttp/requestbody/caddyfile.go +++ b/modules/caddyhttp/requestbody/caddyfile.go @@ -68,6 +68,12 @@ func parseCaddyfile(h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, error) } rb.WriteTimeout = timeout + case "replace": + var replaceStr string + if !h.AllArgs(&replaceStr) { + return nil, h.ArgErr() + } + rb.Replace = replaceStr default: return nil, h.Errf("unrecognized request_body subdirective '%s'", h.Val()) } diff --git a/modules/caddyhttp/requestbody/requestbody.go b/modules/caddyhttp/requestbody/requestbody.go index d00455a8c97..79ea8c394bc 100644 --- a/modules/caddyhttp/requestbody/requestbody.go +++ b/modules/caddyhttp/requestbody/requestbody.go @@ -17,6 +17,7 @@ package requestbody import ( "io" "net/http" + "strings" "time" "go.uber.org/zap" @@ -41,6 +42,8 @@ type RequestBody struct { // EXPERIMENTAL. Subject to change/removal. WriteTimeout time.Duration `json:"write_timeout,omitempty"` + Replace string `json:"replace,omitempty"` + logger *zap.Logger } @@ -58,6 +61,14 @@ func (rb *RequestBody) Provision(ctx caddy.Context) error { } func (rb RequestBody) ServeHTTP(w http.ResponseWriter, r *http.Request, next caddyhttp.Handler) error { + if rb.Replace != "" { + err := r.Body.Close() + if err != nil { + return err + } + r.Body = io.NopCloser(strings.NewReader(rb.Replace)) + r.ContentLength = int64(len(rb.Replace)) + } if r.Body == nil { return next.ServeHTTP(w, r) } From 49f89a2f6ff24caacef7006643a3267842cc35d3 Mon Sep 17 00:00:00 2001 From: Adrien Pensart Date: Fri, 31 May 2024 10:29:54 -0400 Subject: [PATCH 2/3] Add: request_body replace directive with placeholders --- modules/caddyhttp/requestbody/requestbody.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/caddyhttp/requestbody/requestbody.go b/modules/caddyhttp/requestbody/requestbody.go index 79ea8c394bc..b70def331b6 100644 --- a/modules/caddyhttp/requestbody/requestbody.go +++ b/modules/caddyhttp/requestbody/requestbody.go @@ -66,7 +66,9 @@ func (rb RequestBody) ServeHTTP(w http.ResponseWriter, r *http.Request, next cad if err != nil { return err } - r.Body = io.NopCloser(strings.NewReader(rb.Replace)) + repl := r.Context().Value(caddy.ReplacerCtxKey).(*caddy.Replacer) + replacedBody := repl.ReplaceAll(rb.Replace, "") + r.Body = io.NopCloser(strings.NewReader(replacedBody)) r.ContentLength = int64(len(rb.Replace)) } if r.Body == nil { From 9aeba18adf655ad13de9a3d1c3a07545e89948cc Mon Sep 17 00:00:00 2001 From: Adrien Pensart Date: Sat, 5 Oct 2024 07:10:39 -0400 Subject: [PATCH 3/3] Add: rename directive to set_body --- modules/caddyhttp/requestbody/caddyfile.go | 10 +++++----- modules/caddyhttp/requestbody/requestbody.go | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/modules/caddyhttp/requestbody/caddyfile.go b/modules/caddyhttp/requestbody/caddyfile.go index 7e4ee129eb3..d032a205709 100644 --- a/modules/caddyhttp/requestbody/caddyfile.go +++ b/modules/caddyhttp/requestbody/caddyfile.go @@ -68,14 +68,14 @@ func parseCaddyfile(h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, error) } rb.WriteTimeout = timeout - case "replace": - var replaceStr string - if !h.AllArgs(&replaceStr) { + case "set": + var setStr string + if !h.AllArgs(&setStr) { return nil, h.ArgErr() } - rb.Replace = replaceStr + rb.Set = setStr default: - return nil, h.Errf("unrecognized request_body subdirective '%s'", h.Val()) + return nil, h.Errf("unrecognized set_body subdirective '%s'", h.Val()) } } diff --git a/modules/caddyhttp/requestbody/requestbody.go b/modules/caddyhttp/requestbody/requestbody.go index b70def331b6..a220637b135 100644 --- a/modules/caddyhttp/requestbody/requestbody.go +++ b/modules/caddyhttp/requestbody/requestbody.go @@ -42,7 +42,7 @@ type RequestBody struct { // EXPERIMENTAL. Subject to change/removal. WriteTimeout time.Duration `json:"write_timeout,omitempty"` - Replace string `json:"replace,omitempty"` + Set string `json:"set,omitempty"` logger *zap.Logger } @@ -61,15 +61,15 @@ func (rb *RequestBody) Provision(ctx caddy.Context) error { } func (rb RequestBody) ServeHTTP(w http.ResponseWriter, r *http.Request, next caddyhttp.Handler) error { - if rb.Replace != "" { + if rb.Set != "" { err := r.Body.Close() if err != nil { return err } repl := r.Context().Value(caddy.ReplacerCtxKey).(*caddy.Replacer) - replacedBody := repl.ReplaceAll(rb.Replace, "") + replacedBody := repl.ReplaceAll(rb.Set, "") r.Body = io.NopCloser(strings.NewReader(replacedBody)) - r.ContentLength = int64(len(rb.Replace)) + r.ContentLength = int64(len(rb.Set)) } if r.Body == nil { return next.ServeHTTP(w, r)