Commit Graph
24 Commits
Author SHA1 Message Date
chaos-zhu 20334fb549 feat: 优化警告 2026-05-24 23:25:42 +08:00
chaos-zhu b84a436917 feat: 移除sftp文件编辑格式化 2026-05-23 22:41:42 +08:00
chaos-zhu 6094385e98 perf(mobile): SFTP 编辑器点击即跳转 + 按文件名后缀判定二进制
- 点击文件后立即推入 TextEditorPage,读取与解码移入页面内部,期间显示
  loading;失败在页面内联展示,避免主列表卡顿
- 二进制判定改为按文件扩展名(常见 exe/图片/压缩/媒体/字体等),
  无扩展名文件 > 10 KB 视为二进制,移除原 NUL 字节探测
- TextEditorPage 自行调用 readTextFile,不再要求调用方预先解码
- 同步精简 sftp_tab._openInEditor 与 editor_text_sniffer 单测
2026-05-23 21:46:43 +08:00
chaos-zhu ee6ebc1545 feat(mobile): 新增 TextEditorController 协调脏标记/保存/格式化 2026-05-23 20:45:06 +08:00
chaos-zhu ac95ad0c25 feat(mobile): SftpSessionManager 新增 readTextFile/writeTextFile 与异常类型 2026-05-23 20:38:49 +08:00
chaos-zhu a63c054c56 feat(mobile): 新增 editor_formatters JSON/YAML/XML 格式化 2026-05-23 20:32:57 +08:00
chaos-zhu d052fc0ad7 feat(mobile): 新增 editor_language 按文件名识别语言与高亮 2026-05-23 20:28:24 +08:00
chaos-zhu 70fa032186 feat(mobile): 新增 editor_text_sniffer 二进制与 UTF-8 嗅探 2026-05-23 20:21:27 +08:00
chaos-zhu c338eb3172 feat: SFTP连接功能 2026-05-23 18:44:31 +08:00
chaos-zhu 2fb23ef783 feat: 跳板机&代理功能支持 2026-05-23 16:12:41 +08:00
chaos-zhu 5769d6bc19 fix: 修复密钥连接加密串为空string 2026-05-23 14:48:04 +08:00
chaos-zhu 1f8203eb6b feat: 优化UI 2026-05-23 13:35:25 +08:00
chaos-zhu ca24026dc0 feat: 分组展示 2026-05-21 22:42:49 +08:00
chaos-zhu 0c07a9b3f2 feat: 无登录态跳转 2026-05-20 20:51:19 +08:00
chaos-zhu bc0a88d919 feat: 多语言基建 2026-05-19 22:37:02 +08:00
chaos-zhu ca4809bec7 feat: 重构状态管理&底部菜单 2026-05-16 21:17:58 +08:00
chaos-zhu 05f304089d feat: 优化终端快捷键输入 2026-05-16 20:52:15 +08:00
chaos-zhu b3a2a53a1e feat(mobile): 实现原生 SSH 终端
SshTerminalController 把 dartssh2 shell 会话和 xterm 终端绑定,
支持密码与私钥认证、stdout/stderr 转发、resize 与单独的 writeInput
通道;TerminalToolbar 提供 Esc/Tab/方向键/Ctrl-C/Ctrl-D/Enter/断开
按钮,所有按键直接写入 SSH 会话;TerminalPage 在 initState 中
连接、dispose 中断开,并展示连接错误。
2026-05-16 17:22:10 +08:00
chaos-zhu 8d89cd2d73 feat(mobile): 服务器列表页与可注入仓库
将 ServerRepository 重构为接口,由 ApiServerRepository 提供
实际网络与解密实现,使列表页 widget 测试可以注入伪仓库覆盖
空列表、错误重试、连接失败 SnackBar 与登出按钮路径。
2026-05-16 17:18:51 +08:00
chaos-zhu 53d9807daf feat(mobile): 添加登录页与应用骨架路由
登录页提供服务端地址、用户名、密码、MFA、有效期与保存密码开关,
并在 HTTP 协议时弹出风险确认对话框;应用骨架根据 session 在
LoginPage 与 ServerListPage 间切换,并先放置一个 TerminalPage
占位组件以保持分析器干净,真正的终端实现将在 Task 12 落地。
2026-05-16 17:15:47 +08:00
chaos-zhu 1d779a082e feat(mobile): 添加服务器模型与凭据仓库
- features/servers/server_model.dart: 仅保留移动端列表所需字段,
  fromJson 兼容 _id / 字符串 port / 缺失 tag;canConnect 处理
  isConfig 与 expired。
