fix(auth): 注册邮箱与公告 - 放宽公告正文并增加域名白名单

This commit is contained in:
Rou
2026-09-05 13:04:11 +08:00
parent 0cb4c2581e
commit 974812e34a
16 changed files with 480 additions and 77 deletions

View File

@@ -54,6 +54,26 @@ var schemaMigrations = []migration{
{version: 7, name: "asset_library_folders", checksum: assetLibraryFoldersChecksum, apply: migrateSchemaV7},
}
// reconcileLegacyMigrationV6 repairs databases created while asset folders were
// temporarily assigned to migration 6 before resource playback became migration 6.
// The schema changes are additive and the transaction keeps the record update atomic.
func reconcileLegacyMigrationV6(tx *gorm.DB, applied schemaMigration, expected migration) error {
if expected.version != 6 || applied.Name != "asset_library_folders" || applied.Checksum != assetLibraryFoldersChecksum {
return nil
}
if err := migrateSchemaV6(tx); err != nil {
return fmt.Errorf("补齐资源播放副本结构:%w", err)
}
if err := tx.Model(&schemaMigration{}).Where("version = ?", applied.Version).Updates(map[string]any{
"name": expected.name,
"checksum": expected.checksum,
"applied_at": applied.AppliedAt,
}).Error; err != nil {
return fmt.Errorf("修复数据库迁移 %d 记录:%w", applied.Version, err)
}
return nil
}
func migrateSchemaV2(tx *gorm.DB) error {
return tx.Exec("CREATE INDEX IF NOT EXISTS idx_schema_migrations_applied_at ON schema_migrations (applied_at)").Error
}
@@ -169,6 +189,12 @@ func MigrateSchema(db *gorm.DB) error {
var applied schemaMigration
err := tx.First(&applied, "version = ?", item.version).Error
if err == nil {
if err := reconcileLegacyMigrationV6(tx, applied, item); err != nil {
return err
}
if applied.Version == item.version && applied.Name == "asset_library_folders" && item.version == 6 {
continue
}
if err := validateMigrationRecord(applied, item); err != nil {
return err
}

View File

@@ -133,6 +133,48 @@ func TestMigrateSchemaV4AddsResourceUploadKeyToExistingSchema(t *testing.T) {
}
}
func TestMigrateSchemaRepairsLegacyAssetFoldersMigrationOrder(t *testing.T) {
db, err := Open(Config{Driver: "sqlite", DSN: "file:migration-legacy-v6-order?mode=memory&cache=shared"})
if err != nil {
t.Fatal(err)
}
if err := db.AutoMigrate(&model.Resource{}, &model.Asset{}, &model.AssetFolder{}); err != nil {
t.Fatal(err)
}
if err := db.AutoMigrate(&schemaMigration{}); err != nil {
t.Fatal(err)
}
for _, item := range schemaMigrations[:5] {
if err := db.Create(&schemaMigration{Version: item.version, Name: item.name, Checksum: item.checksum, AppliedAt: time.Now().UTC()}).Error; err != nil {
t.Fatal(err)
}
}
if err := db.Create(&schemaMigration{Version: 6, Name: "asset_library_folders", Checksum: assetLibraryFoldersChecksum, AppliedAt: time.Now().UTC()}).Error; err != nil {
t.Fatal(err)
}
if err := MigrateSchema(db); err != nil {
t.Fatalf("repair legacy migration order: %v", err)
}
if !db.Migrator().HasColumn(&model.Resource{}, "playback_status") || !db.Migrator().HasColumn(&model.Resource{}, "playback_object_key") || !db.Migrator().HasColumn(&model.Resource{}, "playback_error") {
t.Fatal("legacy database did not receive resource playback columns")
}
status, err := ReadSchemaStatus(db)
if err != nil {
t.Fatal(err)
}
if !status.Ready || status.Current != CurrentSchemaVersion {
t.Fatalf("unexpected repaired schema status: %#v", status)
}
var applied schemaMigration
if err := db.First(&applied, "version = ?", 6).Error; err != nil {
t.Fatal(err)
}
if applied.Name != "resource_playback_variant" || applied.Checksum != resourcePlaybackChecksum {
t.Fatalf("migration 6 after repair = %#v", applied)
}
}
func TestMigrateSchemaRollsBackFailedMigration(t *testing.T) {
db, err := Open(Config{Driver: "sqlite", DSN: "file:migration-rollback?mode=memory&cache=shared"})
if err != nil {