refactor: CSP nonce替代unsafe-inline, HSTS始终启用, router/api拆分, 管理后台+用户设置页拆分, DB健康降级, 时区配置, UID统一解析, CI接入
Some checks failed
CI / Lint + Build (push) Has been cancelled

审计修复:
- CSP: unsafe-inline移除, nonce替代; unsafe-eval保留供Vditor使用
- HSTS: 始终启用(不再依赖release模式)
- Controller Exp: common.GetGinExp包装, 不再直接读context
- UID解析: common.ParseUIDParam统一, follow/admin controller改用

重构:
- router/api.go(198行)拆为7个域文件: auth/settings/posts/comments/reactions/social/studio
- 管理后台站点设置: 单页拆为4个子页(brand/security/registration/content)+子菜单
- 前台用户设置页: 1201行拆为6个独立模板+6个独立JS文件

新增:
- DB健康检测中间件(middleware/db_health.go): 5s ping+降级页面
- 时区配置: config.yaml server.timezone→time.Local初始化
- .gitea/workflows/ci.yml: strict模式CI流水线
This commit is contained in:
2026-06-22 03:06:24 +08:00
parent e7185f58fb
commit 2449a27eb5
43 changed files with 2157 additions and 226 deletions

View File

@ -0,0 +1,83 @@
{{template "admin/layout/base.html" .}}
<div class="page-header">
<h1>站点设置</h1>
<p class="page-desc">审核配置与内容管理</p>
</div>
{{template "admin/site-settings/_menu.html" .}}
<!-- 审核设置 -->
<div class="settings-section">
<div class="section-title">审核设置</div>
<div class="section-body">
<div class="setting-item">
<div class="setting-info">
<span class="setting-label">启用审核系统</span>
<span class="setting-desc">启用后,用户名、头像、签名修改将进入审核流程</span>
</div>
<label class="toggle-switch">
<input type="checkbox" id="audit-enabled" data-key="audit.enabled">
<span class="toggle-slider"></span>
</label>
</div>
<div class="setting-item">
<div class="setting-info">
<span class="setting-label">用户名审核</span>
<span class="setting-desc">更改用户名需要管理员审核</span>
</div>
<label class="toggle-switch">
<input type="checkbox" id="audit-username" data-key="audit.username_audit">
<span class="toggle-slider"></span>
</label>
</div>
<div class="setting-item">
<div class="setting-info">
<span class="setting-label">头像审核</span>
<span class="setting-desc">更改头像需要管理员审核</span>
</div>
<label class="toggle-switch">
<input type="checkbox" id="audit-avatar" data-key="audit.avatar_audit">
<span class="toggle-slider"></span>
</label>
</div>
<div class="setting-item">
<div class="setting-info">
<span class="setting-label">签名审核</span>
<span class="setting-desc">更改个人签名需要管理员审核</span>
</div>
<label class="toggle-switch">
<input type="checkbox" id="audit-bio" data-key="audit.bio_audit">
<span class="toggle-slider"></span>
</label>
</div>
</div>
</div>
<!-- 内容管理 -->
<div class="settings-section">
<div class="section-title">内容管理</div>
<div class="section-body">
<div class="setting-item setting-item-vertical">
<div class="setting-info">
<span class="setting-label">社区准则</span>
<span class="setting-desc">注册时需用户阅读并同意,支持 HTML 格式</span>
</div>
<div class="setting-input-block">
<textarea id="setting-site-guidelines" class="setting-textarea" rows="12" placeholder="留空则使用默认准则文件"></textarea>
<button class="btn btn-sm btn-primary btn-save-block" data-key="site.guidelines" data-input="setting-site-guidelines">保存准则</button>
</div>
</div>
</div>
</div>
<!-- 通用设置 -->
<div class="settings-section">
<div class="section-title">其他设置</div>
<div class="section-body" id="general-settings">
<div class="settings-empty" id="settings-empty">加载中...</div>
</div>
</div>
{{template "admin/layout/footer.html" .}}