2026-03-19 16:37:57 +08:00

59 lines
1.2 KiB
Go

package redactutil
import (
"fmt"
"regexp"
"strings"
)
func NormalizeMask(mask string) string {
mask = strings.TrimSpace(mask)
if mask == "" {
return "[REDACTED]"
}
return mask
}
func BuildFieldSet(fields ...string) map[string]struct{} {
fieldMap := make(map[string]struct{}, len(fields))
for _, field := range fields {
field = strings.TrimSpace(strings.ToLower(field))
if field == "" {
continue
}
fieldMap[field] = struct{}{}
}
return fieldMap
}
func LookupFieldKey(key string) string {
return strings.TrimSpace(strings.ToLower(key))
}
func MaskFields(fields map[string]interface{}, mask string) map[string]interface{} {
if len(fields) == 0 {
return nil
}
mask = NormalizeMask(mask)
masked := make(map[string]interface{}, len(fields))
for key := range fields {
masked[key] = mask
}
return masked
}
func ReplaceRegex(pattern *regexp.Regexp, text string, replacement string) (string, bool) {
if pattern == nil || text == "" {
return text, false
}
if replacement == "" {
replacement = "[REDACTED]"
}
changed := pattern.ReplaceAllString(text, replacement)
return changed, changed != text
}
func IsMasked(value interface{}, mask string) bool {
return fmt.Sprint(value) == mask
}