monorepo/native/desktop/maplefile/internal/utils/email.go

57 lines
1.3 KiB
Go

package utils
import "strings"
// MaskEmail masks an email address for logging purposes.
// Example: "user@example.com" becomes "u***@e***.com"
// This preserves enough information for debugging while protecting privacy.
func MaskEmail(email string) string {
if email == "" {
return ""
}
parts := strings.Split(email, "@")
if len(parts) != 2 {
// Not a valid email format, mask most of it
if len(email) <= 2 {
return "***"
}
return string(email[0]) + "***"
}
localPart := parts[0]
domainPart := parts[1]
// Mask local part: show first character, mask the rest
maskedLocal := maskPart(localPart)
// Mask domain: show first character of domain name, mask rest, keep TLD
maskedDomain := maskDomain(domainPart)
return maskedLocal + "@" + maskedDomain
}
// maskPart masks a string showing only the first character
func maskPart(s string) string {
if len(s) == 0 {
return "***"
}
if len(s) == 1 {
return s + "***"
}
return string(s[0]) + "***"
}
// maskDomain masks the domain part, preserving the TLD
func maskDomain(domain string) string {
lastDot := strings.LastIndex(domain, ".")
if lastDot == -1 {
// No TLD found, just mask it
return maskPart(domain)
}
domainName := domain[:lastDot]
tld := domain[lastDot:] // includes the dot
return maskPart(domainName) + tld
}