update-user-ccnet-email 支持大小写混合的电子邮件,并会中断桌面客户端同步
**版本** Seafile Pro 13.0.27 **发生的情况** 我使用以下命令更改了管理用户 ID(电子邮件): PUT /api/v2.1/admin/update-user-ccnet-email/ 旧 ID 是一个不同的电子邮件地址,而我提供的新 ID 是大小写混合的,例如:[email protected] API 返回 200/success,一切似乎都正常工作。我可以登录,所有库都存在,管理面板显示了正确的所有者,WebDAV 也正常工作。 但是,本地 Seafile 桌面客户端无法再同步任何库。尝试设置同步会导致 "**服务器拒绝访问**"。我还用一个完全新的 Seafile 客户端配置重现了此问题,因此它不是过时的客户端状态。 **我发现的情况** 迁移的用户被存储为: [email protected] 例如,ccnet_db.EmailUser 和 seafile_db.RepoOwner 中包含了混合大小写的 ID。桌面客户端创建的新 RepoUserToken 条目则使用: [email protected] 我通过 seaserv 检查了权限,结果为: check_permission(repo, "[email protected]") -> None check_permission(repo, "[email protected]") -> "rw" 受影响的所有仓库都具有 status=0 和 permission='rw',其中包含了小写 ID。 我还直接通过本地文件服务器测试了新生成的仓库令牌,绕过桌面客户端、反向代理等: GET /repo/<repo-id>/permission-check/?op=upload 这返回了: HTTP 403 {"reason":"no permission","unsyncable_path":"/"} 因此,403 是由 Seafile 文件服务器本地生成的。 有趣的是,WebDAV 在整个过程中正常工作,并接受了小写电子邮件。 **解决方案** 首先,我尝试再次使用 update-user-ccnet-email 来更改: [email protected] -> [email protected] 但这返回了: 400 {"error_msg":"User [email protected] already exists."} 我能够通过使用临时 ID 来解决这个问题: [email protected] -> [email protected] -> [email protected] 两次迁移都返回成功。 在最终迁移之后,EmailUser 和 RepoOwner 使用了小写 ID,本地桌面同步立即恢复了正常工作。 **预期行为** 我认为 update-user-ccnet-email 应该在执行迁移之前将新用户 ID/电子邮件正常化为小写,或者拒绝混合大小写的电子邮件。 目前,它接受混合大小写的 ID 并报告了成功的迁移,但这可能会使帐户处于 Web 界面/WebDAV 正常工作,而本地同步则会收到 403 的状态。 此外,无法通过直接的大小写迁移后更改大小写,因为 API 报告了小写用户已经存在。 无论这是否会得到修复,希望未来任何搜索此问题的人都能发现此信息有帮助,因为我花了太多时间来解决这个问题。考虑到这是更改管理电子邮件的唯一本地方式,我认为值得研究一下。
内容来源: haiwen/seafile