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 |
|