From 00a87948c287fe1d486206b03d6d526d416922b8 Mon Sep 17 00:00:00 2001 From: smail Date: Sun, 30 Aug 2026 20:09:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E8=A2=AB=E6=97=A7=E9=85=8D=E7=BD=AE=E8=AF=AF?= =?UTF-8?q?=E5=88=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/services/setup/db.go | 11 +++++++++ server/services/setup/db_database_test.go | 27 +++++++++++++++++++++++ server/services/setup/domain.go | 1 + 3 files changed, 39 insertions(+) diff --git a/server/services/setup/db.go b/server/services/setup/db.go index 76331849..4e59343d 100644 --- a/server/services/setup/db.go +++ b/server/services/setup/db.go @@ -252,6 +252,7 @@ func SetDatabaseSettingsWithOptions(ctx *context.Context, settings DatabaseSetti previousConfig := *configData candidateConfig := *configData + markSetupInProgress(&candidateConfig) candidateConfig.DbType = dbType candidateConfig.DbDSN = dbDSN if err = config.WriteConfig(&candidateConfig); err != nil { @@ -269,6 +270,16 @@ func SetDatabaseSettingsWithOptions(ctx *context.Context, settings DatabaseSetti return nil } +func markSetupInProgress(cfg *config.Config) { + if cfg == nil { + return + } + cfg.IsInit = false + if !cfg.SetupState.Valid() { + cfg.SetupState = config.SetupStateBootstrap + } +} + func closeDatabaseInstance() { if db.Instance == nil { return diff --git a/server/services/setup/db_database_test.go b/server/services/setup/db_database_test.go index 0146326e..df4e9a50 100644 --- a/server/services/setup/db_database_test.go +++ b/server/services/setup/db_database_test.go @@ -10,10 +10,37 @@ import ( "testing" "time" + "git.pcux.cn/xuans/Smail/config" "github.com/go-sql-driver/mysql" "github.com/lib/pq" ) +func TestMarkSetupInProgressClearsLegacyInitializationFlag(t *testing.T) { + cfg := &config.Config{IsInit: true} + + markSetupInProgress(cfg) + + if cfg.IsInit { + t.Fatal("legacy initialization flag must be cleared during setup") + } + if cfg.SetupState != config.SetupStateBootstrap { + t.Fatalf("setup state = %q, want %q", cfg.SetupState, config.SetupStateBootstrap) + } +} + +func TestMarkSetupInProgressPreservesExplicitSetupState(t *testing.T) { + cfg := &config.Config{IsInit: true, SetupState: config.SetupStateNew} + + markSetupInProgress(cfg) + + if cfg.IsInit { + t.Fatal("legacy initialization flag must be cleared during setup") + } + if cfg.SetupState != config.SetupStateNew { + t.Fatalf("setup state = %q, want %q", cfg.SetupState, config.SetupStateNew) + } +} + type fakeSetupDB struct { pingErrors []error pingCalls int diff --git a/server/services/setup/domain.go b/server/services/setup/domain.go index 717af9b8..4ad289ee 100644 --- a/server/services/setup/domain.go +++ b/server/services/setup/domain.go @@ -21,6 +21,7 @@ func SetDomainSettings(smtpDomain, webDomain, multiDomains string) error { if err != nil { return errors.Wrap(err) } + markSetupInProgress(configData) smtpDomain, err = validation.NormalizeDomain(smtpDomain) if err != nil {