Skip to content

fix(sync): (Codex) WebDAV verify() 过弱#1395

Merged
CodFrm merged 1 commit into
mainfrom
fix/sync/010
May 6, 2026
Merged

fix(sync): (Codex) WebDAV verify() 过弱#1395
CodFrm merged 1 commit into
mainfrom
fix/sync/010

Conversation

@cyfung1031
Copy link
Copy Markdown
Collaborator

verify() 不再只检查 getQuota(),而是验证 WebDAV 同步实际需要的能力:能列出目录、能创建临时目录、能写入探针文件、能删除探针文件和临时目录。这样能提前发现“账号能连上但没有写入/删除权限”的配置问题。401 仍会转换为 WarpTokenError,其他失败会保留为 WebDAV verify failed: ...

@cyfung1031 cyfung1031 added the CloudSync Related to CloudSync label May 1, 2026
@CodFrm
Copy link
Copy Markdown
Member

CodFrm commented May 6, 2026

Code review

No issues found. Checked for bugs and CLAUDE.md compliance.

🤖 Generated with Claude Code

- If this code review was useful, please react with 👍. Otherwise, react with 👎.

@CodFrm CodFrm merged commit 27006fe into main May 6, 2026
4 checks passed
@CodFrm CodFrm deleted the fix/sync/010 branch May 6, 2026 07:28
@CodFrm
Copy link
Copy Markdown
Member

CodFrm commented May 15, 2026

设计兜底过渡了,导致了这个#1395 问题

我真不愿意再合这些 看起来正常的修复了,修复了一部分问题,然后又引入新的问题

测试没那么全,得不到用户反馈

这个问题是 坚果云 不支持这个文件名导致的:sandbox name is too long

@CodFrm
Copy link
Copy Markdown
Member

CodFrm commented May 15, 2026

这个 PR 引入的写探针在坚果云(jianguoyun)等不允许根目录写入的 WebDAV 服务上会导致 verify 失败,进而让备份/同步整个跑不起来。详见 #1444 以及修复 PR #1445

简要复盘:basePath 默认是 "/",坚果云对根目录直接拒绝 createDirectory,所以 .scriptcat-verify-* 永远写不进去。本意是把 verify 做强一点,但写权限校验本身和 basePath 强耦合——verify 这个阶段还拿不到目标子目录(例如 ScriptCat/),所以这层校验放在这里既容易误杀又会在网盘根目录残留 .scriptcat-verify-* 垃圾(探针失败/网络中断的情况)。

#1445 把 verify 回退到只读校验(getQuota + getDirectoryContents)。写权限不足仍然会被立刻发现——backupToCloud/buildFileSystem 紧接着会 createDir("ScriptCat"),那里照样会抛错,最多延后一两个 RTT,不会被静默吞掉。

@CodFrm
Copy link
Copy Markdown
Member

CodFrm commented May 15, 2026

补充修正一下上一条的根因分析:实际错误是坚果云返回的 `sandbox name is too long`——它对 WebDAV 目录名有长度限制,这个 PR 引入的探针目录名 `.scriptcat-verify-${Date.now()}-${Math.random().toString(36).slice(2)}` 大约 43 字符就被拒了,并不是我之前说的"根目录不可写"。结果一样:verify 阶段失败,整个备份/同步跑不起来(见 #1444)。

#1445 仍然按移除写探针的方向修:

  1. 不同 WebDAV 服务对文件名/路径有各种隐性限制(坚果云是长度,其它服务可能是字符集、隐藏文件、配额前置等),verify 阶段在 `basePath` 写一个通用探针本身就是脆弱设计。
  2. 写权限不足不会被静默吞掉——`backupToCloud`/`buildFileSystem` 紧接着的 `createDir("ScriptCat")` 会立即抛错,最多延后一两个 RTT。
  3. 探针失败/网络中断会在用户网盘根目录残留 `.scriptcat-verify-*` 垃圾。

CodFrm added a commit that referenced this pull request May 15, 2026
#1395 引入的写探针在 basePath(默认 "/")上创建 `.scriptcat-verify-*`,
坚果云等不允许根目录写入的 WebDAV 服务会直接拒绝,导致备份/同步流程
在 FileSystemFactory.create 阶段就失败。

写权限不在 verify 阶段探测——不同 basePath 写策略不同,verify 没有
目标子路径上下文;真正的写操作会在 backupToCloud / buildFileSystem 中
由 createDir("ScriptCat") 立即触发并报错,凭据问题不会被静默吞掉。

close #1444
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CloudSync Related to CloudSync

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants