@@ -31,6 +31,8 @@ import (
3131 "github.com/caddyserver/certmagic"
3232 "github.com/prometheus/client_golang/prometheus"
3333 dto "github.com/prometheus/client_model/go"
34+ "go.uber.org/zap"
35+ "go.uber.org/zap/zaptest/observer"
3436)
3537
3638var testCfg = []byte (`{
@@ -242,6 +244,51 @@ func TestAdminHandlerErrorHandling(t *testing.T) {
242244 }
243245}
244246
247+ func TestAdminHandlerServeHTTPRedactsSensitiveHeadersInLogs (t * testing.T ) {
248+ core , logs := observer .New (zap .InfoLevel )
249+
250+ defaultLoggerMu .Lock ()
251+ origLogger := defaultLogger .logger
252+ defaultLogger .logger = zap .New (core )
253+ defaultLoggerMu .Unlock ()
254+ t .Cleanup (func () {
255+ defaultLoggerMu .Lock ()
256+ defaultLogger .logger = origLogger
257+ defaultLoggerMu .Unlock ()
258+ })
259+
260+ handler := adminHandler {
261+ mux : http .NewServeMux (),
262+ }
263+ req := httptest .NewRequest (http .MethodGet , "/" , nil )
264+ req .Header .Set ("Authorization" , "Bearer secret" )
265+ req .Header .Set ("Cookie" , "session=secret" )
266+ req .Header .Set ("X-Test" , "ok" )
267+ rr := httptest .NewRecorder ()
268+
269+ handler .ServeHTTP (rr , req )
270+
271+ if logs .Len () == 0 {
272+ t .Fatal ("expected request log entry" )
273+ }
274+
275+ ctx := logs .All ()[0 ].ContextMap ()
276+ headers , ok := ctx ["headers" ].(map [string ]any )
277+ if ! ok {
278+ t .Fatalf ("expected headers field in log context, got %T" , ctx ["headers" ])
279+ }
280+
281+ if got := headers ["Authorization" ]; ! reflect .DeepEqual (got , []any {"REDACTED" }) {
282+ t .Fatalf ("expected redacted Authorization header, got %#v" , got )
283+ }
284+ if got := headers ["Cookie" ]; ! reflect .DeepEqual (got , []any {"REDACTED" }) {
285+ t .Fatalf ("expected redacted Cookie header, got %#v" , got )
286+ }
287+ if got := headers ["X-Test" ]; ! reflect .DeepEqual (got , []any {"ok" }) {
288+ t .Fatalf ("expected X-Test header to remain visible, got %#v" , got )
289+ }
290+ }
291+
245292func initAdminMetrics () {
246293 if adminMetrics .requestErrors != nil {
247294 prometheus .Unregister (adminMetrics .requestErrors )
0 commit comments