Skip to content

Latest commit

 

History

History
224 lines (174 loc) · 6.2 KB

File metadata and controls

224 lines (174 loc) · 6.2 KB

02Engine 更新功能完整分析报告

概述

02Engine 是基于 TurboWarp 的 Scratch 修改版本,具有禁用更新检查的隐私优先设计。此文档详细分析其更新功能的工作机制。

更新功能架构

核心组件

  1. 更新检查器 (src-main/update-checker.js)
  2. 更新窗口 (src-main/windows/update.js)
  3. 设置管理 (src-main/settings.js)
  4. 版本比较 (使用 semver 库)

更新功能详细分析

1. 更新检查器 (UpdateChecker)

状态:已禁用

const isUpdateCheckerAllowed = () => {
  //if (process.env.TW_DISABLE_UPDATE_CHECKER) {
    return false;  // 硬编码返回 false
  //}
  return !!packageJSON.tw_update;
};

功能特性:

  • 版本检查: 从 https://desktop.turbowarp.org/version.json 获取最新版本
  • 版本比较: 使用 semver 库进行语义版本比较
  • 安全更新: 强制显示安全更新,不能被忽略
  • 用户设置: 支持多种更新检查模式

更新检查模式:

  1. never: 从不检查更新
  2. security: 仅检查安全更新
  3. stable: 检查稳定版更新
  4. unstable: 检查包括不稳定版的所有更新

检查逻辑:

// 1. 权限检查 - 已禁用
// 2. 用户设置检查
// 3. 网络请求获取版本信息
// 4. 版本比较
// 5. 显示更新窗口(如果需要)

2. 更新窗口 (UpdateWindow)

窗口规格:

  • 尺寸: 600x500 像素
  • 类型: 弹出窗口
  • 协议: tw-update://./update.html

用户交互选项:

  1. 下载更新: 跳转到外部下载页面
  2. 暂时忽略: 6小时内不再提醒
  3. 永久忽略: 直到3000年(实际上永久)
  4. 关闭窗口: 视为暂时忽略

安全更新特殊处理:

  • 无法忽略: 安全更新无法被用户忽略
  • 强制提示: 即使设置为"never"也会显示

3. 设置管理 (Settings)

更新相关设置:

// 更新检查模式
updateChecker: 'stable' | 'security' | 'unstable' | 'never'

// 忽略的更新版本
ignoredUpdate: string | null

// 忽略截止时间(Unix时间戳)
ignoredUpdateUntil: number

数据持久化:

  • 配置文件: userData/tw_config.json
  • 格式: JSON v2 结构
  • 原子写入: 使用 writeFileAtomic 防止损坏

网络通信分析

端点列表:

  1. 版本检查: https://desktop.turbowarp.org/version.json
  2. 更新下载: https://desktop.turbowarp.org/update_available

请求详情:

  • 用户代理: 02Engine/version
  • 方法: GET
  • 响应: JSON 格式的版本信息

版本信息结构:

{
  "latest": "1.2.0",           // 最新稳定版
  "latest_unstable": "1.3.0-beta", // 最新不稳定版
  "oldest_safe": "1.1.8"      // 最低安全版本
}

安全特性

隐私保护:

  1. 默认禁用: 更新检查在代码中被硬编码禁用
  2. 用户控制: 完全由用户控制是否检查更新
  3. 最小数据: 仅传输必要的版本信息
  4. 无遥测: 不收集任何使用统计或用户数据

安全机制:

  1. HTTPS: 所有通信使用加密连接
  2. 强更新: 安全更新无法被忽略
  3. 验证机制: 使用 semver 进行严格的版本比较
  4. 时间戳: 忽略更新的时间戳防止永久忽略

工作流程

启动时检查流程:

1. 应用启动
2. 检查更新检查器是否允许 (→ false,因为已禁用)
3. 检查用户设置
4. 如果允许,进行网络请求
5. 版本比较
6. 根据结果显示更新窗口

用户交互流程:

用户看到更新窗口
├── 点击"下载更新" → 外部浏览器 → 关闭窗口
├── 点击"暂时忽略" → 记录时间戳 → 关闭窗口
├── 点击"永久忽略" → 设置未来时间 → 关闭窗口
└── 直接关闭 → 视为暂时忽略

配置选项

环境变量:

  • TW_DISABLE_UPDATE_CHECKER: 在原版中用于禁用更新检查

package.json 选项:

  • tw_update: 在原版中用于启用更新功能

用户设置(通过 GUI):

  • 更新检查频率选择
  • 忽略特定更新版本

当前状态(02Engine 特有)

被禁用的功能:

  1. 自动更新检查: 在 isUpdateCheckerAllowed() 中硬编码返回 false
  2. 后台更新: 无任何后台更新机制
  3. 自动下载: 所有更新都需要手动下载

启用的功能:

  1. 更新界面: 完整的更新窗口代码仍然存在
  2. 版本比较: semver 比较逻辑完整
  3. 设置管理: 更新设置管理完整
  4. 网络请求: 如果启用,可以进行网络请求

启用更新功能的方法

方法1:修改 update-checker.js

const isUpdateCheckerAllowed = () => {
  // 取消注释并添加环境变量
  if (process.env.TW_DISABLE_UPDATE_CHECKER) {
    return false;
  }
  return !!packageJSON.tw_update;
};

方法2:添加 package.json 配置

{
  "tw_update": true
}

方法3:设置环境变量

export TW_DISABLE_UPDATE_CHECKER=

风险评估

安全风险(低):

  • 仅从官方 TurboWarp 服务器获取版本信息
  • 使用 HTTPS 加密传输
  • 不执行任何下载的文件

隐私风险(极低):

  • 当前已完全禁用
  • 即使启用,也只传输版本信息
  • 无用户数据收集

稳定性风险(极低):

  • 网络请求失败不会影响应用正常运行
  • 版本检查失败有完善的错误处理

建议

保持当前状态的理由:

  1. 隐私优先: 符合项目的隐私保护理念
  2. 用户控制: 用户完全控制更新时机
  3. 稳定性: 减少网络依赖和潜在问题
  4. 透明度: 所有更新操作都明确可见

如需启用更新功能:

  1. 仔细测试所有更新场景
  2. 考虑添加用户协议或确认机制
  3. 确保用户数据不会意外泄露
  4. 提供清晰的更新日志和说明

结论

02Engine 的更新功能设计体现了隐私优先的理念,通过硬编码禁用更新检查器来确保用户的隐私和控制权。虽然保留了完整的更新功能代码,但默认状态下不会进行任何自动更新检查,这是一种在便利性和隐私性之间寻求平衡的设计选择。