errortracking/capture_request.go (38 lines of code) (raw):
package errortracking
import (
"net/http"
"github.com/getsentry/sentry-go"
"gitlab.com/gitlab-org/labkit/mask"
)
// WithRequest will capture details of the request along with the error.
func WithRequest(r *http.Request) CaptureOption {
return func(config *captureConfig, event *sentry.Event) {
event.Request = redactRequestInfo(r)
event.Request.URL = r.URL.String()
event.Request.Headers["host"] = r.URL.Hostname()
event.Request.Method = r.Method
}
}
// redactRequestInfo strips out information that shouldn't be send by the client.
func redactRequestInfo(r *http.Request) *sentry.Request {
if r == nil {
return &sentry.Request{}
}
req := &sentry.Request{
Headers: make(map[string]string),
}
for header, v := range r.Header {
req.Headers[header] = v[0]
if mask.IsSensitiveHeader(header) {
req.Headers[header] = mask.RedactionString
}
}
params := r.URL.Query()
for paramName := range params {
if mask.IsSensitiveParam(paramName) {
for i := range params[paramName] {
params[paramName][i] = mask.RedactionString
}
}
}
req.QueryString = params.Encode()
return req
}