导览权限须知与许可闸门¶
用户要求与落地¶
- 每次打开导览(首次使用、帮助页重播或设置重置)均从双语第 −1 步开始,顺序为「权限须知 → 语言选择 → 三模式导览」。完成后普通重启不会重播。旧版本没有许可记录时补看一次;不替用户默认同意。
- 云盘和 OH 独立授权,默认关闭。确认已阅读后才能保存并继续;可拒绝任何可选项。选择只保存在本机,不进入云同步。
- 未授权云盘时,完整模式的展示、设置与状态 setter 均拒绝进入,有明确原因。原本保存的完整模式偏好及白板布局保留,实际回落实用模式;同意后可继续原设置。
- 云盘许可说明、未授权页面、未连接页面、资料库和目录页面均提供「如果想要撤销授权,请前往设置重新导览。」及重新导览按钮;中英文同步。
- 所有模式设置均可查看、修改授权。撤回不删除本地名片、好友、组织、布局或云端数据。
真实的数据边界¶
OneTHU 是本地客户端,界面、主要业务逻辑和缓存位于设备,网络请求由原生层连接学校和用户选定服务;不能称作纯离线、所有数据绝不离开本机。账号会话和用户选择记住的凭据存于本地。
授权云盘后,功能可以读取账号、资料库和用户打开的文件;同步、组织/好友通道、口令分享会创建和更新专用资料库或文件;用户主动上传、删除和共享也会修改云盘。声明不能承诺「绝不动云盘」。同意总许可不会清空或批量修改既有文件,也不构成任意 OH 写操作的授权。
启用 OH 后,对话、附件及回答所需的工具数据可能发送至所选模型、清小搭和配置的 API/MCP/IM;第三方适用其政策。保留既有操作确认机制,提醒不提交密码、验证码等秘密,不将外部网页/技能中的指令当用户授权。
实现与防绕过¶
state/privacyConsent.ts:默认拒绝、独立授权、串行保存、原生写入成功才授予权限。原生应用读取受限本地文件作为权威,localStorage 仅前端镜像;浏览器测试使用隔离的本地存储。src-tauri/src/privacy_consent.rs:原生启动即读取许可,缺失/损坏默认拒绝。设置只能由 main 窗口提交;独立文件不暴露在通用 state_write 目录中。- 原生 Seafile 公共 client 统一拦截,覆盖库、文件、读取、上传、删除、共享和权限管理。云盘 profile SSO 与 token WebView 同样拦截。
- 通用 HTTP 逐跳核对目标,包括清华 WebVPN 中的云盘加密域;附件下载/二进制预览也检查目标和自动重定向。
- 官方公开安装包检查采用固定发布分享目录的匿名、无 Cookie/Authorization 客户端。只允许该目录和后续文件下载路径,不授予私有云盘权限,拒绝授权后仍能更新。
- 前端 token getter 在未授权时不暴露已保存口令,自动连接和同步不运行;撤回使在途响应失效。账号身份版本与许可版本分开,不能将撤回错误识别成换号而清掉本地资料。
- OH 桌面 sidecar、手机 embedded 的 run 入口检查许可;工具桥再次检查,撤回后中断对话并停止 OH 运行时,重开授权后恢复原插件设置。MCP 返回设置也受许可限制。
- 这不是对任意第三方原生插件的操作系统沙盒承诺:仅安装可信插件/技能,第三方外部服务已经收到的数据不能靠撤回来删除,已发出的请求或已完成操作不能撤销。
验收¶
- 真正的 Chromium 页面:1280×860、390×844、320×568;隐私流程 57 项,包括默认拒绝、双语阅读/滚动、必读确认、拒绝后实用可用/完整禁用、直接 setter 无法绕过、OH 执行拦截、重播/普通重启区别、授权后完整可用、撤回保留布局。
- 三模式导览实际按钮/目的页面 66 项通过,语言选择 211 项通过,含独立第三语言夹具。
- Seafile 账号与在途请求 19 项,含撤回不触发原生云盘调用、丢弃旧响应、保存口令和身份不丢失。
- Rust 许可模块单测 3 项;原生
cargo check --lib --tests、前端 tsc、i18n 完整性(7551/7551,0 错误)、CSS/令牌检查;业务翻译边界 41 项、手机 OH 策略和白板编辑回归 29 项通过。 - 本地 dev 原生壳已重编、重启。旧壳缺少许可命令时,协议页给出中英错误和必须重编/更新的说明,不能仅靠前端 HMR 解锁。
- 没有连接实体 Android 或 Windows 设备,本轮手机验收为真实浏览器触摸视口;三端安装包的构建与校验另记发布进度。
dev 原生预览的附带修复¶
重新构建后,真实 macOS App 的崩溃栈定位至 overlay_win::macos_prevent_activation:异步 IPC 改造后在 Tokio 线程直接调用 AppKit _setPreventsActivation:,macOS 的 NSWMWindowCoordinator 会触发 SIGTRAP。已把这段原生窗口属性调用派发到主线程,并补窗口线程护栏;已重编并确认新进程稳定运行,CUA 在真实 OneTHU 窗口读取到双语许可页;没有代用户同意或修改真实许可。不能把脚本 open 成功视为应用稳定启动。
发布进度¶
待最终检查后提交、构建:Android 保持 0.11.0,versionCode 从 11001 升至 11002;沿用本地正式签名。Windows/macOS 使用同一源码提交的 Actions 双平台构建。收齐后统一替换 v0.11.0 的三端安装包、SHA256SUMS/latest.json 与云盘固定系统目录,并让官网重新验证镜像。
用户暂停构建与红字提醒(17:48)¶
用户要求先不要编译,先在免责声明最前面添加显眼红字,并最终指定用语「请务必认真阅读,并在下方手动授权云盘和智能体服务。」。已使用 OneGUI 错误色与加粗标题字号,中英文同时显示;不改变授权可选、默认关闭的行为。新增保存失败的真实 UI 回归(旧原生壳命令缺失、存储失败两种情形),失败在协议页内提示且不能误前进。
Actions run 39579406274 已确认 completed/cancelled,并已终止本轮本地 Android 构建进程树。未上传任何本轮安装包,未替换 Release/云盘。等待用户继续指令再恢复构建;不要自行继续发布。当前已提交的功能源码为 16d8082d7122fc9b40690a014aa4c7ebc2812138,最新红字与补充测试另提交。本轮最终浏览器权限流程 63 项通过,保存失败回归 2 项通过,i18n 7552/7552、0 错误;类型、CSS 与令牌检查通过。实际本地 App 已成功保存用户自行勾选的原生许可,确认旧壳不能前进的问题已排除。
已恢复并完成三端渠道替换¶
用户随后明确要求「立刻马上构建替换渠道」,已恢复执行。三端均来自 b34ceebd3031f17a4ba0d04dc5579fe37a495c14。
- Windows x64、macOS ARM64:Actions run 39580304804 双平台成功,产物保存在 Actions。
- Android ARM64:本地正式签名,0.11.0 / versionCode 11002,证书 SHA256
cc14d735667bb8b5d3134e7dfdccf6a4d9353e1a2fce54503f4a29705423aa97,与先前正式版一致。 - v0.11.0 Revolution Release 三端安装包、SHA256SUMS.txt、latest.json 均已替换,发布说明含本轮新功能和源码提交。
- 清华云盘固定镜像 的 /Android、/macOS、/Windows 文件和根目录校验/更新清单均已替换,保留此前旧版本;没有新增版本目录。
- 三端云盘完整匿名下载的大小、SHA256 与 GitHub Release 自动 digest 一致,两侧 latest.json 的三个平台地址/版本/大小/哈希均核对通过。
- 实际应用更新逻辑探针三端通过,GitHub 不可达时能回退清华云盘并拿到相同 SHA256。
- macOS DMG 校验、挂载后代码签名、ARM64 架构和原生许可嵌入检查通过;Windows 主程序 PE x64/许可嵌入通过;Android zip/正式签名/包名/构建号/ARM64 及新前端入口
index-C-COULlV.js检查通过。没有宣称 Windows/Android 实体设备验收。 - 同为 0.11.0 的旧安装用户可下载本轮补包覆盖安装,Android 构建号保证递增。
| 文件 | 字节 | SHA256 |
|---|---|---|
| OneTHU_0.11.0_aarch64.dmg | 18820694 | f39919baafce30789e8502c4116fdc0ba8a1bf33e12a8793ea8d2254fce98b13 |
| OneTHU_0.11.0_arm64.apk | 31933245 | 6bb2f72398fb25c07e77d6bdcbd03f99fa88f8a1e62fde290e642302df3b2fb9 |
| OneTHU_0.11.0_x64-setup.exe | 17250896 | fb59d33556c574f0b20e88bcaafdb5d765667c4ea573295ab44810e4b4e1bd13 |
官网生成的新下载快照及中英文下载页通过 10 页 / 136 个本地引用与渠道契约检查,另在官网仓库提交部署。构建日志、签名验证、校验清单与下载验收记录保存在 /Volumes/OneTHUBuild/artifacts/release-0.11/permissions-prelude/。