Smail/backend/services/setup/domain.go
smail a78f369e23
Some checks are pending
Security Checks / security (push) Waiting to run
补齐初始化公网HTTPS端口配置并修正反代入口跳转
2026-09-24 23:11:47 +08:00

72 lines
2.0 KiB
Go

package setup
import (
"fmt"
"git.pcux.cn/xuans/Smail/config"
"git.pcux.cn/xuans/Smail/utils/array"
"git.pcux.cn/xuans/Smail/utils/errors"
"git.pcux.cn/xuans/Smail/utils/validation"
)
func GetDomainSettings() (string, string, []string, error) {
configData, err := config.ReadConfig()
if err != nil {
return "", "", []string{}, errors.Wrap(err)
}
return configData.Domain, configData.WebDomain, array.Difference(configData.Domains, []string{configData.Domain}), nil
}
func SetDomainSettings(smtpDomain, webDomain, multiDomains string) error {
return setDomainSettings(smtpDomain, webDomain, multiDomains, nil)
}
// SetDomainSettingsWithPublicHTTPSPort 同时保存公网入口端口,不改变内部监听端口。
func SetDomainSettingsWithPublicHTTPSPort(smtpDomain, webDomain, multiDomains string, publicHTTPSPort int) error {
if publicHTTPSPort < 1 || publicHTTPSPort > 65535 {
return fmt.Errorf("公网 HTTPS 端口必须是 1 到 65535 的整数")
}
return setDomainSettings(smtpDomain, webDomain, multiDomains, &publicHTTPSPort)
}
func setDomainSettings(smtpDomain, webDomain, multiDomains string, publicHTTPSPort *int) error {
configData, err := config.ReadConfig()
if err != nil {
return errors.Wrap(err)
}
markSetupInProgress(configData)
smtpDomain, err = validation.NormalizeDomain(smtpDomain)
if err != nil {
return errors.Wrap(err)
}
webDomain, err = validation.NormalizeDomain(webDomain)
if err != nil {
return errors.Wrap(err)
}
domains, err := validation.NormalizeDomainList(multiDomains)
if err != nil {
return errors.Wrap(err)
}
configData.Domains = domains
if !array.InArray(smtpDomain, configData.Domains) {
configData.Domains = append(configData.Domains, smtpDomain)
}
configData.Domain = smtpDomain
configData.WebDomain = webDomain
if publicHTTPSPort != nil {
configData.PublicHTTPSPort = *publicHTTPSPort
}
// 检查域名是否指向本机 todo
err = config.WriteConfig(configData)
if err != nil {
return errors.Wrap(err)
}
return nil
}