Commit Graph
34 Commits
Author SHA1 Message Date
wangairnan 2be5d4d25b fix(ci): 发版工作流改为零 action 纯 run 实现
Release / release (push) Failing after 13s
runner 实例地址注册为 localhost:3000,job 容器内不可达,导致所有
JS 类 action(checkout/setup-go/release)无法工作。改为:
- git clone 公网域名检出,tarball 安装 Go(go.dev 失败回退中国镜像)
- 容器固定 node:24-bookworm(runner 默认镜像无 node)
- curl 调 Gitea API 创建 Release 并上传产物,npm/Go 模块代理双层回退
2026-09-09 23:09:21 +08:00
wangairnan 95cac4688d fix(ci): 发版 job 显式使用 node 容器镜像
Release / release (push) Failing after 2m8s
runner 默认镜像无 node,checkout/setup-go/release 等 JS 类 action
第一步即失败(Cannot find: node in PATH)。改用 node:24-bookworm
镜像(自带 node 与 git),并省去 setup-node 步骤。
2026-09-09 23:00:32 +08:00
wangairnan ad4a87fc9f feat(ci): 基于 v* 标签的多架构自动发版
Release / release (push) Failing after 8s
- 新增 .gitea/workflows/release.yml:推送 v* 标签触发,构建前端嵌入后
  交叉编译 linux/darwin(amd64+arm64),生成变更日志并创建 Gitea Release
- 新增 scripts/build-release.sh:make dist 与 CI 共用的产物构建脚本,
  tar.gz 打包 + SHA256SUMS;不含 windows(internal/store 依赖 Unix Umask)
- Makefile 增加 dist 目标;版本注入沿用 git describe + ldflags(pn version)
2026-09-09 22:46:12 +08:00
wangairnan 92d89717c5 refactor(web): 残留自制控件统一替换为 antd 组件
- 状态点自制徽标改用 Badge,回收站剩余天数紧急态改用红色 Tag
- 危险按钮改用 danger 属性并补充语言,text+danger 不套实心红样式
- 后台搜索框改 antd Input 前缀形态,删除手写容器与聚焦环样式
- 加载态统一 Spin/Skeleton(Table 用 loading),空态统一 Empty
- Segmented 选项计数改用 Badge count,弱化为 muted 灰
- 首页分页说明改 Pagination showTotal,笔记错误态改 Empty 承接布局
- 代码块复制按钮改 antd Button 并增加「已复制」反馈,修复悬浮不显示
- 博客/后台图标按钮与溢出菜单触发器统一为 antd Button type=text
2026-09-09 15:37:36 +08:00
wangairnan 969d537aee fix(web): 后台侧栏「新建笔记」上移至首位,移除管理员信息中的「站点所有者」
侧栏 Menu 与移动端 tabbar 同步调换,编辑页高亮新建入口的逻辑不变。
2026-09-09 12:25:10 +08:00
wangairnan 614bfe2852 fix(web): 后台侧栏选中项改黑底反白,修复明暗模式下选中态看不清
自定义主题 colorPrimary 为近黑/近白,antd Menu 选中项默认的
primary 淡色底与侧栏底色对比不足;选中/hover 态改用 sidebar
token(黑底反白/浅灰底),并覆盖此前对未选中文字色的误覆盖。
2026-09-09 12:09:33 +08:00
wangairnan 5bac272f6d feat: 前台标签接入 antd 组件、列表封面图、favicon 随站点 Logo 及侧栏收窄
- 前台列表/详情/标签页标签统一 antd Tag;标签页改 CheckableTagGroup 单选
  (选中态由组件承接,再点已选标签回到全部);移除首页标签筛选条,
  标签入口收敛至顶部「标签」页
- 公开列表新增 cover 字段(取正文第一张站内图,store.FirstImageRef),
  首页条目左侧显示封面缩略图,无图条目保持纯文字
- favicon 随站点 Logo:webui.Meta.Icon 服务端注入 index.html,
  前端 useSiteTitle 兜底(dev 模板占位符场景)并即时生效;
  设置页「重置默认」清空 Logo 后回退内置 /favicon.svg
- 后台侧栏改 antd Menu(inline 分组),宽度 256→208、窄侧栏档 224→184
2026-09-09 11:51:06 +08:00
wangairnan 5457aeaa33 feat: 新增发布日期自选、站点 Logo、回收站清空等十项改进
- 编辑页标题改 filled 变体;标签改 tags 选择器(可勾选既有/输入新建)
- 笔记发布日期可自选(schema v2 新增 published_at 并回填),前台展示发布日期
- 登录页移除「请输入管理密码以继续」「连续失败将被暂时锁定」文案
- 站点设置每页条数收敛为 10/20/30/50 选择器,后端白名单同源校验
- 站点设置两卡片宽屏左右/窄屏上下;修改密码按钮改常规大小
- 后台各页顶栏固定高度,切换页面不再抖动
- 站点 Logo:settings 新增 site_logo(站内路径),gc/孤儿清单豁免 Logo 图片,
  博客 header 站点名前展示,设置页支持上传/更换/清除
