1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
package httplog
import "context"
type (
allowedURLQueryParamsKey struct{}
redactResponseBodyKey struct{}
redactRequestBodyKey struct{}
)
// ContextWithAllowedURLQueryParams returns a context that will allow only the URL
// query parameters for which the given allow function returns true. All others will
// be redacted from the logs.
func ContextWithAllowedURLQueryParams(ctx context.Context, allow func(key string) bool) context.Context {
return context.WithValue(ctx, allowedURLQueryParamsKey{}, allow)
}
func queryParamChecker(ctx context.Context) func(string) bool {
f, ok := ctx.Value(allowedURLQueryParamsKey{}).(func(string) bool)
if ok {
return f
}
return func(string) bool {
return false
}
}
// RedactResponseBody returns a context that will cause
// [Transport] to redact the response body when logging HTTP responses.
// If reason is empty, the body will not be redacted.
func RedactResponseBody(ctx context.Context, reason string) context.Context {
return context.WithValue(ctx, redactResponseBodyKey{}, reason)
}
func shouldRedactBody(ctx context.Context, isRequest bool) string {
key := any(redactResponseBodyKey{})
if isRequest {
key = redactRequestBodyKey{}
}
s, _ := ctx.Value(key).(string)
return s
}
// RedactRequestBody returns a context that will cause
// the logger to redact the request body when logging HTTP requests.
func RedactRequestBody(ctx context.Context, reason string) context.Context {
return context.WithValue(ctx, redactRequestBodyKey{}, reason)
}
|