mirror of
https://github.com/vmware-tanzu/pinniped.git
synced 2026-01-07 14:05:50 +00:00
39 lines
1.0 KiB
Go
39 lines
1.0 KiB
Go
// Copyright 2024 the Pinniped contributors. All Rights Reserved.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package auditid
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/google/uuid"
|
|
"k8s.io/apimachinery/pkg/types"
|
|
apiserveraudit "k8s.io/apiserver/pkg/apis/audit"
|
|
"k8s.io/apiserver/pkg/audit"
|
|
)
|
|
|
|
// NewRequestWithAuditID is public for use in unit tests. Production code should use WithAuditID().
|
|
func NewRequestWithAuditID(r *http.Request, newAuditIDFunc func() string) (*http.Request, string) {
|
|
ctx := audit.WithAuditContext(r.Context())
|
|
r = r.WithContext(ctx)
|
|
|
|
auditID := newAuditIDFunc()
|
|
audit.WithAuditID(ctx, types.UID(auditID))
|
|
|
|
return r, auditID
|
|
}
|
|
|
|
func WithAuditID(handler http.Handler) http.Handler {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
// Add a randomly generated request ID to the context for this request.
|
|
r, auditID := NewRequestWithAuditID(r, func() string {
|
|
return uuid.New().String()
|
|
})
|
|
|
|
// Send the Audit-ID response header.
|
|
w.Header().Set(apiserveraudit.HeaderAuditID, auditID)
|
|
|
|
handler.ServeHTTP(w, r)
|
|
})
|
|
}
|