59 lines
1.2 KiB
Go
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
|
|
}
|