veylant/internal/proxy/depseudo.go
2026-02-23 13:35:04 +01:00

37 lines
1.0 KiB
Go

package proxy
import (
"regexp"
"github.com/veylant/ia-gateway/internal/pii"
)
// piiTokenRegex matches pseudonymization tokens of the form [PII:TYPE:8hexchars].
var piiTokenRegex = regexp.MustCompile(`\[PII:[A-Z_]+:[0-9a-f]{8}\]`)
// BuildEntityMap transforms the entity list returned by the PII service into a
// map from pseudonym token → original value, used for de-pseudonymization.
func BuildEntityMap(entities []pii.Entity) map[string]string {
m := make(map[string]string, len(entities))
for _, e := range entities {
if e.Pseudonym != "" {
m[e.Pseudonym] = e.OriginalValue
}
}
return m
}
// Depseudonymize replaces all [PII:TYPE:UUID] tokens in text with their
// original values from entityMap. Tokens not found in the map are left as-is.
func Depseudonymize(text string, entityMap map[string]string) string {
if len(entityMap) == 0 {
return text
}
return piiTokenRegex.ReplaceAllStringFunc(text, func(token string) string {
if original, ok := entityMap[token]; ok {
return original
}
return token
})
}