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