- features/terminal/ssh_connection_config.dart: mobile/ssh-connection
  解密后明文模型,与 toMobileSshPayload 对齐。
- features/servers/server_repository.dart: fetchHosts 拉取 host-list;
  fetchSshConfig 随机 32B key -> RSA 加密 -> POST mobile/ssh-connection
  -> AES-GCM 解密 -> 构造 SshConnectionConfig;临时 key 与明文仅在
  方法内存留。
- server_model 单测覆盖正常 / fallback / 不可连接场景。
2026-05-16 17:09:19 +08:00
chaos-zhu 5577fa91f6 feat(mobile): 添加 API 客户端与登录控制器
- core/api/api_result.dart: ApiFailure 包装非 2xx 响应,附带 statusCode
  与 401/403 判定,便于跳登录。
- core/api/api_client.dart: dio 封装,固定 ${serverAddress}/api/v1 base,
  token header + Set-Cookie 双向桥接,统一抛 ApiFailure。
- features/auth/auth_session.dart: 持有 token/deviceId/server/user。
- features/auth/login_controller.dart: 规范化地址 -> HTTP 风险确认 ->
  获取公钥 -> RSA 加密密码 -> 调 /login -> 解析 token/deviceId;
  通过 ApiClientFactory 注入便于测试,并提供 onLoginSuccess 钩子。
- 4 个 fake 模式单测覆盖 HTTP 风险、空用户名/密码、无效地址。
- 同步修订规范与计划: 不再生成自有 mobile deviceId,登录字段沿用
  web 端 (loginName/ciphertext/jwtExpires/jwtExpireAt[/mfa2Token]),
  使用服务端返回的 deviceId 以兼容 revoke-login API。
2026-05-16 17:07:02 +08:00
chaos-zhu bb78062f75 feat(mobile): 添加 AES-GCM 与 RSA 加密模块
- core/crypto/aes_gcm_crypto.dart: 解密服务端
  encryptJsonForMobile 产出的 envelope,处理 PointyCastle GCM 需要
  ciphertext+tag 拼接的差异;并校验 key 长度。
- core/crypto/rsa_crypto.dart: encryptPassword 兼容 web 登录流程;
  encryptTemporaryKey 在 RSA 加密前先 base64 编码 keyBytes,对应
  服务端 RSADecryptAsync 返回 utf8 字符串后 Buffer.from(text, 'base64')
  的回环约定。
- 单测覆盖正常解密、key 长度校验与 tag 篡改场景。
2026-05-16 17:00:39 +08:00
chaos-zhu e17250dfcd feat(mobile): 添加核心工具与 device id 模块
- core/utils/validators.dart: normalizeServerAddress 与 isHttpAddress;
  HTTP 风险检测仅用于登录页风险提示。
- core/utils/jwt_expiry.dart: 与 web 端兼容的 LoginExpiry 映射,输出
  字符串与时间戳,匹配 server/app/controller/user.js 中
  jwt.sign({ expiresIn }) 支持的形式。
- core/storage/device_id.dart: DeviceIdStore 抽象 + SecureDeviceIdStore,
  loadOrCreateDeviceId 首次生成 UUID v4 并持久化到 secure storage。
- 配套单测全部通过 (flutter test test/core)。
2026-05-16 16:58:39 +08:00