Appearance
Hey26 的运行行为主要由 config/ 下的三个 JSON 文件控制:
config/config.json:全局配置与密钥。config/map.json:关卡映射(顺序即等级)。config/services.json:服务插件映射。
config/config.json
首次启动自动生成(若不存在),关键字段:
secret_key:JWT 签名密钥;变更会导致旧 token 全部失效。fingerprint_salt:指纹盐;变更会导致旧 token 指纹校验失败。token_expire_hours:token 过期小时数(默认 48)。fingerprint_mode:strict(IP+UA+salt)或flexible(IP+salt)。rate_limit_enabled:速率限制开关(仅作用于/api/*与/services/*)。rate_limit_requests:窗口内最大请求数(默认 60)。rate_limit_window_seconds:窗口大小(秒,默认 60)。rate_limit_key:限流键:ip或fingerprint。debug:FastAPI debug 开关。
示例:
json
{
"_comment": "系统自动生成,请勿手动修改密钥",
"secret_key": "…",
"fingerprint_salt": "…",
"token_expire_hours": 48,
"fingerprint_mode": "strict",
"rate_limit_enabled": false,
"rate_limit_requests": 60,
"rate_limit_window_seconds": 60,
"rate_limit_key": "ip",
"debug": false
}config/map.json
这是最核心的映射文件,决定:
- 关卡加载顺序(数组索引即等级:索引 0 → Lv0,索引 1 → Lv1…)。
- 每关对外 URL slug(
/api/{slug}、/{slug})。 - 关卡模块名(
levels/<module>/__init__.py)。
基础字段(核心框架使用)
每个关卡条目建议至少包含:
slug:URL 片段(推荐小写短词)。module:关卡模块目录名(建议与slug保持一致)。name:展示名(允许中文)。enabled:是否启用(默认true)。
示例:
json
{
"levels": [
{ "slug": "welcome", "module": "welcome", "name": "欢迎", "enabled": true },
{ "slug": "cipher", "module": "cipher", "name": "凯撒", "enabled": true }
]
}可选字段(统一验证服务使用)
如果启用 services/verify(统一验证页),还需要为每个关卡补充:
answer:用于校验答案的字段(明文;生产环境建议不要提交真实答案到公开仓库)。
示例:
json
{
"levels": [
{ "slug": "welcome", "module": "welcome", "name": "欢迎", "enabled": true, "answer": "hey26" },
{ "slug": "cipher", "module": "cipher", "name": "凯撒", "enabled": true, "answer": "matrix" }
]
}注意:关卡“等级/门禁/下一关”的顺序规则统一以 levels 数组顺序为准;已弃用 id 字段(若存在不会影响顺序)。
config/services.json
服务插件通过该文件映射到 /services/{slug}:
slug:URL 片段。module:服务模块目录名(services/<module>/__init__.py)。name:展示名(可选)。enabled:是否启用(默认true)。
示例:
json
{
"services": [
{ "slug": "verify", "module": "verify", "name": "统一验证页", "enabled": true }
]
}