feat: 云笔记增强 - 安全加固 + 回收站/版本历史/分享/批量导出 + 前端优化

- 安全: 认证改随机token会话(弃固定cookie), 笔记密码SHA256升级为bcrypt(自动迁移),
  堵住GET /api/notes/:id泄露带密码笔记, CORS收紧+SameSite防CSRF, 上传图片内容嗅探
- 回收站: 软删除(deleted_at), 列表/恢复/彻底删除/清空, 目录子树连删连恢复
- 版本历史: note_versions表存快照, 每次保存自动留档, 支持查看/回滚
- 分享: 生成随机token分享链接, 支持过期时间, 公开阅读页share.html
- 批量导出: 全部笔记打包zip(按目录结构+front matter)
- 前端: 深色模式, Mermaid图表, 待办清单checkbox, 字数统计;
  后台新增回收站/历史/分享面板和批量导出按钮
- 新增deploy/note-manager.service systemd单元与smoke_test.py
This commit is contained in:
Your Name
2026-08-11 11:21:29 +08:00
parent f0eb822e68
commit 74fa759274
18 changed files with 1968 additions and 228 deletions
+73
View File
@@ -583,3 +583,76 @@ await fetch('/api/notes', {
credentials: 'include'
});
```
---
# 新增功能 APIv2
## 管理接口认证(安全优化)
后台管理写操作(创建/更新/删除/回收站/版本/分享/导入导出/上传)统一走 `/admin/api`
需登录后携带服务端会话 cookie(随机 token,非固定字符串)。未登录返回 401。
## 安全策略调整
### 公开接口 `GET /api/notes/:id`
仅返回 **公开且未设置密码** 的笔记完整内容。带密码或未公开的笔记返回 403(需走密码验证接口),
防止绕过密码保护直接读取内容。
## 回收站(软删除)
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/admin/api/trash` | 回收站列表(含已删除的目录和笔记) |
| POST | `/admin/api/restore/:id` | 恢复笔记/目录(目录连子树一起恢复) |
| POST | `/admin/api/purge/:id` | 彻底删除(不可恢复,含版本历史) |
| POST | `/admin/api/empty-trash` | 清空回收站 |
删除笔记 `DELETE /admin/api/notes/:id` 现为软删除(进入回收站),目录删除会连带软删除所有子项。
## 版本历史
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/admin/api/notes/:id/versions` | 获取笔记全部历史版本 |
| POST | `/admin/api/notes/:id/restore-version` | 恢复指定版本(form: `version_id` |
每次保存(标题或内容变化)自动生成快照。
## 分享链接
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/admin/api/notes/:id/share` | 创建分享(form: `expire_hours`0=永久) |
| POST | `/admin/api/notes/:id/revoke-share` | 撤销分享 |
| GET | `/api/share/:token` | 公开获取分享笔记 JSON(有密码需带 `?password=` |
| GET | `/share/:token` | 分享阅读页(HTML) |
## 批量导出
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/admin/api/export-all` | 全部笔记导出为 zip(按目录结构 + YAML front matter |
## 图片上传(安全增强)
上传会做**内容嗅探**(magic bytes 校验),不仅检查扩展名。伪装成图片的脚本会被拒绝。
## 后台管理笔记接口
管理端读取/写笔记统一走 `/admin/api/notes`(可访问私有、带密码笔记):
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/admin/api/notes` | 创建 |
| GET | `/admin/api/notes/:id` | 详情(完整内容) |
| PUT | `/admin/api/notes/:id` | 更新 |
| DELETE | `/admin/api/notes/:id` | 软删除 |
## 前端新增功能
- **深色模式**:前台/后台均可切换(🌙/☀️ 按钮),偏好存 localStorage
- **Mermaid 图表**:前台 Markdown 中 ` ```mermaid ` 代码块渲染为流程图/时序图等
- **待办清单**:前台渲染 `- [ ]` / `- [x]` 可勾选清单
- **字数统计**:前台笔记详情显示字数与预估阅读时长
- **回收站/版本历史/分享**:后台工具栏按钮 + 面板