Skip to content

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_modestrict(IP+UA+salt)或 flexible(IP+salt)。
  • rate_limit_enabled:速率限制开关(仅作用于 /api/*/services/*)。
  • rate_limit_requests:窗口内最大请求数(默认 60)。
  • rate_limit_window_seconds:窗口大小(秒,默认 60)。
  • rate_limit_key:限流键:ipfingerprint
  • 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 }
  ]
}