- 回收站右上角一键清空(DELETE /api/admin/trash,含确认弹窗)
- pn init 写入 Markdown 语法示例文档(slug welcome,公开)与程序生成的示例图片
2026-09-09 11:10:30 +08:00
wangairnan 87d9bab5dc feat(web): 整体替换 UI 框架为 Ant Design 6 并接入自定义主题
以 antd ConfigProvider + antd-style 承载 zinc 风格自定义主题(明暗双套 token),
button/input/select/notification 用 createStyles 定制;三态主题经
darkAlgorithm 无刷新切换;use-toast 改基于 antd notification;
移除 shadcn/ui 组件目录与 radix 依赖;样式桥接层保证排版与多端布局不变。
2026-09-09 10:35:24 +08:00
wangairnan 5a78de6aa6 feat(web): 后台主题切换与移动端溢出菜单,设置保存按钮上移 topbar
- 后台 topbar 右侧常驻主题切换按钮(复用博客端三态循环逻辑),
  tooltip 新增 tip-below 朝下变体适配近视口顶部的 topbar
- <768px 侧栏隐藏时主题/返回博客/退出登录收进「···」溢出菜单;
  博客 <640px 首页/标签收进 header 溢出菜单(带 active 高亮)
- 新增通用 MoreMenu 组件:点击外部/Escape/选中项自动关闭,
  面板用 --popover 令牌 + 0.15s 淡入,与现有卡片风格一致
- 站点设置保存按钮移至 topbar 标题右侧,删除底部 sticky 保存条
- 修复两处回归:tip-below 气泡居中锚定越界产生页面横向滚动条
  (改右对齐);pn-site-menu-btn 基础 display 规则源码顺序在
  640px MQ 之后导致移动端菜单按钮不显示(前移至博客 header 区)
- 已用 Playwright 在 1440×900 / 390×844 实测后台四页与博客
  菜单展开/跳转均无溢出
2026-09-09 00:12:21 +08:00
wangairnan 646a49a26e feat(web): 页脚品牌与备案信息、首页文案精简及导航/侧栏交互优化
- 页脚「纯文本驱动」改为 Powered by Pure Note(链至仓库地址),新增
  公安备案展示:国徽图标 + 备案号链至 beian.mps.gov.cn,备案号可在
  后台设置(站点描述下一项)配置,留空不显示
- settings 白名单新增 beian_no 键(trim、≤200 字符、可清空),/api/site
  一并下发;TestSettingsWhitelist 补生效/清空/超长用例
- 去除首页 hero 文案区(PURE NOTE · 极简笔记/记录,而不打扰。等),
  同步清理失效样式并微调顶部留白
- 博客 header 首页/标签菜单补 House/Tags 图标,与管理按钮同风格
- 管理侧栏「返回博客/退出登录」浓缩为图标按钮置于用户行右侧,CSS
  悬浮 tooltip(top-center、带箭头,原生 title 延迟高不采用),返回
  博客改新窗口打开
2026-09-08 23:40:57 +08:00
wangairnan 13ad202924 chore(web): 重新生成 package-lock 统一官方源并更新次要依赖 2026-09-08 23:05:15 +08:00
wangairnan f16f583978 docs: 补充 README 界面功能、Safari 登录注意事项与前端架构
- 功能清单补「界面」条目:9 页面响应式 SPA 与三态主题
- 开发模式说明为何明文 HTTP 必须带 --dev(WebKit 无 Secure Cookie
  localhost 豁免)及生产 HTTPS 的自动加固行为
- 架构树展开 web/ 前端子目录(pages/components/lib)
2026-09-08 21:46:31 +08:00
wangairnan dda5ad1e5a fix(web): 登录表单补充隐藏用户名字段以兼容 Safari 密码管理器
Safari/WebKit 在明文 HTTP 下不保存 Secure Cookie(无 localhost 豁免,
Chrome/Firefox 有),__Host- 会话被静默丢弃导致登录成功后仍弹回登录页;
本机调试需以 --dev 启动(pn_session 无 Secure,loopback-only 守卫,§7.3-3)。
纯密码表单另令 Safari 保存密码弹窗要求手动输入用户名:补充 sr-only 用户名
输入(autoComplete=username,只读预填 admin),弹窗不再阻断登录。
新增 login.test.tsx 回归测试锁定用户名/密码字段的自动填充标记。
2026-09-08 21:42:52 +08:00
wangairnan 51f528f516 feat(web): 重构 9 页面界面并统一设计令牌与响应式布局
- index.css 以 Tailwind 4 @theme 落地设计令牌,全部页面按新设计稿重写
  样式:首页/笔记详情/标签页/登录/后台列表/编辑/回收站/设置/404
