FileCodeBox Go 重写版 v2.5.6(安全审计修复版)
Go 1.27.1 (Gin+GORM) + Vue 3 文件快传服务: - 安全审计全部修复(docs/security-audit-2026-09-05.md): bcrypt 密码哈希与自动升级、presign 直传服务端大小/内容校验、 全局请求体上限、依赖升级(govulncheck 0 命中)、janitor 后台清理、 管理端审计动作落库、/admin CORS 收紧、通知内容白名单净化、 会话默认 7 天、限流缓存故障降级、robots.txt 端点等 - 前端:取件链接复制修复(不再重复拼接提取码)、markdown 净化器加固 - Redis 支持库号(FCB_REDIS_DB / redis://…/db URL) - 文档:docs/api/* 与 openapi.yaml 同步最新行为(robots.txt、 提码 5 位起、chunk 32MiB 上限、admin 审计动作等) 验证:gofmt/go vet/go test 全绿;二进制端到端冒烟通过
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
// Package settings — schema.go:v2 配置键 schema 常量与元数据表。
|
||||
//
|
||||
// 键名常量的单一事实来源在 internal/config/schema.go(defaults() 需引用);
|
||||
// 本文件 re-export 供 API/管理层使用,并提供「键名/类型/默认值」全量表,
|
||||
// 供管理端设置页与文档生成(t4)对齐。新增键必须同步:
|
||||
// 1. config/schema.go 键名与边界常量
|
||||
// 2. config/config.go defaults() 默认值
|
||||
// 3. 本文件 KVSchema() 元数据行
|
||||
// 4. schema 同步测试(config schema_test / settings schema_test)
|
||||
package settings
|
||||
|
||||
import "filecodebox/internal/config"
|
||||
|
||||
// —— 键名 re-export(与 config 包保持同一字符串,避免魔法值散落)——
|
||||
const (
|
||||
// 需求 ① 背景图
|
||||
KeyBackground = config.KeyBackground
|
||||
KeyBackgroundURL = config.KeyBackgroundURL
|
||||
// 需求 ② 页脚
|
||||
KeyFooterText = config.KeyFooterText
|
||||
KeyFooterBeian = config.KeyFooterBeian
|
||||
// 需求 ③ 系统通知
|
||||
KeyNotifyEnabled = config.KeyNotifyEnabled
|
||||
KeyNotifyTitle = config.KeyNotifyTitle
|
||||
KeyNotifyContent = config.KeyNotifyContent
|
||||
// 需求 ④ 保存策略与上传频率限制
|
||||
KeyMaxSaveSeconds = config.KeyMaxSaveSeconds
|
||||
KeyMaxSaveCount = config.KeyMaxSaveCount
|
||||
KeyExpireStyle = config.KeyExpireStyle
|
||||
KeyUploadCount = config.KeyUploadCount
|
||||
KeyUploadMinute = config.KeyUploadMinute
|
||||
// 需求 ④⑩ 存储策略
|
||||
KeyUploadSize = config.KeyUploadSize
|
||||
KeyMaxFileSize = config.KeyMaxFileSize
|
||||
KeyAllowedTypes = config.KeyAllowedTypes
|
||||
KeyStorageLimit = config.KeyStorageLimit
|
||||
KeyOpenUpload = config.KeyOpenUpload
|
||||
// v3 存储引擎
|
||||
KeyStorageEngine = config.KeyStorageEngine
|
||||
)
|
||||
|
||||
// —— 取值边界 re-export ——
|
||||
const (
|
||||
MaxSaveSecondsMax = config.MaxSaveSecondsMax // 最长保存秒数上限(365 天)
|
||||
MaxSaveCountMax = config.MaxSaveCountMax // 保存次数上限
|
||||
MaxFileSizeMax = config.MaxFileSizeMax // 单文件大小上限(10 GiB)
|
||||
BackgroundURLMaxLen = config.BackgroundURLMaxLen // 背景图 URL 长度上限
|
||||
FooterTextMaxLen = config.FooterTextMaxLen // 页脚内容长度上限
|
||||
FooterBeianMaxLen = config.FooterBeianMaxLen // 备案号长度上限
|
||||
NotifyTitleMaxLen = config.NotifyTitleMaxLen // 通知标题长度上限
|
||||
NotifyContentMaxLen = config.NotifyContentMaxLen // 通知内容长度上限
|
||||
)
|
||||
|
||||
// 敏感键:不允许出现在管理端 config get 下发/前端可见集合中(双模式下一致生效)。
|
||||
// v3:引擎凭据(webdav_password/s3_secret_access_key/aws_session_token)加入敏感集——
|
||||
// 管理端 get 返回掩码占位,update 时空串/掩码=不修改;公开 config 永不下发。
|
||||
var SensitiveKeys = []string{
|
||||
"admin_token", "jwt_secret",
|
||||
"webdav_password", "s3_secret_access_key", "aws_session_token",
|
||||
}
|
||||
|
||||
// SensitiveMaskValue 敏感键掩码占位(管理端 get 展示用)。
|
||||
const SensitiveMaskValue = "******"
|
||||
|
||||
// IsSensitiveKey 判断键是否为敏感键(config get 必须屏蔽)。
|
||||
func IsSensitiveKey(key string) bool {
|
||||
for _, k := range SensitiveKeys {
|
||||
if k == key {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// KVSchema 返回 v2 全量配置键元数据(键名/类型/默认值/边界/说明)。
|
||||
// 默认值必须与 config defaults() 一致(schema 同步测试保证)。
|
||||
func KVSchema() []config.KVSchemaEntry { return config.KVSchema() }
|
||||
|
||||
// KVSchemaByKey 以键名为索引查看 schema;未知键返回 nil。
|
||||
func KVSchemaByKey(key string) *config.KVSchemaEntry {
|
||||
for i := range config.KVSchema() {
|
||||
if config.KVSchema()[i].Key == key {
|
||||
return &config.KVSchema()[i]
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user