3 Commits

2 changed files with 50 additions and 54 deletions
+36 -46
View File
@@ -1,56 +1,46 @@
# 7z-encrypt-tui 终端界面
# 7z-encrypt-tui
7z-encrypt 文件安全传输系统的终端界面。**Python TUI** (input() REPL)——原生支持中文输入法, 不需要图形环境, SSH 也能用。
> 7z-encrypt 终端界面 | Python TUI | 全功能中文菜单
**发行版下载:** Gitee [Releases v1.3.0](https://gitee.com/edgevoid/7z-encrypt-tui/releases) · Gitea [Releases v1.3.0](http://8.136.202.225:3000/edgevoid/7z-encrypt-tui/releases)
[7z-encrypt](https://gitee.com/edgevoid/7z-encrypt) 的终端交互界面(随客户端 deb 一起安装, 或独立运行)。
## 功能菜单
```
主菜单
1. 上传文件 (7z 压缩 → 加密 → 分卷 → 上传)
2. 任务续传 (断点续传: 只补传缺失卷)
3. 配置 (服务器地址 / token)
4. 文件列表 (ls + 空间配额)
5. 下载文件 (逐卷下载 → 本地解密 → 解压还原)
6. 删除文件 (先 ls 再选 file_id)
7. 密钥导出 (红色风险警告 + 二次确认, 导出权限 600)
8. 密钥导入 (红色风险警告 + 二次确认, 自动备份 keyring.json.bak)
9. 注册账号 (用户名+密码, 成功即登录)
10. 登录 (token 自动保存)
11. 注销 (token 失效)
12. 重新生成密钥 (红色警告 + 二次确认, 旧密文永久不可解)
q. 退出
1. 上传文件 8. 密钥导入 15. 目录管理 (创建/列表/删除)
2. 任务续传 9. 注册账号 16. 移动文件到目录
3. 配置 10. 登录 17. 克隆文件
4. 文件列表 (ls) 11. 注销 q. 退出
5. 下载文件 12. 重新生成密钥
6. 删除文件 13. 一键备份 (相册/文档/下载)
7. 密钥导出 14. 恢复备份
```
## 使用
- 上传: 32MB 统一切卷 → 逐卷 7z/加密 → aria2 上传, 可选目标目录(按名自动查/建)
- 下载: aria2 并发拉卷 → 逐卷解密/解压 → 拼接还原
- 备份: 整个文件夹打包一个文件(tar → 卷压缩 → 加密 → 上传), 恢复一键解包
- 登录门禁: 未登录时无文件操作项, 强行输入报错
## 安装
```bash
python3 scripts/tui.py # 源码运行
bin/sz-tui # 或 Nuitka 编译版 (原生二进制)
# 随客户端 deb 安装 (推荐)
sudo dpkg -i 7z-encrypt-client_1.0.0_all.deb
sz-tui
# 独立运行 (源码)
python3 scripts/tui.py
# Nuitka 编译版 (免 Python)
sudo dpkg -i 7z-encrypt-client-bin_1.0.0_amd64.deb
sz-tui
```
- **登录门禁**: 启动先验证登录, 不登录不能进行文件操作 (只有登录/注册/配置)
- **未登录时文件操作灰掉**: 主菜单动态切换, 未登录界面无文件操作项, 强行输入报错
(每次循环重新验证 token, 注销/失效立即回登录界面)
- 服务器地址自动补 `http://` 前缀, 默认从客户端 config.json 读
- 路径输入自动剥引号 (复制路径常带 ' 或 ")
- 上传成功自动清理临时产物, 失败保留可续传
- 所有耗时操作有 tqdm 进度条 (上传卷条 / 下载双层条 / 加密 / 解密)
## 环境变量
## 依赖
- 客户端项目: `/home/lou/文档/7z-encrypt` (7 模块 + .venv)
- tqdm
## 架构
```
tui.py
├─ run() 子进程调 7z-encrypt CLI (cwd=客户端目录, 实时透传输出)
├─ upload() 1/3 7z压缩 → 2/3 加密分卷 → 3/3 上传 → 清理
├─ download() 逐卷下载 + --decrypt 本地解密解压
├─ files_list() ls + 配额
├─ delete_file() ls 展示 → 输 file_id 删除
└─ config() 服务器/token 配置 (调 config.py)
```
## 协议
MIT License, Copyright (c) 2026 edgevoid
| 变量 | 说明 |
|---|---|
| SZ_CONFIG | 配置文件路径 (默认 ~/.config/7z-encrypt/config.json) |
| SZ_CLIENT_DIR | 客户端源码目录 (deb 安装版自动指向 /usr/share/7z-encrypt) |
+14 -8
View File
@@ -106,6 +106,9 @@ def upload() -> None:
if not path or not os.path.exists(path):
print(f"[错误] 文件不存在: {path}")
return
if not os.path.isfile(path):
print(f"[错误] 不是文件 (目录上传请用菜单 13 一键备份): {path}")
return
server = _clean(input(f"服务器 [{_default_server()}]: ")) or _default_server()
if not server.startswith(("http://", "https://")):
server = "http://" + server # 只输 IP:端口 自动补协议
@@ -594,21 +597,24 @@ def dirs_menu() -> None:
def backup_now() -> None:
"""菜单 13: 一键备份 (相册/文档/下载/聊天记录)"""
"""菜单 13: 一键备份 (相册/文档/下载/聊天记录/指定目录)"""
print("--- 一键备份 ---")
print(" 备份项: photos (相册) / documents (文档) / download (下载) / chat (聊天记录)")
print(" 源目录在 config.json 的 backup 段配置, 增量备份只传新文件")
names = _clean(input(" 备份项 (回车=全部): ").strip())
if names:
run(["backup.py"] + names.split())
else:
print(" 预设项: photos (相册) / documents (文档) / download (下载) / chat (聊天记录)")
print(" 或直接输入目录路径备份指定目录 (如 /home/lou/图片), 回车=全部")
val = _clean(input(" 备份项或目录 (回车=全部): ").strip())
if not val:
run(["backup.py"])
elif os.path.isdir(os.path.expanduser(val)):
run(["backup.py", "--dir", val])
else:
run(["backup.py"] + val.split())
def restore_backup() -> None:
"""菜单 14: 恢复备份"""
print("--- 恢复备份 ---")
name = _clean(input(" 备份项 (photos/documents/download/chat): ").strip())
print(" 备份项: photos/documents/download/chat 或自定义目录名 (--dir 备份的)")
name = _clean(input(" 备份项: ").strip())
if not name:
print("[提示] 已取消")
return