File: context.go

package info (click to toggle)
golang-github-cue-lang-cue 0.12.0.-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 19,072 kB
  • sloc: sh: 57; makefile: 17
file content (48 lines) | stat: -rw-r--r-- 1,521 bytes parent folder | download
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)
}