72 lines
1.6 KiB
Go
72 lines
1.6 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)
|
|
}
|
|
initializing := !cfg.IsInit && cfg.SetupState != config.SetupStateReady
|
|
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
|
|
if initializing {
|
|
cfg.VerificationEnabled = true
|
|
cfg.ExternalRecoveryEnabled = true
|
|
cfg.LoginPolicy = "new_device"
|
|
}
|
|
|
|
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
|
|
}
|