From 5d3dc3348ef0aa533454078c84f708272aecc15d Mon Sep 17 00:00:00 2001 From: Ludovic Fernandez Date: Fri, 9 Jul 2021 14:22:13 +0200 Subject: [PATCH] accesslog: multiple times the same header name. --- pkg/middlewares/accesslog/logger.go | 3 ++- pkg/middlewares/accesslog/logger_test.go | 11 +++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/pkg/middlewares/accesslog/logger.go b/pkg/middlewares/accesslog/logger.go index b0e273a1f..db45aa3cf 100644 --- a/pkg/middlewares/accesslog/logger.go +++ b/pkg/middlewares/accesslog/logger.go @@ -10,6 +10,7 @@ import ( "net/url" "os" "path/filepath" + "strings" "sync" "sync/atomic" "time" @@ -344,7 +345,7 @@ func (h *Handler) redactHeaders(headers http.Header, fields logrus.Fields, prefi for k := range headers { v := h.config.Fields.KeepHeader(k) if v == types.AccessLogKeep { - fields[prefix+k] = headers.Get(k) + fields[prefix+k] = strings.Join(headers.Values(k), ",") } else if v == types.AccessLogRedact { fields[prefix+k] = "REDACTED" } diff --git a/pkg/middlewares/accesslog/logger_test.go b/pkg/middlewares/accesslog/logger_test.go index 3f37b8312..5d75e8aaa 100644 --- a/pkg/middlewares/accesslog/logger_test.go +++ b/pkg/middlewares/accesslog/logger_test.go @@ -114,7 +114,7 @@ func lineCount(t *testing.T, fileName string) int { } func TestLoggerHeaderFields(t *testing.T) { - expectedValue := "expectedValue" + expectedValues := []string{"AAA", "BBB"} testCases := []struct { desc string @@ -191,7 +191,10 @@ func TestLoggerHeaderFields(t *testing.T) { Path: testPath, }, } - req.Header.Set(test.header, expectedValue) + + for _, s := range expectedValues { + req.Header.Add(test.header, s) + } logger.ServeHTTP(httptest.NewRecorder(), req, http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) { writer.WriteHeader(http.StatusOK) @@ -201,9 +204,9 @@ func TestLoggerHeaderFields(t *testing.T) { require.NoError(t, err) if test.expected == types.AccessLogDrop { - assert.NotContains(t, string(logData), expectedValue) + assert.NotContains(t, string(logData), strings.Join(expectedValues, ",")) } else { - assert.Contains(t, string(logData), expectedValue) + assert.Contains(t, string(logData), strings.Join(expectedValues, ",")) } }) }