Serendipity
|
b053272825
|
fix: 安全漏洞修复 — CLI密码泄露 + margin上限 + 路径检查 + CSP/限速
CRITICAL:
- CLI --password 未提供时自动从 QRGEN_WIFI_PASSWORD 环境变量读取
避免密码出现在 ps aux / /proc/pid/cmdline 进程列表中
HIGH:
- unsafe from_utf8_unchecked SAFETY 注释增强, 详细解释为何有效
- CLI --margin 添加 value_parser range(0..=100), 防止 u8=255 导致内存爆炸
- Web CORS permissive 添加注释说明公开 API 设计理由
- GUI FS 权限收紧: 写权限从 /c/Users/33644/** 限制为 Downloads/Documents/Desktop/AppData
MEDIUM:
- 新增 QrError::InvalidEcLevel(String), 不再复用 InvalidVersion(0)
- --logo/--batch/--output_dir 均添加 check_path() 路径遍历检查
- Web 添加 tower::limit::ConcurrencyLimitLayer(10) 并发限制防 CPU 耗尽
- decode_image 添加 4096x4096 图片尺寸上限防解压炸弹
LOW:
- Web 添加 Content-Security-Policy 响应头
|
2026-06-21 16:09:08 +08:00 |
|
Serendipity
|
cd75141037
|
refactor: P0-P5 全面架构重构
P1 thiserror 类型化错误:
新增 core/src/error.rs QrError 枚举, 全链 String -> QrError,
包括 EmptyInput/InvalidVersion/DataTooLong/DecodeFail 等 8 种变体
P2 text_builder Tauri 统一:
新增 build_qr_text Tauri command, 删除前端 qrText.ts,
所有 mode 组件改为 invoke 调用 Rust 端构建文本
P3 QrConfig 颜色字段移除:
从 QrConfig/QrCode 移除 fg_color/bg_color,
改为 to_svg/to_image_bytes 参数传递
P4 前端 4 项合并:
Context 拆分为 StateContext+DispatchContext (H10),
新建 useModeForm 通用 hook (M11),
VCardMode grid-cols-2 网格布局 (M13),
persistHistory/loadHistory 迁至 utils/storage.ts (L9)
P5 算法优化:
MaskedView 懒计算替代 8 次 Matrix 克隆 (H9),
encoding_rs 精确 Kanji Shift JIS 映射 (H12)
验证: cargo check+clippy 通过, 81+24+7 全部测试通过
|
2026-06-21 15:09:10 +08:00 |
|
Serendipity
|
b41f6ee7df
|
feat: 格式扩展 — 支持 BMP/JPEG/WebP 输出
- png.rs 重命名为 image.rs,新增 OutputFormat 枚举
- QrCode::to_image_bytes 支持 PNG/BMP/JPEG/WebP
- CLI 新增 -f/--format 参数(png/bmp/jpeg/webp)
- Web API fmt 参数扩展至全部 4 种图像格式
- core/Cargo.toml: image crate 新增 bmp feature
|
2026-06-19 21:34:21 +08:00 |
|
Serendipity
|
38be82973e
|
feat: Logo 嵌入 — QR 码中央叠加自定义图片
- PNG 渲染:RgbaImage 上使用 imageops::overlay 叠加 logo
- SVG 渲染:base64 编码 logo 嵌入 <image> 标签
- QrCode::to_png_bytes / to_svg 新增 Option<logo_bytes> 参数
- Logo 默认占 QR 区域 25%,建议配合 H 级纠错使用
|
2026-06-19 21:12:44 +08:00 |
|
Serendipity
|
23ccb37b52
|
feat: 彩色 QR 码 — 自定义前景色/背景色
- QrConfig 新增 fg_color/bg_color 字段(CSS 十六进制格式)
- QrCode 存储解析后的 [u8;3] RGB
- PNG 渲染 Luma→Rgba,支持 RGBA 颜色
- SVG 渲染使用 QrCode 颜色字段
- CLI 新增 --fg/--bg 参数
- 新增 parse_hex_color 支持 #RRGGBB 和 #RGB
- 新增 2 个颜色测试(74 tests total)
|
2026-06-19 21:10:56 +08:00 |
|
Serendipity
|
effc88c6d7
|
feat: QR 码解码器 — 从零手写的完整解码流水线
新增 core/src/decoder/ 模块(9 文件,~1500 行):
- bch.rs: BCH(15,5)+BCH(18,6) 查表解码(32+64 有效码字,t≤3)
- format.rs: 从矩阵读取格式信息(EC+掩码)+版本信息(2 副本容错)
- extract.rs: 逆向蛇形排列提取数据码字
- deinterleave.rs: 逆向 RS 数据交错
- rs_decode.rs: RS 纠错流水线(伴随式→BM→Chien→Forney)
- mode_decode.rs: 逆向 4 种编码模式(数字/字母/字节/汉字 Shift JIS)
- detect.rs: 定位图案检测(1:1:3:1:1 比例+交叉验证+聚类)
- image.rs: 图像加载+灰度二值化(PNG/JPEG/WebP)
- mod.rs: 顶层 API(decode_image + decode_matrix)
修改已有文件:
- core: galois.rs 表 pub(crate), 新增 poly_eval(); reed_solomon 公开内部函数
- cli: 新增 --decode <file> 解码模式
- web: 新增 POST /api/decode(multipart file upload)
测试: 72 passed (58 原有 + 14 新增 decoder 测试)
|
2026-06-19 20:36:12 +08:00 |
|
Serendipity
|
ce8063431e
|
docs: 开源规范化 — doc comments + 社区文件 + 示例代码 + crates.io 就绪
- 为 core 公开 API 添加完整 doc comments(rustdoc 可用)
- 新增 .editorconfig / CONTRIBUTING / CODE_OF_CONDUCT / SECURITY
- 新增 Issue 模板(bug + feature)+ PR 模板
- 新增 3 个代码示例(examples/)
- 更新 Cargo.toml 元数据(description/repository/keywords/categories/MSRV)
- 更新 README + CHANGELOG
|
2026-06-19 18:56:28 +08:00 |
|
Serendipity
|
f19bd6e52e
|
feat: Docker 镜像构建成功 — 17.7MB alpine 镜像
- .dockerignore: 排除 target/ gui/ test/ (镜像上下文 ~3KB)
- web/Dockerfile: sed 移除 gui 成员后编译,避免 Tauri 依赖
- 多阶段构建: rust:alpine 编译 → alpine:3.22 运行
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-06-18 12:23:28 +08:00 |
|
Serendipity
|
dcd53b2691
|
feat: web 端 GUI 风格界面 + SVG 支持 + 预览清晰度修复
- index.html: 完整复刻 GUI 三栏布局(模式/预览/设置)
7 种编码模式切换,实时防抖预览,下载 PNG/SVG/复制
- main.rs: API 新增 fmt=svg 参数,预览用 PNG size=8 避免拉伸模糊
- Dockerfile: 多阶段构建(alpine),部署就绪
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-06-18 11:52:08 +08:00 |
|
Serendipity
|
6ba79a99d3
|
feat: 新增 web 端 — axum HTTP 服务 + Docker 化
新增 workspace crate :
- axum 0.8 + tokio 异步 HTTP 服务
- / → 嵌入式 HTML 页面(输入→实时预览→下载/复制)
- /api/qr?text=&level=M&margin=4&size=8 → PNG
- Dockerfile: rust-alpine 多阶段构建,镜像仅 ~12MB
- Cargo.toml: workspace 新增 web 成员
部署:
docker build -t qrgen-web -f web/Dockerfile .
docker run -p 3000:3000 qrgen-web
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-06-18 11:42:20 +08:00 |
|