- Layout 重构导航与主题切换;新增 Toast 轻提示组件
- 移除 vite 手动 codeSplitting:分组 chunk 会被提升进入口静态依赖并对
  HTML 发出 modulepreload,lazy 路由的 CodeMirror 在所有页面被预加载
  (Lighthouse unused-javascript 549KiB 的根因)
- vite dev 代理补 changeOrigin:false,保留浏览器原始 Host,避免后端
  Origin 校验误判跨源 403
2026-09-08 21:41:05 +08:00
wangairnan 412821684b docs: 新增第 2 轮评审报告、D36 决策记录与 serve 旧词收尾
review-round2.md 全量修复清单;decisions.md 澄清 D6、新增 D36;design/acceptance 残留 serve → start(P2-14)。
2026-09-08 17:32:57 +08:00
wangairnan b94e9b1721 fix(web): 修复图片上传、自动保存竞态、登录竞态并统一失效公共缓存
FormData 不强设 Content-Type(P1-2),补 api 客户端回归测试; 自动保存成功仅失效列表与公共键,防详情 refetch 回滚输入(P1-4); login/logout 以请求序号丢弃迟到 /api/me 响应,401 统一回调跳登录(P2-15); 首页不硬编码 page_size,写操作后统一 invalidatePublic,TagPage 补 error 分支(P2-15)。
2026-09-08 17:32:57 +08:00
wangairnan 3105b0415c fix(middleware): Origin 同源校验增加 scheme 比对
http/https 不再视为同源;可信反代后采信 X-Forwarded-Proto(round2 P2-11),补测试。
2026-09-08 17:32:57 +08:00
wangairnan 1272d680a8 fix(httpapi): no-store 接线、图片缓存头时序、解压炸弹上限与 RSS 空日期
/api/admin/* 挂 NoStore、/api/me 内联 no-store(P1-3); 图片缓存头移至数据读取成功后,404 不携带 public immutable(P2-9); 上传先 DecodeConfig 限制像素 ≤2^25 再解码(P2-12); 无公开笔记时省略 lastBuildDate(P2-10)。
2026-09-08 17:32:52 +08:00
wangairnan ba7d5dd01f fix(auth): VerifyPassword 校验 PHC 参数上下界
t/p=0 会使 argon2.IDKey panic、m 超大可 OOM;越界一律返回 false(round2 P2-8),补畸形参数用例。
2026-09-08 17:32:52 +08:00
wangairnan a35e7fdfd3 fix(cmd): 维护子命令改经 OpenData 打开,--allow-newer 仅限 start/init
passwd/backup/gc 不再触发迁移与 user_version 守卫,回滚旧二进制场景备份仍可用(round2 P1-5,落实 D6)。
2026-09-08 17:32:52 +08:00
wangairnan 132c4a1ba2 fix(store): 修正邻接查询、GC 竞态、备份权限与设置解析,新增 OpenData 纯数据打开
邻接查询 tie-break 与 pinned 排序键与列表序对齐,补表驱动测试(round2 P1-1); GC DELETE 带条件复查,防 SELECT 与 DELETE 间恢复/引用竞态(P2-6); 备份经 umask 收紧创建即 0600,消除 chmod 前暴露窗口(P2-7); page_size 改 strconv.Atoi 全文解析,拒部分解析脏值(P2-13); OpenData 不迁移、不做版本守卫(D6/P1-5)。
2026-09-08 17:32:47 +08:00
wangairnan a885b52f18 docs: 新增提交规范(Conventional Commits)并链接至 README
明确 type/scope/subject/body/footer 规则与提交拆分约定;README 文档索引加入链接。
2026-09-08 17:32:44 +08:00
wangairnan 27ec9badf2 前端构建告警清理:happy-dom 替代 jsdom、批准 esbuild 安装脚本、CodeMirror 与重路由懒加载分包 2026-09-08 17:01:36 +08:00
wangairnan edfc787e1a 二进制及自命令命名统一简化 2026-09-08 17:01:09 +08:00
wangairnan 6bfe20ee00 文档与 usage:--data-dir 默认 ./data,示例去除冗余参数 2026-09-08 16:13:36 +08:00
wangairnan 2d02756fa3 新增 reset-password 子命令:免旧口令重设管理员口令并吊销全部会话 2026-09-08 16:10:16 +08:00
wangairnan 4cba55f472 修复标签过滤查询:json_each 引用别名 n.tags,修复 /api/notes?tag= 500 2026-09-08 15:27:48 +08:00
wangairnan fca075fffa 使用mise管理环境依赖 2026-09-08 14:30:50 +08:00
wangairnan 183676428e 构建、部署与验收文档:Makefile、冒烟脚本、systemd/Caddy、决策与验收报告
- Makefile:web / sync-assets(go:embed 约束拷贝)/ build / linux /
  test / smoke / dev / vulncheck;版本信息 ldflags 注入
- scripts/smoke.sh:构建冒烟(§8.3-6)——起服务断言 SPA 资源 200 +
  正确 MIME、meta 注入、安全头、私有不可见(19 项断言)
- deploy:pure-note.service(沙箱加固)、每日 gc+backup 的
  maint service/timer(03:00 Persistent)、Caddyfile 反代示例
- docs/decisions.md:35 条实施决策留档(D1–D35)
- docs/acceptance.md:§9.3 检查单逐项证据、§13 测试组映射、
  §12 里程碑门、浏览器端到端走查记录
- README.md:快速开始、测试、部署与升级/恢复 SOP
2026-09-08 08:15:02 +08:00
wangairnan e9316c9169 前端:React 19 + Vite 8 + Tailwind 4 博客与管理后台 SPA
- 渲染管线(§8.2):react-markdown + remark-gfm + rehype-sanitize
  (GitHub schema 扩展 hljs class 与 checked)+ rehype-highlight 纯 class
  高亮;链接强制 target=_blank + rel=nofollow noopener noreferrer;
  schema 快照与恶意 Markdown 冒烟测试(vitest 6 用例)
- 编辑器:CodeMirror 6 源码编辑 + 分屏实时预览 + 工具栏 +
  粘贴/拖拽图片上传;slug 首存定稿(冲突 409 就地高亮)、
  摘要留空自动截取、2s 防抖自动保存
- 页面:博客首页(置顶/分页/标签云)、详情(面包屑/上一篇下一篇)、
  标签页、登录、管理列表/回收站/设置/改密、404
- lib:api 客户端(统一包络 + 内存态 CSRF,禁 localStorage)、
  AuthContext(/api/me 重取)、暗色主题(class 切换 + 系统跟随)
- index.html 内嵌 Go template 占位符供服务端 meta 注入;
  vite base 固定 '/'(防深链白屏);/api 代理 127.0.0.1:8080
2026-09-08 08:14:52 +08:00
wangairnan 6e83426ca9 HTTP 层与单二进制入口:路由 handler、会话/CSRF/限流防线、SPA 嵌入与 meta 注入
- internal/httpapi:§7.1 全部路由(公开浏览 / 管理端 / 认证 / feed),
  服务端统一可见性过滤(含回收站仅 admin 出口)、图片魔数校验与
  immutable/no-store 缓存头分流、统一 404 防枚举、slug 自解冲突与
  409 字段级错误、fail-only 登录限流(429 + Retry-After)、
  设置白名单(永不序列化口令哈希)
- internal/webui:go:embed dist + SPA fallback(资产指纹长缓存、
  深链回退 index.html)+ html/template 元信息注入(仅可见笔记)
- cmd/pure-note:serve/init/backup/gc/version 子命令,优雅停机与
  每小时会话清理
- 含全部 §13 测试组:表驱动可见性矩阵、迁移守卫、认证会话、CSRF、
  上传、回收站/gc、slug 策略、设置白名单、webui MapFS 单测
2026-09-08 08:14:23 +08:00
wangairnan 247e88c4fb 后端基础层:模块定义、配置解析、SQLite 存储层、Argon2id 认证与 Markdown 渲染
- internal/config:serve/init/backup/gc 子命令参数解析(--dev 强制 loopback 守卫)
- internal/store:user_version 版本化迁移(仅追加式 + 越界拒启 + --allow-newer)、
  笔记/图片/引用/会话/设置 DAO、并集可见性查询、VACUUM INTO 在线备份、
  回收站 30 天 + 孤儿图 7 天宽限 gc
- internal/auth:Argon2id PHC 串(m=19456,t=2,p=1)、256bit token 与 SHA-256 摘要
- internal/markdown:goldmark(默认转义)+ bluemonday 双保险,摘要纯文本提取
- internal/middleware:安全头(CSP/HSTS/nosniff 等)、错误日志、
  有界令牌桶限流(per-IP 桶上限 + TTL 逐出)、Origin/Referer 同源校验
2026-09-08 08:14:12 +08:00
wangairnan 685f628e26 初始提交:Pure Note 设计方案 v1.1(含第 1 轮审评报告与修订)
- docs/design.md: 技术调研与设计方案,已按 review-round1.md 的 24 项
  审评发现(P0x4/P1x11/P2x9)完整修订
- docs/review-round1.md: 第 1 轮审评报告(留档)
- .gitignore 与 internal/webui/dist 占位
2026-09-08 00:20:54 +08:00