real multi-domain support

This commit is contained in:
Aine
2022-11-16 09:00:19 +02:00
parent f3be3aeabb
commit ebe9606aa9
9 changed files with 233 additions and 174 deletions

View File

@@ -7,13 +7,21 @@ import (
"gitlab.com/etke.cc/go/logger"
)
var log *logger.Logger
var (
log *logger.Logger
domains []string
)
// SetLogger for utils
func SetLogger(loggerInstance *logger.Logger) {
log = loggerInstance
}
// SetDomains for later use
func SetDomains(slice []string) {
domains = slice
}
// Mailbox returns mailbox part from email address
func Mailbox(email string) string {
index := strings.LastIndex(email, "@")
@@ -24,16 +32,24 @@ func Mailbox(email string) string {
}
// EmailsList returns human-readable list of mailbox's emails for all available domains
func EmailsList(mailbox string, domains []string) string {
func EmailsList(mailbox string, domain string) string {
var msg strings.Builder
domain = SanitizeDomain(domain)
msg.WriteString(mailbox)
msg.WriteString("@")
msg.WriteString(domain)
count := len(domains) - 1
for i, domain := range domains {
msg.WriteString(mailbox)
msg.WriteString("@")
msg.WriteString(domain)
for i, aliasDomain := range domains {
if i < count {
msg.WriteString(", ")
}
if aliasDomain == domain {
continue
}
msg.WriteString(mailbox)
msg.WriteString("@")
msg.WriteString(aliasDomain)
}
return msg.String()
@@ -44,6 +60,22 @@ func Hostname(email string) string {
return email[strings.LastIndex(email, "@")+1:]
}
// SanitizeDomain checks that input domain is available for use
func SanitizeDomain(domain string) string {
domain = strings.TrimSpace(domain)
if domain == "" {
return domains[0]
}
for _, allowed := range domains {
if domain == allowed {
return domain
}
}
return domains[0]
}
// Bool converts string to boolean
func Bool(str string) bool {
str = strings.ToLower(str)