real multi-domain support
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user