From fe61209df2d8ecbff7371703ae2dfa58342d2ed9 Mon Sep 17 00:00:00 2001 From: Francis Lavoie Date: Mon, 8 Aug 2022 21:11:02 -0400 Subject: logging: Fix `cookie` filter (#4943) --- modules/logging/filters.go | 11 +++++++++-- modules/logging/filters_test.go | 11 +++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/modules/logging/filters.go b/modules/logging/filters.go index aa96e5e..c2c039a 100644 --- a/modules/logging/filters.go +++ b/modules/logging/filters.go @@ -26,6 +26,7 @@ import ( "github.com/caddyserver/caddy/v2" "github.com/caddyserver/caddy/v2/caddyconfig/caddyfile" + "github.com/caddyserver/caddy/v2/modules/caddyhttp" "go.uber.org/zap/zapcore" ) @@ -456,7 +457,13 @@ func (m *CookieFilter) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { // Filter filters the input field. func (m CookieFilter) Filter(in zapcore.Field) zapcore.Field { - originRequest := http.Request{Header: http.Header{"Cookie": []string{in.String}}} + cookiesSlice, ok := in.Interface.(caddyhttp.LoggableStringArray) + if !ok { + return in + } + + // using a dummy Request to make use of the Cookies() function to parse it + originRequest := http.Request{Header: http.Header{"Cookie": cookiesSlice}} cookies := originRequest.Cookies() transformedRequest := http.Request{Header: make(http.Header)} @@ -486,7 +493,7 @@ OUTER: transformedRequest.AddCookie(c) } - in.String = transformedRequest.Header.Get("Cookie") + in.Interface = caddyhttp.LoggableStringArray(transformedRequest.Header["Cookie"]) return in } diff --git a/modules/logging/filters_test.go b/modules/logging/filters_test.go index ecf1d87..2b087f2 100644 --- a/modules/logging/filters_test.go +++ b/modules/logging/filters_test.go @@ -4,6 +4,7 @@ import ( "testing" "github.com/caddyserver/caddy/v2" + "github.com/caddyserver/caddy/v2/modules/caddyhttp" "go.uber.org/zap/zapcore" ) @@ -49,8 +50,14 @@ func TestCookieFilter(t *testing.T) { {hashAction, "hash", ""}, }} - out := f.Filter(zapcore.Field{String: "foo=a; foo=b; bar=c; bar=d; baz=e; hash=hashed"}) - if out.String != "foo=REDACTED; foo=REDACTED; baz=e; hash=1a06df82" { + out := f.Filter(zapcore.Field{Interface: caddyhttp.LoggableStringArray{ + "foo=a; foo=b; bar=c; bar=d; baz=e; hash=hashed", + }}) + outval := out.Interface.(caddyhttp.LoggableStringArray) + expected := caddyhttp.LoggableStringArray{ + "foo=REDACTED; foo=REDACTED; baz=e; hash=1a06df82", + } + if outval[0] != expected[0] { t.Fatalf("cookies have not been filtered: %s", out.String) } } -- cgit v1.2.3