feat: 文件快传新增共享剪贴板(跨客户端粘贴、查看与一键复制)

- 后端:新增 /api/clips(列表/新建)、/api/clips/<id>(取全文/删除)、/api/clips/<id>/copy(复制计数),列表仅返回 240 字符预览
- 存储:SQLite 新增 clips 表(含 expires_at 索引),启动自动建表,线上老库无需手工迁移
- 前端:剪贴板卡片支持读取本机剪贴板、来源备注、查看全文、一键复制到本机剪贴板、单条删除与复制次数
- 清理:systemd 定时任务与 /api/cleanup 同时清理过期剪贴板
- 配置:新增 max_clip_length / max_clips / clip_default_expires_hours
- 部署:deploy_transfer.py 新增 --keep-credentials(不重置登录密码与会话密钥)与 SSH 连接重试
- 文档:README / setup.md / CHANGELOG 同步更新
This commit is contained in:
2026-10-11 22:20:54 +08:00
parent 67caaa428e
commit 5af69d694f
9 changed files with 773 additions and 45 deletions
+11
View File
@@ -23,9 +23,17 @@
- 新增 Beszel 服务器监控(https://lzwlab.cn/beszel/):Docker Compose 部署 Beszel hub(henrygd/beszel:latest,容器 beszel,仅监听 127.0.0.1:8092),通过 USER_EMAIL/USER_PASSWORD 自动创建首个管理员。
- 新增 beszel/docker-compose.yml;nginx 按 Beszel 官方子路径方案将 /beszel/ 反代到 8092(含 WebSocket)。
- setup.md 新增第 12 节:Beszel 部署过程、子路径反代、Agent 接入说明与验证结果。
- 新增“共享剪贴板”功能(与文件快传同一入口 https://lzwlab.cn/transfer/ ):在任一客户端粘贴任意文本发送,其他客户端登录后即可查看并“一键复制”写入本机剪贴板;支持读取本机剪贴板、来源备注(如“公司 PC”)、查看全文、单条删除与复制次数统计。
- 新增剪贴板接口:GET/POST `/api/clips`(列表、新建)、GET/DELETE `/api/clips/<id>`(取全文、删除)、POST `/api/clips/<id>/copy`(复制计数);列表接口只返回前 240 字符预览,全文按 id 单独获取。
- SQLite 新增 `clips` 表(含 `expires_at` 索引),应用启动时自动建表,线上老库无需手工迁移。
- deploy_transfer.py 新增 `--keep-credentials` 选项:只更新代码与新增配置项,保留服务器上已有的 secret_key 与用户密码哈希,不重置登录密码、也无需传入密码。
### Changed
- 更新清理逻辑:systemd 定时任务与 `/api/cleanup` 除过期文件外同时清理过期剪贴板内容,清理日志与接口返回均包含剪贴板条数。
- 更新应用配置项:新增 `max_clip_length`(默认 262144 字符)、`max_clips`(默认 200 条)、`clip_default_expires_hours`(默认 24 小时),配置中缺省时使用内置默认值。
- 更新 transfer/templates/index.html :新增共享剪贴板卡片与响应式样式,移动端操作按钮整行排列。
- 更新首页 index.html :欢迎卡片增加“进入 Git 服务”入口链接(/git/)。
- 更新 lzwlab.nginx.conf :按 Gitea 官方子路径(sub-path)方案新增 /git/ 反向代理到本机 3000 端口。
- 更新 README.md 与 setup.md :补充 Gitea Git 服务部署记录与使用说明。
@@ -38,6 +46,7 @@
- 更新首页 index.html :新增“📊 服务器状态”入口(/beszel/)。
- 更新 lzwlab.nginx.conf :新增 /beszel/ 反向代理到本机 8092 端口。
- 更新 README.md 与 setup.md :补充 Beszel 服务器监控部署记录。
- 更新 README.md 与 setup.md :补充共享剪贴板功能说明、接口与部署验证记录。
### Removed
@@ -59,6 +68,8 @@
- 应用登录密码仅以 scrypt 哈希保存在 /etc/lzwlab-transfer/config.json (root:lzwlab 640),不在代码或仓库中保存明文。
- 会话 Cookie 启用 Secure/HttpOnly/SameSite=Lax,登录接口按 IP 限流,写接口校验 X-Requested-With 头。
- Beszel hub 端口仅绑定 127.0.0.1,公网仅经 nginx HTTPS 访问 /beszel/;管理员凭据仅记录于 Authentication.md,首次创建后清空服务器 .env 中的明文密码。
- 共享剪贴板沿用文件快传的登录鉴权与 X-Requested-With 校验:内容仅登录用户可见,列表接口不返回完整正文,单条长度(默认 25.6 万字符)与保留条数(默认 200 条)均有上限,到期内容由定时任务自动删除。
- deploy_transfer.py 增加 --keep-credentials 后,日常更新代码不再重建 secret_key 与密码哈希,避免每次部署都让在线会话失效或意外重置登录密码。
## [1.0.0] - 2026-08-24