Repository navigation
Releases: erikwang2013/poster-rust
Release list
v2.0.1
v2.0.0
v2.0.0
深度安全审计修复批次 + 全文档去 PHP 化。含破坏性 API 变更(严格 semver 主版本,详见 CHANGELOG)。
安全
- 限流记录与验证码载荷彻底隔离(key 形态强校验 +
captcha:命名空间)——修复跨 key 限流绕过。 - 限流身份哈希改用进程级随机种子,不再可离线复算。
X-Forwarded-For默认不再采信(只信对端 IP);代理部署显式开启Guard::with_trust_forwarded_for(true)。- warp / poem 的 verify 请求体补 2 MiB 上限。
修复
- 限流原子化(窗口并入计数键 +
Storage::increment_or_init);验证码一次性消费改原子抢删。 - 存储回收与预算封顶(Memory 64 MiB / File 65536 文件)。
- 旋转文本画布像素预算、艺术字描边上限、元素几何护栏(超大模板参数返回错误而非 OOM/panic)。
- Redis 存储读写超时 + 惰性重连;
FileStorage::set持锁。 - warp / rocket 端点契约修正;bee-rust 补 verify 路由;换行支持假名/谚文;snake_case 模板键生效。
- 修复 3 个 doctest(全特性 CI 恢复);8 框架阻塞调用移入阻塞池。
性能
- 字体与整行渲染缓存改为进程级(跨请求复用)。
变更(破坏性)
- 公共枚举
#[non_exhaustive];Storage::delete返回Result<bool>;bee_rust::router签名变更。 PosterConfig::validate():set_global拒绝非法配置。
文档
- 全文档去 PHP 化(注释 / 测试名 / README / 架构图);README 数字实测修正。
- CI:9 个单 feature 编译矩阵;rustfmt 全仓落地并转正门禁。
v1.1.2
文档更新(无代码/API 变化)。
文档
- README(中 / 英)移除「与 PHP 版的差异 / Differences from poster-php」章节。
- 项目宠物下方新增语言标签:
Rust 1.85+ · edition 2024(项目语言)+ 文档语言互链
(文档语言:中文/docs: English,均为 shields.io 徽章,三个链接已验证返回 200)。
说明
本版仅有文档改动(README 随包分发,故按补丁号发布);公开 API、运行时行为与依赖均与 v1.1.1 一致。
MIT License · Copyright © 2026 erik erik@erik.xyz · https://erik.xyz
v1.1.1
rocket / poem / salvo 的 POST {path}/verify 端点补上运行时 e2e(v1.1.0 时这三个框架只有编译验证)。
测试
- 新三套端到端用例(各框架自带测试客户端,与 warp 那套同构):
tests/integrations_rocket.rs(rocket::local::blocking::Client)— 5 用例:XFF 分桶限流、
对端地址分桶(.remote(addr)伪造)、缺 XFF 走"unknown"兜底桶、错误答案、非法 JSON 400tests/integrations_poem.rs(poem::test::TestClient)— 4 用例:Route::data提取器、
取参顺序、非 TCPRemoteAddr回退、非法 JSON 400tests/integrations_salvo.rs(salvo::test::TestClient)— 5 用例:parse_json失败 →
400 渲染路径、remote_addrNone 回退、GET /captcha/new路由平铺回归(钉住 1.1.0 修复的拼接 bug)
- Cargo.toml 仅 dev-dependencies 变动(poem/salvo 补
test特性,均关默认特性);公开 API 与运行时行为无变化,故按补丁号发布。
覆盖边界(诚实标注)
- poem / salvo 的测试客户端无法设置对端地址,「XFF 缺失 → 对端 IP」分支只有 rocket 跑到端到端;
Guard未托管 /verify_as出错(401/500)在测试环境无法触发,未覆盖。
质量
8 个框架的 verify 端点现全部有运行时覆盖:axum 2 · warp 3 · rocket 5 · poem 4 · salvo 5(19 个 e2e 用例);
默认 160 用例全绿;cargo clippy --features rocket,poem,salvo,warp --all-targets -- -D warnings 零告警。
MIT License · Copyright © 2026 erik erik@erik.xyz · https://erik.xyz
v1.1.0
8 个框架端点齐平(补 verify)+ 两处路由修复。
新增
- rocket / poem / salvo / warp 补上
POST {path}/verify(此前只有 axum / actix / bee-rust / e-cat 有):
请求体{"key","answer"}→{"pass": bool},限流身份按请求派生(X-Forwarded-For第一段 → 对端 IP →"unknown"),
与其余框架逐字段一致。现在 8 个集成统一提供三条路由:GET {path}/new、GET {path}/{key}、POST {path}/verify。 - 新增
tests/integrations_warp.rs(warp::test):XFF 分桶限流、错误答案、非法 JSON 400。
修复(v1.0.x 存在)
- salvo 路由表:
{prefix}/new原先嵌在{prefix}/{key}之下,salvo 按相对段拼接后实际路径成了
/{prefix}/{key}/{prefix}/new——GET /captcha/new一直 404。改为平级兄弟路由,参数段放最后。 - warp 出图路由未限方法:任意方法都会被
path::param吃掉;补warp::get(),否则
POST /captcha/verify的非法 JSON 会「回退」到出图路由变成 404 而不是 400。 - clippy
--all-targets清零(examples / tests / benches 共 5 处 lint),CI 的 clippy 同步升级为--all-targets;
src/lib.rs文档链接[Guard::verify]→[Guard::verify_as]。
质量
- 160 个测试用例全绿;warp 端到端 3/3;axum 端到端 2/2
- 逐 feature 编译:axum / actix / rocket / poem / salvo / warp / bee-rust / ecat 单个开启均 0 错误
cargo clippy --all-features --all-targets -- -D warnings零告警
MIT License · Copyright © 2026 erik erik@erik.xyz · https://erik.xyz
v1.0.1
性能优化 + 两处 v1.0.0 编译缺陷修复。
修复
- 只开单个框架 feature 时无法编译(v1.0.0 缺陷):
axum缺json/query/tokio/http1特性、poem缺server特性。此前只有--all-features通过,是因为bee-rust(bee_router)间接打开了 axum 的这些特性,掩盖了缺口。现在 8 个 feature 逐个单独验证全绿:axum / actix / rocket / poem / salvo / warp / bee-rust / ecat(+ redis)。 - 集成层限流身份:校验端点此前把所有请求计入同一个常量桶,用户量一大互相误杀。现按请求派生(
X-Forwarded-For第一段 → 对端 IP →"unknown"),新增Guard::verify_as,README 补代理场景安全提示。
性能(输出逐字节一致)
- 海报渲染结果缓存(对齐 PHP
$rendered语义):重复render()/save()/output()只渲染一次,元素/背景/尺寸变更即失效。示例多次输出合并为 1 次渲染。 - 文字整行渲染缓存:重复绘制(水印、描边艺术字)2.3×,旋转重复场景 10-20×。
- 画布原语快路径:整数 alpha 判定 + 行切片;顺带消除两处
expect()panic 分支。
工程化
benches/perf.rs基准套件(PERF_ASSERT=1时断言预算)- GitHub Actions CI(rustfmt / clippy
-D warnings/ 三平台测试 / ubuntu 全特性) - README 徽章、docs.rs
all-features元数据、CHANGELOG
质量
- 160 个测试用例全绿;axum 端到端集成 2/2;
cargo clippy --all-features -- -D warnings零告警 - 基准(release):滑块 11.5ms · 点击 9.7ms · 全元素海报 51.9ms · 100 次文字 32.5ms
MIT License · Copyright © 2026 erik erik@erik.xyz · https://erik.xyz
v1.0.0
poster-rust 首个正式版本 —— poster-php 的 Rust 移植。
核心能力
- 验证码:点击(文字 / 11 种程序化图标目标)· 旋转 · 滑块(矩形 / 凹凸拼图)· 随机切换;
一次性 key、默认 3 次尝试、TTL 300 秒、跨 key 窗口限流、可选行为轨迹校验 - 海报生成:链式 Builder + 14 种元素(文字/图片/头像/二维码/形状/分割线/水印/表格/图表/日历/艺术字/Emoji/图标/颜文字)
- JSON 模板(
{{变量}}替换,导出往返一致)
- JSON 模板(
- 集成:原生
Guard请求守卫 + 8 个框架适配(axum / actix-web / rocket / poem / salvo / warp / bee-rust / e-cat,feature 门控) - 存储:Memory / File(原子写)/ Redis(feature)
- 纯 Rust:无 GD / ImageMagick 等系统库依赖;项目宠物 Posty 随包分发,可画进海报或作缺图占位
安装
cargo add poster-rust质量
- 147 个测试用例全绿;
cargo clippy --all-features -- -D warnings零告警 - 文字渲染与 PHP 版对拍一致(
size=48墨迹高 65px、基线位置一致) - 中英双语文档:README、架构设计 / 功能设计 / 请求周期 / 生命周期 SVG 图
MIT License · Copyright © 2026 erik erik@erik.xyz · https://erik.xyz