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:
@@ -583,3 +583,76 @@ await fetch('/api/notes', {
|
||||
credentials: 'include'
|
||||
});
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 新增功能 API(v2)
|
||||
|
||||
## 管理接口认证(安全优化)
|
||||
|
||||
后台管理写操作(创建/更新/删除/回收站/版本/分享/导入导出/上传)统一走 `/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]` 可勾选清单
|
||||
- **字数统计**:前台笔记详情显示字数与预估阅读时长
|
||||
- **回收站/版本历史/分享**:后台工具栏按钮 + 面板
|
||||
|
||||
Reference in New Issue
Block a user