diff --git a/server/services/setup/db.go b/server/services/setup/db.go index 7633184..4e59343 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 0146326..df4e9a5 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 717af9b..4ad289e 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 {