feat: 统一 Commilitia Drop 全客户端命名与分发

This commit is contained in:
2026-07-31 22:56:10 +08:00
parent f7b0f04c9c
commit c480f0d1c2
77 changed files with 861 additions and 263 deletions
+29 -3
View File
@@ -1,4 +1,4 @@
# cdrop — Commilitia Drop
# Commilitia Drop
跨 OS 剪贴板与文件传输服务。架构文档(`PROJECT_BRIEF.md` / `FRONTEND_DESIGN.md`)与 Changelog 位于 **`docs` 分支**
@@ -23,7 +23,8 @@ git submodule update --init --recursive
MVPM0M13)已上线 prodOIDC PKCE 接入自建 CasdoorCloudflare Realtime TURN over TLS)。其后进入阶段二,已落地:
- **剪贴板同步**:单条覆写式云剪贴板(短 TTL 限暴露面)+ 文本消息一次性通道
- **桌面客户端**Wails v2macOS universal `.app` + Windows `.exe`)—— 瘦客户端复用 web,业务全走后端 APIrefresh_token 存系统密钥库(信封加密)
- **桌面客户端**Wails v2macOS Apple Silicon `.app` + Windows x64 `.exe`)——
瘦客户端复用 web,业务全走后端 APIrefresh_token 存系统密钥库(信封加密)
- **原生数据面**P2P 数据通道从系统 WebView 的 JS 下沉到原生——桌面走 Go/pion、iOS(原生 SwiftUI 客户端)走 libwebrtc——逃出 WebKit / WebView2 写死的 256KB SCTP 接收窗与渲染器节流;信令 / 中继 / 编排仍由共享 JS 引擎统一,三端共享同一线协议(详见 docs 分支 `CHANGELOG`
- **浏览器免重登 + PWA**:可安装为独立 PWA;浏览器侧 refresh_token 不再进 JS,改由服务端 HttpOnly cookie 会话持有(AES-256-GCM 落盘),关闭重开自动免重登(7 天滑动失活),设备名随会话持久化(抗 PWA 存储清除)
- **推送通知**:页面 / PWA 关闭时,收到文件、消息、传输完成或失败以系统通知提醒;页面打开时仍走应用内提示。网页走 Web Push(VAPID,覆盖浏览器 / Android / iOS 16.4+ 已安装 PWA),桌面客户端走原生系统通知(仅窗口非前台才弹)。文案按设备语言在服务端渲染(中简 / 中繁 / 英)
@@ -31,6 +32,32 @@ MVPM0M13)已上线 prodOIDC PKCE 接入自建 CasdoorCloudflare Re
- **iOS Shortcut**HS256 scoped token 手动签发路径(网页签发 UI 暂停)
- **安全加固**:中继会话防耗尽、HS256 强制 jti、prod 强制 audience、TURN 短 TTL、OAuth 端点限流(详见 CHANGELOG
### 正式客户端入口
同一平台只保留一份正式客户端;开发中的迁移 target 不进入下载或分发入口。
| 平台 | 当前正式客户端 | 说明 |
|---|---|---|
| Web | `web/` React SPA / PWA | 浏览器入口 |
| Windows | Wails | 产物名 `Commilitia Drop.exe` |
| macOS | Wails | 产物名 `Commilitia Drop.app`;当前仍是正式版本 |
| iOS | SwiftUI | 主 target `CommilitiaDrop` |
`ios/CDrop` 中的原生 macOS target 仍是迁移候选。它在完成架构覆盖、功能对等、三语界面、
签名扩展与真机验收前,不替换 Wails,也不得作为第二个 macOS 客户端分发。
面向系统与跨端诊断可见的协议标识也使用完整品牌命名空间:URL Scheme 为
`commilitia-drop://`WebRTC DataChannel 与 iOS 文件流 Scheme 为
`commilitia-drop-file`Bonjour 服务为 `_commilitia-drop._tcp`。Bundle ID、App Group、
Keychain service、LaunchAgent label、环境变量与存储路径等不直接决定显示名的内部标识保持稳定。
Auth Broker 的 application key 会出现在 OAuth `app` 参数和 JWT scope 中,因此随本次更新把
既有 `cdrop` application 原位改为 `commilitia-drop`,并将回调改为
`commilitia-drop://auth-callback`;旧会话可直接失效并由各客户端重新登录。
全客户端正式构建、签名、公证、安装、服务端迁移与验证流程见
[`docs/client-build-install.md`](docs/client-build-install.md)。
MVP 里程碑(历史记录):
| 里程碑 | 内容 | 状态 |
@@ -164,4 +191,3 @@ env 见 [`.env.example`](.env.example) / `compose.snippet.yaml`。要点:
5.`CDROP_HS256_SECRET`iOS Shortcut scoped token 用,不用可留空)
6. 可选 `CDROP_CF_TURN_KEY_ID` + `CDROP_CF_TURN_API_TOKEN` 启用 Cloudflare Realtime TURN over TLS(不配则前端 STUN-only 兜底)
7. 可选 `CDROP_VAPID_PUBLIC_KEY` + `CDROP_VAPID_PRIVATE_KEY` 启用 Web Push 推送通知(用 `just vapid-keygen` 生成一对;两者须同时设置,半对则拒启动;都留空则推送惰性关闭,不阻塞启动)。`CDROP_VAPID_SUBJECT` 可选(联系标识,留空回退站点 URL)