Skip to content

Notion Files Management v2.0.0-Beta-5

Windows 迁移包

  • 新增 deploy/windows_entry.py 作为 PyInstaller/Windows exe 专用入口:默认使用 %LOCALAPPDATA%\Notion-Files-Management 数据目录,启动窗口打印 config/logs/staging 路径,监听统一后端端口 127.0.0.1:18765(可用 NFM_PORT 覆盖),并在启动后打开默认浏览器。
  • deploy/nfm.spec 改为使用 Windows 专用入口,产物名为 NOTION_FILES_MANAGEMENT_v<版本>-<渠道>.exe。Docker/systemd/源码运行仍使用原服务端入口,不受影响。

安全加固(API Key 开放能力)

  • 移除 ?api_key= query 用法:长期 API Key 永远只走 Authorization: Bearer,任何接口都不再接受 URL query 参数(避免明文进访问日志/Referer)。deps._resolve_token 删除,resolve_auth/require_events_access 不再读 query。
  • 短期 SSE token:新增 app/ssetokens.pyPOST /api/tasks/{tid}/events-token(需 session 或 tasks scope),返回 nfmsse_ token,10 分钟有效、绑定单个 task_id、进程内存储。GET /{tid}/events 改用 deps.require_events_access(session / Bearer+tasks / events_token 三选一),不再挂路由级 require_scope?events_token= 是唯一允许出现在 URL 的凭据。
  • hash 常量时间比较apikeys.verify_key 改用 secrets.compare_digest
  • 弱 bootstrap key 拒绝NFM_BOOTSTRAP_API_KEY 必须是 nfm_ 前缀 + 负载 ≥ 32 字符;不合格忽略并 warning,不自动补前缀。
  • 严格 scope 校验_normalize_scopes 遇到未知 scope 直接抛 ValueError(路由转 400),不再静默过滤。
  • PATCH 清空过期时间PATCH /api/apikeys/{id} 改用 body.model_fields_set + update_key_UNSET 哨兵,{"expires_at": null} 可清空过期时间。过期时间统一存 UTC ISO。
  • 动态 CORS:新增 app/cors.py DynamicCORSMiddleware,常驻、每次请求实时读 config["api_cors_allowed_origins"],改设置无需重启。仅放行 http(s) origin,拒绝 */null/带 path 的值;preflight 只对白名单 origin 返回 CORS 头。SettingsIn 增加 api_cors_allowed_origins 字段及校验。

前端

  • ApiKeys.vue:过期时间按本地时间选择、提交转 UTC ISO(toISOString)、展示本地;创建明文弹窗关闭后立即清空 plaintext--text-muted 修正为项目已有的 --app-muted;新增「跨域允许源」面板(读 /api/settings、增删、PUT 保存)。
  • SSE 示例改为先换 events_token,不展示长期 key 放 URL 的用法。

文档

  • 更新 AI/ARCHITECTURE.mdAI/COMMANDS.mdAI/GOTCHAS.md(第 24-27 条)、AI/SECURITY_AUDIT.mdCLAUDE.md:明确「长期 API Key 永远只走 Bearer;URL query 只允许短期 SSE token」。

Released under the MIT License.