Smail/server/services/setup/finish.go
smail 18896997df
Some checks are pending
Security Checks / security (push) Waiting to run
修复初始化端口持久化和系统服务权限
2026-08-31 21:00:38 +08:00

66 lines
1.5 KiB
Go

package setup
import (
"git.pcux.cn/xuans/Smail/config"
"git.pcux.cn/xuans/Smail/signal"
"git.pcux.cn/xuans/Smail/utils/errors"
"sync"
)
var finishMu sync.Mutex
// Finish 标记初始化完成
func Finish() error {
finishMu.Lock()
defer finishMu.Unlock()
cfg, err := config.ReadConfig()
if err != nil {
return errors.Wrap(err)
}
portsChanged := applyServicePorts(cfg)
if cfg.IsSetupReady() {
if portsChanged {
if err = config.WriteConfig(cfg); err != nil {
return errors.Wrap(err)
}
}
config.SetInitState(true)
return nil
}
cfg.SetupState = config.SetupStateReady
cfg.IsInit = true
err = config.WriteConfig(cfg)
if err != nil {
return errors.Wrap(err)
}
config.SetInitState(true)
// 初始化完成
select {
case signal.InitChan <- true:
default:
// 初始化通知只需唤醒一次启动流程,避免重复完成请求阻塞响应。
}
return nil
}
func applyServicePorts(cfg *config.Config) bool {
if cfg == nil {
return false
}
resolved := config.ResolveHTTPPortDefaults(config.HTTPConfig{
Port: cfg.HttpPort,
HTTPSPort: cfg.HttpsPort,
HTTPSEnabled: cfg.HttpsEnabled != 2,
TLSMode: cfg.TLSMode,
}, cfg.GetSetupPort())
changed := cfg.HttpPort != resolved.Port || cfg.HttpsPort != resolved.HTTPSPort
cfg.HttpPort = resolved.Port
cfg.HttpsPort = resolved.HTTPSPort
if resolved.TLSMode == config.HTTPSTLSModeProxy && cfg.HttpsEnabled != 2 {
cfg.HttpsEnabled = 2
changed = true
}
return changed
}