Files
kefu_cloud/server/internal/service/site.go
T
yml2213 38d6fc1684
CI / Frontend (typecheck + lint + build) (push) Successful in 2m5s
CI / Backend (go vet + test) (push) Failing after 5m20s
feat(widget): 优化访客在线轨迹、GeoIP与多站点渠道
2026-11-06 18:21:30 +08:00

49 lines
1.1 KiB
Go

package service
import (
"net"
"net/url"
"strings"
)
// NormalizeSiteDomain 接受域名、主机名或完整 URL,统一为小写主机名。
func NormalizeSiteDomain(raw string) string {
raw = strings.TrimSpace(strings.ToLower(raw))
if raw == "" {
return ""
}
if !strings.Contains(raw, "://") {
raw = "https://" + raw
}
parsed, err := url.Parse(raw)
if err != nil {
return ""
}
host := strings.TrimSuffix(parsed.Hostname(), ".")
if host == "" {
return ""
}
if ip := net.ParseIP(host); ip == nil && !strings.Contains(host, ".") && host != "localhost" {
return ""
}
return host
}
func PageHost(rawURL string) string {
parsed, err := url.Parse(strings.TrimSpace(rawURL))
if err != nil {
return ""
}
return strings.TrimSuffix(strings.ToLower(parsed.Hostname()), ".")
}
// SiteDomainMatches 同时兼容带 www 与不带 www 的主机名。
func SiteDomainMatches(siteDomain, pageURL string) bool {
expected := NormalizeSiteDomain(siteDomain)
actual := PageHost(pageURL)
if expected == "" || actual == "" {
return expected == ""
}
return strings.TrimPrefix(expected, "www.") == strings.TrimPrefix(actual, "www.")
}