feat: 交付官方 Docker 运行时,外观改背景图并下线自定义 CSS/JS

站点/后台分轨背景与用户列表排序一并落地;生产 CORS 改走 SITE_URL,健康检查带版本号。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-18 05:27:33 +08:00
parent 5f7193042f
commit d784b0ea7a
68 changed files with 2588 additions and 768 deletions

View File

@@ -88,3 +88,54 @@ func TestRejectStrayDataDir(t *testing.T) {
t.Fatal(err)
}
}
func TestAllowOriginDevAndProd(t *testing.T) {
dev := &Config{DevMode: true}
if !dev.AllowOrigin("http://localhost:3000") || !dev.AllowOrigin("http://127.0.0.1:3000") {
t.Fatal("开发态应放行 next dev Origin")
}
if dev.AllowOrigin("https://bbs.example.com") {
t.Fatal("开发态不应放行生产域名")
}
prod := &Config{
DevMode: false,
SiteURL: "https://bbs.example.com",
CORSOrigins: []string{"https://mirror.example.com"},
}
if !prod.AllowOrigin("https://bbs.example.com/") {
t.Fatal("生产态应放行 SITE_URL")
}
if !prod.AllowOrigin("https://mirror.example.com") {
t.Fatal("生产态应放行 CORS_ORIGINS")
}
if prod.AllowOrigin("http://localhost:3000") {
t.Fatal("生产态不应放行 localhost")
}
}
func TestParseSiteURLAndDataDir(t *testing.T) {
work := t.TempDir()
data := t.TempDir()
t.Setenv("JIANG13_WORK_PATH", work)
t.Setenv("DEV_MODE", "false")
t.Setenv("SITE_URL", "https://bbs.example.com/")
t.Setenv("CORS_ORIGINS", " https://a.example.com ,https://b.example.com/ ")
t.Setenv("DATA_DIR", data)
t.Setenv("JWT_SECRET", "test-secret-not-for-prod")
cfg, err := Parse()
if err != nil {
t.Fatal(err)
}
if cfg.DevMode {
t.Fatal("DEV_MODE=false 应关闭开发态")
}
if cfg.SiteURL != "https://bbs.example.com" {
t.Fatalf("SITE_URL 未去尾斜杠: %q", cfg.SiteURL)
}
if len(cfg.CORSOrigins) != 2 || cfg.CORSOrigins[0] != "https://a.example.com" || cfg.CORSOrigins[1] != "https://b.example.com" {
t.Fatalf("CORS_ORIGINS 解析错误: %#v", cfg.CORSOrigins)
}
assertPath(t, cfg.DataDir, data)
}