package gitcode
import (
"bytes"
"net/http"
"strings"
"gitcode-mcp/internal/diagnostics"
)
func NewRedactedCapture(rawURL string, headers http.Header, body []byte, err error, approvedHosts []string, sensitiveTerms ...string) RedactedCapture {
capture := RedactedCapture{URL: RedactURL(rawURL, approvedHosts, sensitiveTerms...), Headers: RedactHeaders(headers, sensitiveTerms...), Body: RedactJSONBody(body, sensitiveTerms...)}
if err != nil {
capture.Error = RedactText(err.Error(), sensitiveTerms...)
}
return capture
}
func RedactHeaders(headers http.Header, sensitiveTerms ...string) map[string][]string {
return diagnostics.RedactHeaders(headers, sensitiveTerms...)
}
func RedactURL(raw string, approvedHosts []string, sensitiveTerms ...string) string {
return diagnostics.RedactURL(raw, approvedHosts, sensitiveTerms...)
}
func RedactJSONBody(body []byte, sensitiveTerms ...string) []byte {
return diagnostics.RedactJSONBody(body, sensitiveTerms...)
}
func RedactText(text string, sensitiveTerms ...string) string {
return diagnostics.RedactText(text, sensitiveTerms...)
}
func CaptureIsSanitized(c RedactedCapture, forbidden ...string) bool {
var buf bytes.Buffer
buf.WriteString(c.URL)
buf.Write(c.Body)
buf.WriteString(c.Error)
for key, values := range c.Headers {
buf.WriteString(key)
for _, value := range values {
buf.WriteString(value)
}
}
text := buf.String()
for _, token := range forbidden {
if token != "" && strings.Contains(text, token) {
return false
}
}
return true
}