44 lines
1.7 KiB
Go
44 lines
1.7 KiB
Go
package utils
|
|
|
|
import (
|
|
"regexp"
|
|
"strings"
|
|
)
|
|
|
|
// SafetySanitizer replaces specific agency/enforcement terms with neutral
|
|
// alternatives for App Store compliance and community safety.
|
|
// Zero Specificity: never use specific agency names.
|
|
var replacements = []struct {
|
|
pattern *regexp.Regexp
|
|
replacement string
|
|
}{
|
|
{regexp.MustCompile(`(?i)\b(ICE)\b`), "Official Presence"},
|
|
{regexp.MustCompile(`(?i)\b(immigration\s*(and\s*)?customs?\s*enforcement)\b`), "Official Presence"},
|
|
{regexp.MustCompile(`(?i)\b(border\s*patrol)\b`), "Official Presence"},
|
|
{regexp.MustCompile(`(?i)\b(CBP|DEA|ATF|FBI)\b`), "Official Presence"},
|
|
{regexp.MustCompile(`(?i)\b(police)\s*(raid|raids|raiding)\b`), "Official Activity"},
|
|
{regexp.MustCompile(`(?i)\b(raid|raids|raiding)\b`), "Activity"},
|
|
{regexp.MustCompile(`(?i)\b(cops?)\b`), "Officers"},
|
|
{regexp.MustCompile(`(?i)\b(swat)\b`), "Task Force"},
|
|
{regexp.MustCompile(`(?i)\b(sting\s*operation)\b`), "Operation"},
|
|
{regexp.MustCompile(`(?i)\b(deportation|deporting|deported)\b`), "Enforcement Action"},
|
|
{regexp.MustCompile(`(?i)\b(detention\s*center)\b`), "Processing Facility"},
|
|
{regexp.MustCompile(`(?i)\b(warrant)\b`), "Authorization"},
|
|
}
|
|
|
|
// SanitizeBeaconText applies neutral-language replacements to user-submitted
|
|
// beacon text. Returns the sanitized string and whether any replacements were made.
|
|
func SanitizeBeaconText(input string) (string, bool) {
|
|
result := input
|
|
changed := false
|
|
for _, r := range replacements {
|
|
if r.pattern.MatchString(result) {
|
|
result = r.pattern.ReplaceAllString(result, r.replacement)
|
|
changed = true
|
|
}
|
|
}
|
|
// Collapse multiple spaces that may result from replacements
|
|
result = strings.Join(strings.Fields(result), " ")
|
|
return result, changed
|
|
}
|