tamakyi
5fdc3df22d
修复: 评论组件泄露私密 token、cwebp 无超时、选项长度与去重
...
Waline(安全)
- item.html 的 path 从 window.location.href 改为剔除 ?t= 后的 URL。
私密题 /_/<domain>/<id>?t=<token> 的钥匙原本会整条发往 Waline 服务端
并落进其访问日志。只删 t、保留其他参数,公开题的评论线程键不变。
cwebp(可靠性)
- ConvertGifToAnimatedWebP 改用 exec.CommandContext + 30s 上限。
原来裸 exec.Command 无超时,畸形/超大 GIF 会把子进程和上传 goroutine 一起挂住。
超时杀进程并记 Warn,调用方按既有逻辑回退为原 GIF,不影响上传成功。
投票选项长度(正确性)
- vote_options.content 由 varchar(200) 放宽到 300,与配置默认值一致。
此前 201–300 字的选项通过校验后在写库阶段失败。
- 新增 db.MaxVoteOptionLen;voteOptionMaxLen() 取配置与存储上限的较小值,
校验与前端 maxlength 同源,避免配置调大后再次越界。
多选 checkbox 去重(正确性)
- 抽出 appendUniqueValue,预置值与「其他」文本共用同一 seen 集合。
此前重复提交同名字段会让同一选项在统计里被计多次。
测试
- vote_dedupe_test.go:去重与顺序。
- vote_option_len_test.go:配置小于/等于/大于存储上限三种情形。
- TestVoteOptionMaxLengthRoundTrip:300 个多字节字符存回不截断。
- TestVoteOptionColumnWidens:把列改回 200 后 AutoMigrate 能扩回 300(老库升级路径)。
验证:WSL2 Debian + PostgreSQL 全量 go test ./... 27 个包全绿;
隔离实例渲染单题页确认新的 path 逻辑。
2026-11-05 17:04:47 +08:00
tamakyi
937e688cfa
可靠性: 完善 R2 备份恢复与对象生命周期
2026-11-05 08:41:55 +08:00
tamakyi
08bbd17751
storage: 对齐图片对象 key 到生产口径
...
生产真实 key 为 `YYYY/MM/<UnixNano>.<ext>`(无前缀、无 day 层),
与 route/question/page.go:uploadImage 一致;internal/storage 里三个
上传函数仍用旧的 `picture/ 前缀 + YYYY/MM/DD + 15hex + 无扩展名`,从未上线。
- PictureKeyPrefix 置空,统一由 uploadKey 生成 key
- 扩展名跟随最终 ContentType(webp 转成功用 .webp,回退原图用原格式)
- OSS 原图直传通道取原文件名扩展名
- 新增 picture_test.go 锁定 key 格式,防回归
2026-10-29 20:04:31 +08:00
tamakyi
da7e76a7db
webp fix v2
2026-10-16 09:39:30 +08:00
tamakyi
e4457e3da4
webp fix v1
2026-10-15 11:41:19 +08:00
tamakyi
adcc42cc8c
fix anwser token and database issus
2026-09-15 11:06:09 +08:00
tamakyi
e3e59e7c69
chore: baseline snapshot before moderation-strictness feature
...
Repo .git was damaged (refs/ missing, index truncated, object store near-empty).
Repaired via git init (rebuilt refs), stale index preserved as .git/index.corrupt-20260910.bak,
then full worktree committed as a rollback baseline.
2026-09-10 10:56:27 +08:00