Some checks are pending
Security Checks / security (push) Waiting to run
统一 frontend、backend、test、test-log 和 out 目录,更新构建、部署及测试入口;纳入配置管理兼容与首次安全引导修复;排除本机配置、密钥和测试产物。
38 lines
832 B
Go
38 lines
832 B
Go
package validation
|
|
|
|
import (
|
|
"net/mail"
|
|
"strings"
|
|
)
|
|
|
|
func IsAuthorizedSender(address, account string, isAdmin bool, domains []string) bool {
|
|
address = strings.TrimSpace(address)
|
|
parsed, err := mail.ParseAddress(address)
|
|
if err != nil || parsed.Address != address {
|
|
return false
|
|
}
|
|
|
|
at := strings.LastIndexByte(address, '@')
|
|
if at <= 0 || at == len(address)-1 || strings.Contains(address[:at], "@") {
|
|
return false
|
|
}
|
|
|
|
domain, err := NormalizeDomain(address[at+1:])
|
|
if err != nil {
|
|
return false
|
|
}
|
|
configured := false
|
|
for _, candidate := range domains {
|
|
normalized, normalizeErr := NormalizeDomain(candidate)
|
|
if normalizeErr == nil && domain == normalized {
|
|
configured = true
|
|
break
|
|
}
|
|
}
|
|
if !configured {
|
|
return false
|
|
}
|
|
|
|
return isAdmin || strings.EqualFold(address[:at], strings.TrimSpace(account))
|
|
}
|