# 站点设置五模块:实现与交付说明 验证日期:2026-09-21。本次修改位于工作区,未发布到生产。测试使用独立 PostgreSQL 数据库、临时数据目录、SMTP/S3 协议测试设施,没有向真实用户发信或清理生产数据。 ## 现有能力与改动归属 - 原有基本信息、互动与安全(含原内容互动与访问安全)、主题变量、管理权限、CSRF、Cookie 会话、上传校验、附件下载授权继续使用。站点设置各分区为独立路由(/admin/settings/basic 等)。时间线编辑器仍支持从 GitHub/Gitea 导入提交(内置规则,不可在站点设置中编辑)。 - 原有开放注册及上传大小/扩展名/数量设置迁到对应新模块。实际值仍由原 SiteSetting 键提供,模块保存通过同一事务更新,旧通用接口拒绝写入这些已迁移键,避免双重来源。 - 新增独立模块版本、机密加密、共享计数、SMTP 任务与验证码、S3 适配器、统一内容匹配、维护访问守卫及受控临时文件清理。 - 原站点没有独立应用缓存和订阅邮件流程,不展示清空缓存或群发通知的虚假能力。 - 延续现有明暗主题与品牌令牌。截图来自隔离站点默认蓝色主题,没有覆盖真实站点已保存的绿色或其他主题色。 ## 文件与关键实现 - backend/model/operations.go、model/db.go、model/models.go:模块、审计、额度、持久邮件、验证码、对象引用和临时上传记录;附件新增 object_id。 - backend/service/operations.go:默认值、完整校验、AES-256-GCM、版本比较、跨模块事务依赖、旧键兼容。 - backend/service/operations_security.go:PostgreSQL 原子共享计数、账号/来源登录保护、受控服务目标解析与连接。 - backend/service/operations_mail.go:验证证书的 TLS/STARTTLS、测试连接/实际测试发信、品牌模板、加密队列、租约恢复、有限重试、验证码。 - backend/service/operations_storage.go:S3 签名请求、专用前缀读写删除探测、不可变配置快照、公开图片/CDN与私有附件隔离。 - backend/service/operations_filter.go:CommonMark 可读文本、NFKC/大小写归一化、匹配位置和局部例外、拦截优先、脱敏审计。 - backend/service/operations_maintenance.go、operations_temporary.go:密码重置、真实诊断、日志清理、带跨实例上传锁的临时文件扫描与清理。 - backend/handler/operations.go、handlers.go、router/router.go:复用 PermSettings 和 CSRF;管理接口、公开白名单、业务配额、维护访问控制。 - backend/handler/auth.go、post.go、setting.go;service/auth.go、post.go、comment.go、upload.go、post_file.go、brand_store.go:实际注册/登录/发布/编辑/上传/下载接入。 - backend/service/ratelimit.go、middleware/ratelimit.go:修复原限流器把完整请求键当类别查找的问题,加入 Retry-After 和过期清理。 - backend/go.mod、go.sum:MinIO Go S3 客户端及 Goldmark 解析器。 - frontend/app/admin/settings/OperationsPanel.tsx、FilterRules.tsx、SettingsAdmin.tsx:五模块表单、独立保存、草稿测试、版本错误、导航离开保护、规则导入/编辑/批量操作、诊断与确认清理。 - frontend/app/admin/settings/BasicIdentityPanel.tsx:只读正式地址来源与 SEO 关键词说明修正。 - frontend/lib/api.ts、app/register/page.tsx、app/login/page.tsx、app/reset-password/page.tsx:注册验证码、找回密码、管理调用。 - frontend/components/OperationalBanner.tsx、app/layout.tsx:只读提示,最多约 30 秒刷新提示;服务器写入限制立即生效。 - frontend/middleware.ts:服务端读取维护状态并返回真正的 HTTP 503,保留原有会话恢复和 robots 大小写改写。 - frontend/app/globals.css:复用设计令牌的表单、结果、规则和窄屏布局。 - backend/service/operations_test.go、backend/tests/operations-api.mjs:风险驱动的服务与 HTTP 回归。 - .env.example、deploy/.env.example、deploy/docker-compose.yml、deploy/CHANGELOG.md:部署变量与升级说明。 ## 设置项与校验 以下是缺失项的初始值;已有注册、文件限制继续使用数据库有效值。每个模块有独立版本,保存后立即供下一次服务请求读取;不需要重启应用。SMTP/S3 服务状态只是配置状态,测试结果是带时间的历史结果,不表示持续在线。 ### 访问与安全 - allow_register:默认 true,继承原配置。关闭后接口拒绝新注册,前台仍保留注册入口以便展示 register_notice;现有账号不受影响。 - register_notice:默认空,最多 200 字;关闭注册时在注册页展示。 - verify_email、password_reset:默认 false。启用前要求邮件已启用、凭据可解密、正式地址有效且 SMTP 连接/认证通过;依赖存在时禁止停用邮件或清空必需凭据。注册验证码在创建账号前消费,不批量改变老账号状态。 - login_window:600 秒,范围 60–3600;login_failures:5 次,范围 3–50。账号与来源分开计数,来源阈值为账号阈值四倍,窗口到期自动恢复;成功登录清除账号失败计数。 - post_interval:6 秒;comment_interval:2 秒,均允许 0–3600。根据原有每分钟 10/30 次校准,新规则采用最小间隔,0 仅关闭该最小间隔。原有积分/等级业务发帖冷却仍有效,不能把两者视作相互替代。 - resend_interval:60 秒,范围 30–3600,目标邮箱+用途;email_hourly:5 次,范围 1–20,按规范化邮箱共享;另外每来源最多 20 次/小时。 - search_minute:30 次/分钟,范围 1–120;登录用户按 ID、游客按真实可信来源计量。 - 新增安全额度使用 PostgreSQL 原子计数、哈希键及到期清理,多实例共享。原有其他交互接口的内存防滥用限流仍按进程工作,不宣称全站一致。 - 密码沿用既有 6–64 字节、bcrypt、会话版本规则;重置后撤销旧会话。第三方验证码/MFA 不在本期。 ### 邮件服务 - enabled:默认 false;host/username/password/from:启用时必填,主机不能含协议或路径;密码保存前必须有主密钥。 - tls:默认 tls(隐式 TLS),也支持 starttls(必须升级且验证证书);port 默认 465,范围 1–65535。STARTTLS 常用 587,由站长按服务商实际端口填写。没有忽略证书或明文降级选项。 - from_name:留空复用站点名称,最多 120 字节;reply_to:可空,非空需为邮箱;用户名最多 256 字节,禁止邮件头换行。 - timeout:10 秒,范围 2–30;retention:30 天,范围 1–365。缩短保留时间不立即删除记录,需另行确认清理。 - 正式地址和浅色 Logo 复用基本信息/部署 SITE_URL。主题与正文可在后台自由编辑,注册验证和找回密码共用;留空恢复内置模板。变量为 {{site_name}}、{{purpose}}、{{code}}、{{link}}、{{site_url}}、{{logo_url}}(绝对图片 URL)、{{logo}}(完整 img 标签,勿写入 src)。正文必须保留 {{code}};不做 HTML 过滤。发送时变量值会转义,并把 `