Repository navigation
Readest Lite v8.18.4 — 加密设置同步(持久化密钥)
Readest Lite v8.18.4 — 加密设置同步(客户端+服务端完整实现)
✨ 主要功能
1. 分享过期时间 — 永久 + 自定义日历
1 天 / 3 天 / 7 天— 预设(原有)Permanent(永久)—expiresAt设为 9999-12-31Custom(自定义)—<input type='date'>日历选择器,计算 1-365 天
2. 接收方副本完全独立 + owner 删除自动失效
- 接收方 import 时字节级复制到独立命名空间 + 独立 DB row
- 原 owner 删除不影响接收方已保存的副本
delete.ts自动 revoke 所有活跃 BookShare 行 → 410revoked
3. 加密设置同步(完整实现 — 持久化密钥,不是一次性)
用户原话:「每个用户的用户前端设置和配置全部加密存储服务端实现同步」
「加密方式要用可以持久化,而不是一次性的」
加密密钥持久化机制:
- K(256-bit AES-GCM 密钥)在首次登录时随机生成
- K 用密码派生的 KE(PBKDF2-600k-SHA256)加密 → K_enc 存服务端
User.encryptedVaultKey - 每次登录:密码 → KE → 解密 K_enc → K 存内存
- K 在跨会话间持久化 — 不是一次性的,每次登录都能恢复同一个 K
同步流程:
- 保存设置时:
settingsStore.saveSettings()→ 3s 防抖 →pushEncryptedSettings()
→ JSON.stringify(settings) →encryptToEnvelope(plaintext, K)→ base64 →PUT /api/settings - 启动时拉取:
useLibraryhook →pullEncryptedSettings()→GET /api/settings
→ atob →decryptFromEnvelope(envelope, K)→ JSON.parse → 合并到本地
3 个 scope:
system— SystemSettings(KOSync、Readwise、OPDS、proxy 等)global_view— globalViewSettings(字体大小、主题、布局)global_read— globalReadSettings(翻页、自动滚动、TTS)
安全性:服务端只存密文,永远不解密。密钥 K 只在客户端内存中。
4. ITERATION_PROMPT.md 完整更新
12 个设计决策 + 完整自定义文件清单 + 安全清单 + CI 排查 + Migration 清单。
5. feed:// source_deleted bug 修复
shareServer.ts 先检查 row.revokedAt,feed:// 分享 owner 删除后正确返回 410。
📦 升级方式
docker compose pull && docker compose up -d包含数据库 schema 变更:user_settings 新表 + book_shares.book_url 列。
✅ CI 状态
- ✅ CI workflow: success
- ✅ Docker Image workflow: success
- ❌ CodeQL Advanced: pre-existing failure (不阻塞)