Commit Graph

33 Commits

Author SHA1 Message Date
lou 4b25231c01 新增孤儿清理工具 + 看门狗每小时自动清理 + start.sh 无条件补拉看门狗
- clean_orphans.py: 只删数据库无记录的孤儿 (tmp 终态/僵尸任务卷, storage 无记录目录)
  - 目录级判断: files 记录指向的目录整体跳过, 内部文件永不单独删除 (防误删)
  - 路径 resolve 统一, 调用方 cwd 无关
  - 边界: tmp 终态超 1h 删/进行中保留/超 7 天判僵尸; storage 孤儿超 24h 删
- watchdog.sh: 每 30s 保活服务 + 每小时自动跑清理 (失败 30s 后重试)
- start.sh: 看门狗拉起移到无条件位置 (原 main.py 在跑时 exit 短路, 看门狗死亡无人接管)
- tests: 新增 test_clean_orphans 5 项 (含有效目录内 chunk 不删的误删回归断言)
- README: 数据目录补 tmp, 新增运维节, 测试数 13->17
2026-08-11 14:22:28 +08:00
lou cff202c82f README 更新: deb 安装(依赖自动装) + API 一览 + 数据目录 2026-08-10 22:58:03 +08:00
lou f24539ff5e postinst: 系统依赖加 python3-venv + pip 清华镜像回退 2026-08-10 22:29:54 +08:00
lou a827790db6 服务端 deb 化: debian/ 全套 (control/rules/postinst/changelog), 双包 all源码 + amd64编译(Nuitka onefile sz-server 22MB), postinst 自动装依赖 (aria2+p7zip+venv fastapi/uvicorn) v1.3.0 2026-08-10 22:24:34 +08:00
lou b54ceff639 目录扩展: init 接 dir_id (归属校验), files 挂目录, PUT /move + POST /clone (物理复制卷), list 带 dir_name 2026-08-10 22:04:20 +08:00
lou 7e81373023 目录功能: dirs 表 + POST/GET/DELETE /api/dirs (按用户隔离, 重名409, 非法名400) + 测试 2026-08-10 21:52:40 +08:00
lou 96ba2c97ab 下载端点去 Content-Disposition (filename 参数): aria2 落盘名=卷序号, 客户端 file_name 走 X-Enc-Params 2026-08-10 21:28:32 +08:00
lou 1491b3b4bc 修复: pull 端点 aria2 子进程走 asyncio.to_thread (async端点同步阻塞卡死事件循环, pull-status 轮询超时导致进度条0%) 2026-08-10 21:00:42 +08:00
lou 1beb1fbb82 pull: aria2 输出直通服务端日志 (去 capture_output) 2026-08-10 19:36:16 +08:00
lou f570b36ea5 pull: aria2 日志放开 (notice 级, 进度可见) 2026-08-10 19:15:19 +08:00
lou df9502af94 aria2 反向拉卷端点 /api/transfer/{id}/pull (并发拉取+receiver校验+失败回退) 2026-08-10 19:11:10 +08:00
lou a81fcfdefa 严格隔离: 每账户独立空间, admin 不再全览 (只 admin/无主旧文件); 测试更新 2026-08-10 18:45:22 +08:00
lou 4be951fe4a api: GET /api/auth/me 当前用户端点; README 2026-08-10 15:36:36 +08:00
lou 6b0d163ac0 存储按用户分目录: storage/用户名/日期/任务ID (物理隔离, 旧数据兼容); 测试断言 admin 目录 2026-08-10 15:31:04 +08:00
lou b79aab5c4e 账号体系: users 表 + auth.py(pbkdf2) + 注册/登录/注销端点 + 文件按用户隔离(admin 全部) + 测试 12 项 2026-08-10 15:27:45 +08:00
lou 7e6c7d64c6 README: 服务端完整文档; LICENSE: MIT 2026-08-10 14:46:24 +08:00
lou cd4292e70b 业务日志: 端点事件记录 (init/chunk/complete/ls/download/delete/quota + 客户端 IP); watchdog 防重复改 flock 锁 (pgrep 会误伤调用链) 2026-08-10 13:47:21 +08:00
lou cac0af49f3 自启动+看门狗: start.sh 幂等拉起服务+watchdog, watchdog 30s 检查自动恢复 2026-08-10 12:45:21 +08:00
lou da087591ed task_manager: 文件名清洗不删路径分隔符 (加密名 URL-safe base64, 路径安全由客户端兜底); 测试 9 项 2026-08-10 02:10:07 +08:00
lou cb80b54285 安全加固: init 文件名清洗(255/去路径分隔符) + 卷数上限 10000 + body 1MB 上限; 测试 9 项 2026-08-10 02:00:10 +08:00
lou 95ced31222 quota: GET /api/quota (used=files size 总和 / quota 默认 10GB SZ_QUOTA env / remain / percent); 测试 7 项 2026-08-10 01:42:51 +08:00
lou dbf32fe55e api: del 支持单文件路径 (旧架构记录); 测试 7 项含 del 断言 2026-08-10 01:40:45 +08:00
lou 34496b4bf7 零合并重构: complete 只校验卷齐+卷目录 move 入库 (秒回); 下载改逐卷 GET chunk/{n}; 删 assembler; 状态机 uploading->storing->done; 测试 7 项 2026-08-10 01:30:19 +08:00
lou 3c4e683210 api: 下载响应头 X-Chunk-Count (卷数); db: get_file 带 chunk_count 2026-08-10 01:24:18 +08:00
lou fc522afbaf 零知识重构: 服务端只存密文 (删 decrypt/keyring/unpacker), complete 合并即存, download 返回密文+enc_params 头, 全端点 Bearer token 认证; 测试 7 项 2026-08-10 01:06:33 +08:00
lou eba9d36450 api: complete 幂等 (已完成直接返回 file_id, 客户端超时重试不重复入库); db: get_file_by_transfer 2026-08-10 01:00:23 +08:00
lou cf1f143a0c api: 新增 GET /api/files (ls) + GET /api/files/{id} (下载流式返回); db: list_files/get_file; 测试 6 项 2026-08-10 00:46:08 +08:00
lou e30178391b settings: 默认路径去掉 server/ 前缀 (独立项目根后遗留) 2026-08-10 00:22:31 +08:00
lou 680fbaaa5f db 层换 SQLite: PRoot 容器 PG fsync 卡死, 轻量文件库 (表结构兼容, 可切回 PG) 2026-08-10 00:21:22 +08:00
lou 9924e5fb8e unpacker/decrypt: 裸 dict 泛型补全 dict[str,Any] 2026-08-09 23:36:08 +08:00
lou e782a92a0c api: _sha256 补类型注解 str|Path 2026-08-09 23:35:36 +08:00
lou 554dd34788 集成测试: 全链路还原/坏卷409/缺卷409/幂等/404 5项全过 (真实PG+FastAPI+密码学) 2026-08-09 23:28:07 +08:00
lou 28654c0056 服务端 9 模块骨架: api/receiver/assembler/unpacker/decrypt/storage/db/keyring/task_manager 2026-08-09 23:24:03 +08:00