66 lines
2.2 KiB
Markdown
66 lines
2.2 KiB
Markdown
# Reasonix Worker C:OnlyOffice local-folder callback 保存契约
|
||||
|
|
|
|||
|
|
你是编码 worker,但本任务优先做设计与最小安全实现评估。你不独占代码库,可能有其他 worker 同时修改不同文件;不要回滚、覆盖或清理他人的改动。
|
|||
|
|
|
|||
|
|
## Project Root
|
|||
|
|
|
|||
|
|
`/mnt/Data1T/mnote`
|
|||
|
|
|
|||
|
|
## 背景
|
|||
|
|
|
|||
|
|
详见:
|
|||
|
|
|
|||
|
|
- `bugs/05-editor-mainline/process/2026-05-21-office-edit-sign-plugin-gap-review-v1.md`
|
|||
|
|
- `bugs/05-editor-mainline/process/5-36-onlyoffice-local-edit-save-callback-contract-v1.md`
|
|||
|
|
|
|||
|
|
ONLYOFFICE 官方口径:callback `status === 2` 或 `status === 6` 时,后端需要下载 `body.url` 并写回文件,成功返回 `{ "error": 0 }`。当前 `mnote-web` callback 代理 legacy Next,local-folder 写回没有闭环。
|
|||
|
|
|
|||
|
|
## Ownership
|
|||
|
|
|
|||
|
|
你负责:
|
|||
|
|
|
|||
|
|
- 优先更新 `bugs/05-editor-mainline/process/5-36-onlyoffice-local-edit-save-callback-contract-v1.md`
|
|||
|
|
- 如判断安全且改动小,可修改:
|
|||
|
|
- `rust/crates/mnote-web/src/routes/onlyoffice.rs`
|
|||
|
|
- `rust/crates/adapter-onlyoffice/src/lib.rs`
|
|||
|
|
- 相关单测
|
|||
|
|
|
|||
|
|
不要修改:
|
|||
|
|
|
|||
|
|
- `rust/crates/mnote-web/src/ssr/pages/layout.rs`
|
|||
|
|
- ACP / Hermes 相关文件
|
|||
|
|
|
|||
|
|
## 任务
|
|||
|
|
|
|||
|
|
1. 梳理当前 callback 能否定位 local-folder 原文件。
|
|||
|
|
2. 明确实现 local writeback 还缺哪些输入:rootUri、relative path、workspace/source kind、session。
|
|||
|
|
3. 如果现有 URL 参数已经足够安全定位文件,则实现最小 status 2/6 下载写回。
|
|||
|
|
4. 如果现有输入不足,先不要硬写实现;更新 checklist,明确缺口,并建议 Worker B 的编辑入口保持 guard。
|
|||
|
|
|
|||
|
|
## 必须满足的安全条件
|
|||
|
|
|
|||
|
|
- 写回路径必须落在当前 local root allowed roots 内。
|
|||
|
|
- status 非 2/6 不写文件并返回 `{ "error": 0 }`。
|
|||
|
|
- 下载 URL 必须经过现有 OnlyOffice internal URL rewrite 逻辑或等价安全处理。
|
|||
|
|
- 不允许从 assetId 字符串直接拼任意绝对路径写入。
|
|||
|
|
|
|||
|
|
## 验收命令
|
|||
|
|
|
|||
|
|
如改代码,请至少运行:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cargo test -p mnote-web onlyoffice_callback -- --test-threads=1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
如果只更新设计,也请说明为什么本轮不应实现。
|
|||
|
|
|
|||
|
|
## 最终输出
|
|||
|
|
|
|||
|
|
在 final 中列出:
|
|||
|
|
|
|||
|
|
- 修改文件
|
|||
|
|
- 是否实现代码,若未实现说明阻塞输入
|
|||
|
|
- 安全边界判断
|
|||
|
|
- 运行过的命令和结果
|
|||
|
|
- 未完成项或风险
|