accesslog: multiple times the same header name.

This commit is contained in:
Ludovic Fernandez 2021-07-09 14:22:13 +02:00 committed by GitHub
parent 6d8512bda0
commit 5d3dc3348e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 5 deletions

View file

@ -10,6 +10,7 @@ import (
"net/url" "net/url"
"os" "os"
"path/filepath" "path/filepath"
"strings"
"sync" "sync"
"sync/atomic" "sync/atomic"
"time" "time"
@ -344,7 +345,7 @@ func (h *Handler) redactHeaders(headers http.Header, fields logrus.Fields, prefi
for k := range headers { for k := range headers {
v := h.config.Fields.KeepHeader(k) v := h.config.Fields.KeepHeader(k)
if v == types.AccessLogKeep { if v == types.AccessLogKeep {
fields[prefix+k] = headers.Get(k) fields[prefix+k] = strings.Join(headers.Values(k), ",")
} else if v == types.AccessLogRedact { } else if v == types.AccessLogRedact {
fields[prefix+k] = "REDACTED" fields[prefix+k] = "REDACTED"
} }

View file

@ -114,7 +114,7 @@ func lineCount(t *testing.T, fileName string) int {
} }
func TestLoggerHeaderFields(t *testing.T) { func TestLoggerHeaderFields(t *testing.T) {
expectedValue := "expectedValue" expectedValues := []string{"AAA", "BBB"}
testCases := []struct { testCases := []struct {
desc string desc string
@ -191,7 +191,10 @@ func TestLoggerHeaderFields(t *testing.T) {
Path: testPath, 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) { logger.ServeHTTP(httptest.NewRecorder(), req, http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) {
writer.WriteHeader(http.StatusOK) writer.WriteHeader(http.StatusOK)
@ -201,9 +204,9 @@ func TestLoggerHeaderFields(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
if test.expected == types.AccessLogDrop { if test.expected == types.AccessLogDrop {
assert.NotContains(t, string(logData), expectedValue) assert.NotContains(t, string(logData), strings.Join(expectedValues, ","))
} else { } else {
assert.Contains(t, string(logData), expectedValue) assert.Contains(t, string(logData), strings.Join(expectedValues, ","))
} }
}) })
} }