Files

49 lines
798 B
Go

package audit
import (
"encoding/json"
"strings"
)
func SanitizeResponse(raw []byte, maskedCard string) []byte {
if len(raw) == 0 {
return nil
}
var value any
if err := json.Unmarshal(raw, &value); err != nil {
return nil
}
if maskedCard == "" {
maskedCard = "[redacted]"
}
redactCardFields(value, maskedCard)
sanitized, err := json.Marshal(value)
if err != nil {
return nil
}
return sanitized
}
func redactCardFields(value any, maskedCard string) {
switch current := value.(type) {
case map[string]any:
for key, child := range current {
if strings.EqualFold(key, "card") {
current[key] = maskedCard
continue
}
redactCardFields(child, maskedCard)
}
case []any:
for _, child := range current {
redactCardFields(child, maskedCard)
}
}
}