forked from elastic/apm-agent-go
/
sanitizer.go
44 lines (40 loc) · 903 Bytes
/
sanitizer.go
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
package elasticapm
import (
"bytes"
"regexp"
"github.com/elastic/apm-agent-go/model"
)
const redacted = "[REDACTED]"
// sanitizeRequest sanitizes HTTP request data, redacting
// the values of cookies and forms whose corresponding keys
// match the given regular expression.
func sanitizeRequest(r *model.Request, re *regexp.Regexp) {
var anyCookiesRedacted bool
for _, c := range r.Cookies {
if !re.MatchString(c.Name) {
continue
}
c.Value = redacted
anyCookiesRedacted = true
}
if anyCookiesRedacted && r.Headers != nil {
var b bytes.Buffer
for i, c := range r.Cookies {
if i != 0 {
b.WriteRune(';')
}
b.WriteString(c.String())
}
r.Headers.Cookie = b.String()
}
if r.Body != nil && r.Body.Form != nil {
for key, values := range r.Body.Form {
if !re.MatchString(key) {
continue
}
for i := range values {
values[i] = redacted
}
}
}
}