Releases: AptS-1547/shortlinker
Releases · AptS-1547/shortlinker
ShortLinker v0.5.0-alpha.2
🎉 Release Highlights
v0.5.0-alpha.2 是一次功能增强版本,主要亮点:
- 详细点击分析 - 新增 click_logs 表记录完整点击信息,支持来源、User-Agent、IP 和地理位置
- Analytics API - 6 个分析端点,支持趋势图、热门链接、来源统计、地理分布
- GeoIP 服务 - 支持 MaxMind 本地数据库和外部 API 两种查询方式
- 配置系统增强 - 支持
SL__前缀环境变量覆盖启动配置
Added
- click_logs 数据表 - 存储详细点击日志(short_code、clicked_at、referrer、user_agent、ip_address、country、city)
- 添加 short_code、clicked_at 和复合索引优化查询性能
- Analytics API 模块 - 新增
/admin/v1/analytics端点组GET /analytics/trends- 点击趋势(支持按小时/天/周/月分组)GET /analytics/top- 热门链接排行GET /analytics/referrers- 来源统计GET /analytics/geo- 地理位置分布GET /analytics/export- 流式导出 CSV 报告(支持大文件)GET /links/{code}/analytics- 单链接详细统计
- GeoIP 服务 - 支持两种地理位置查询方式
- MaxMind GeoLite2 数据库(本地查询,高性能)
- 外部 API 回退(带 LRU 缓存,10000 条,TTL 15 分钟)
- 环境变量配置覆盖 - 使用
SL__前缀和__分隔符覆盖启动配置- 例如:
SL__SERVER__PORT=8080覆盖[server] port
- 例如:
- 新增配置项
analytics.enable_detailed_logging- 启用详细日志记录(默认 false)analytics.log_retention_days- 日志保留天数(默认 30)analytics.enable_ip_logging- 记录 IP 地址(默认 true)analytics.enable_geo_lookup- 启用地理位置查询(默认 false)
- IP 工具模块 - 新增
src/utils/ip.rs,提供私有 IP 检测、CIDR 匹配等功能
Changed
- 配置加载方式 - 从
dotenv迁移到config+dotenvy,支持更灵活的配置优先级 - 重定向服务增强 - 支持记录详细点击信息,跳过私有/本地 IP 的 GeoIP 查询
Improved
- CSV 导出流式化 - 分析报告导出改为流式响应,支持大文件,避免内存溢出
- 分析服务层抽象 - 提取 AnalyticsService 统一业务逻辑,支持多接口复用
- CSV 导出安全性 - 使用 csv crate 防止 CSV 注入攻击
Refactored
- IP 处理逻辑统一 - 将
is_private_or_local、is_trusted_proxy、ip_in_cidr提取到独立模块 - 客户端 IP 提取 - 使用统一的
extract_client_ip函数替代内联实现
Dependencies
- 添加
maxminddb(0.27) 用于 MaxMind GeoLite2 数据库解析 - 添加
reqwest(0.13) 用于外部 GeoIP API 调用 - 添加
config(0.15) 用于配置文件加载 - 替换
dotenv为dotenvy(0.15) - 升级
criterion0.5 → 0.8 - 升级
nix0.30 → 0.31 - 升级
ts-rs11.1 → 12.0 - 升级
socket2、windows-sys等依赖
Docs
- 完善 Analytics API 文档,补充查询参数说明和 GeoIP 配置要求
- 更新配置文档,说明环境变量覆盖和配置优先级
- 更新 Docker、systemd 部署文档
Installation
Homebrew (macOS/Linux)
brew install AptS-1547/tap/shortlinkerCargo Binstall
cargo binstall shortlinkerManual Download
| Platform | Architecture | Download |
|---|---|---|
| Linux | x86_64 | shortlinker_v0.5.0-alpha.2_linux_x86_64 |
| Linux | ARM64 | shortlinker_v0.5.0-alpha.2_linux_aarch64 |
| Windows | x86_64 | shortlinker_v0.5.0-alpha.2_windows_x86_64.exe |
| macOS | x86_64 | shortlinker_v0.5.0-alpha.2_macos_x86_64 |
| macOS | ARM64 | shortlinker_v0.5.0-alpha.2_macos_aarch64 |
| Admin Panel | - | shortlinker-admin-panel_v0.5.0-alpha.2.tar.gz |
Checksums: checksums.txt
ShortLinker v0.5.0-alpha.1
🎉 Release Highlights
v0.5.0-alpha.1 是一次架构级别的重大重构版本,主要亮点:
- 配置系统重构 - 移除 config.toml 和环境变量支持,所有运行时配置现在存储在数据库中
- 错误码系统重构 - 统一 API 错误响应格式,提供更精确的错误类型
- 新增配置类型 - 支持 StringArray 和 EnumArray 配置类型
Added
- StringArray 和 EnumArray 配置类型 - 新增两种配置类型用于数组值
StringArray:用于字符串数组(如api.trusted_proxies、cors.allowed_origins)EnumArray:用于枚举数组(如cors.allowed_methods),验证数组元素是否在允许的选项中
- JSON 配置解析辅助方法 -
RuntimeConfig::get_json_or()方法,安全解析 JSON 配置并提供默认值 - Admin API 错误码模块 - 新增
error_code.rs,集中定义 API 错误码
Changed
- 配置系统架构重构 - 移除 config.toml 和环境变量支持
- 所有运行时配置现在存储在数据库中
- 将
AppConfig拆分为StaticConfig(静态基础设施配置)和RuntimeConfig(运行时配置) - 启动时通过
ConfigStore::ensure_defaults()初始化默认值 - 移除配置迁移模块,简化启动流程
- 错误码系统重构 - 统一 API 错误响应格式
- 使用
thiserror派生宏重构错误类型 - 每个错误类型关联唯一的错误码(如
link_not_found、validation_error) - 中间件和服务层统一使用新的错误类型
- 使用
Improved
- 配置 Schema 静态缓存 - 避免重复计算,提升性能
- 枚举选项生成逻辑 - 基于
RustType自动推断,增加编译期安全检查 - CORS 配置动态加载 - 从 RuntimeConfig 动态读取,支持热更新
Fixed
- TUI 过期时间解析错误类型 - 从
validation更改为link_invalid_expire_time,提高错误信息准确性
Refactored
- LinkService 简化 - 移除冗余的错误处理代码,使用新的错误类型
- 中间件错误处理 - 统一使用
ShortlinkerError类型 - 配置更新逻辑 - 移除 AppConfig 同步,仅更新数据库和内存缓存
Dependencies
- 添加
thiserror依赖用于错误派生
Migration Notes
- 配置系统变更 -
config.toml中的运行时配置项不再生效- 所有运行时配置现在存储在数据库中
- 首次启动时会自动初始化默认值
- 后续通过管理面板或 API 修改配置
- API 错误响应格式变更 - 错误响应现在包含更精确的
code字段- 如
link_not_found、validation_error、unauthorized等 - 前端需要根据新的错误码处理错误
- 如
Installation
Homebrew (macOS/Linux)
brew install AptS-1547/tap/shortlinkerCargo Binstall
cargo binstall shortlinkerManual Download
| Platform | Architecture | Download |
|---|---|---|
| Linux | x86_64 | shortlinker_v0.5.0-alpha.1_linux_x86_64 |
| Linux | ARM64 | shortlinker_v0.5.0-alpha.1_linux_aarch64 |
| Windows | x86_64 | shortlinker_v0.5.0-alpha.1_windows_x86_64.exe |
| macOS | x86_64 | shortlinker_v0.5.0-alpha.1_macos_x86_64 |
| macOS | ARM64 | shortlinker_v0.5.0-alpha.1_macos_aarch64 |
| Admin Panel | - | shortlinker-admin-panel_v0.5.0-alpha.1.tar.gz |
Checksums: checksums.txt
ShortLinker v0.4.3
🎉 Release Highlights
v0.4.3 是一次紧急修复版本:
- CSRF Cookie 路径修复 - 修复前端无法读取 CSRF cookie 导致所有变更操作(创建、修改、删除)返回 403 的问题
Fixed
- CSRF Cookie 路径问题 - 将 CSRF cookie 的 path 从
admin_prefix改为/- 修复前端页面路径与 cookie path 不匹配时,所有 POST/PUT/DELETE 请求返回 403 Forbidden 的问题
- 确保任意
admin_prefix配置下前端都能正常工作 - 安全性不受影响(
SameSite=Lax仍然生效)
Installation
Homebrew (macOS/Linux)
brew install AptS-1547/tap/shortlinkerCargo Binstall
cargo binstall shortlinkerManual Download
| Platform | Architecture | Download |
|---|---|---|
| Linux | x86_64 | shortlinker_v0.4.3_linux_x86_64 |
| Linux | ARM64 | shortlinker_v0.4.3_linux_aarch64 |
| Windows | x86_64 | shortlinker_v0.4.3_windows_x86_64.exe |
| macOS | x86_64 | shortlinker_v0.4.3_macos_x86_64 |
| macOS | ARM64 | shortlinker_v0.4.3_macos_aarch64 |
| Admin Panel | - | shortlinker-admin-panel_v0.4.3.tar.gz |
Checksums: checksums.txt
ShortLinker v0.4.2
🎉 Release Highlights
v0.4.2 是一次针对性的安全与易用性改进版本,主要亮点:
- 智能代理检测 - 默认自动信任来自私有 IP(RFC1918)或 localhost 的连接,简化 Docker/nginx 反向代理部署
- 增强 Unix Socket 支持 - 强制要求 X-Forwarded-For 头部,防止登录限流失效
- 完善 IPv6 支持 - 扩展 IPv6 私有地址检测范围(ULA + 链路本地地址)
Added
- 智能代理检测模式 - 未配置
api.trusted_proxies时,自动信任来自私有 IP 或 localhost 的连接- 支持 RFC1918 私有地址段:
10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 - 适合常见的 Docker、nginx、Caddy 反向代理场景,无需手动配置
- 公网 IP 默认不信任 X-Forwarded-For,防止伪造攻击
- 支持 RFC1918 私有地址段:
- 启动时代理检测模式日志 - 显示当前使用的代理检测策略(Unix Socket / 显式配置 / 智能检测 / 直连),便于部署调试
Improved
- Unix Socket 模式增强 - 强制要求 X-Forwarded-For 头部,缺失时返回明确的错误提示
- 防止 Unix Socket 模式下登录限流失效(所有请求来自同一 peer_addr)
- 错误提示包含 nginx 配置示例:
proxy_set_header X-Forwarded-For $remote_addr;
- 限流 key 提取器逻辑优化 - 按优先级处理(Unix Socket > 显式配置 > 智能检测 > 连接 IP)
- 使用
SocketAddr解析替代IpAddr,支持带端口的 IP 地址 - 优化 IP 地址解析流程:先尝试
SocketAddr::parse(),失败时回退到IpAddr::parse()
- 使用
- IPv6 私有地址检测 - 扩展 IPv6 私有地址范围
- 新增
fc00::/7(ULA, RFC 4193):fc00::/8+fd00::/8 - 新增
fe80::/10(链路本地地址) - 改进代码注释,明确各地址段定义及对应 RFC 标准
- 新增
Fixed
- Unix Socket 模式警告重复 - 修复启动时代理检测警告逻辑,避免重复日志输出
Docs
- 更新配置文档
api.trusted_proxies说明- 详细说明智能检测和显式配置的使用场景
- 添加安全提示:公网 IP 默认不信任 X-Forwarded-For
- 添加 Docker/nginx 部署示例
Migration Notes
- 默认行为变更 - 未配置
api.trusted_proxies时,现在会自动信任来自私有 IP 的连接- 大部分反向代理场景(Docker、nginx)可直接使用,无需配置
- 如需禁用智能检测,请显式配置
api.trusted_proxies = [](空数组)
- Unix Socket 模式更严格 - 现在强制要求 X-Forwarded-For 头部,请检查代理配置
Installation
Homebrew (macOS/Linux)
brew install AptS-1547/tap/shortlinkerCargo Binstall
cargo binstall shortlinkerManual Download
| Platform | Architecture | Download |
|---|---|---|
| Linux | x86_64 | shortlinker_v0.4.2_linux_x86_64 |
| Linux | ARM64 | shortlinker_v0.4.2_linux_aarch64 |
| Windows | x86_64 | shortlinker_v0.4.2_windows_x86_64.exe |
| macOS | x86_64 | shortlinker_v0.4.2_macos_x86_64 |
| macOS | ARM64 | shortlinker_v0.4.2_macos_aarch64 |
| Admin Panel | - | shortlinker-admin-panel_v0.4.2.tar.gz |
Checksums: checksums.txt
ShortLinker v0.4.1
🎉 Release Highlights
v0.4.1 是一次重要的安全与性能优化版本,主要亮点:
- CSRF 防护 - 双令牌模式的 CSRF 中间件,防止跨站请求伪造攻击
- 流式 CSV 导出 - 支持大规模数据导出,内存占用从 O(N) 降至 O(batch_size)
- 登录限流安全增强 - 可信代理配置,防止 IP 伪造绕过限流
- CSV 导入性能优化 - Bloom Filter 预筛选 + 批量查询,显著提升冲突检测性能
- 全面的测试覆盖 - 新增 8 个基准测试和覆盖 22 个模块的单元测试
Added
- CSRF 防护中间件 - 双令牌模式,验证
X-CSRF-Tokenheader 与 Cookie 匹配- 使用
subtle::ConstantTimeEq进行常量时间比较,防止时序攻击 - 安全方法(GET/HEAD/OPTIONS)和 Bearer Token 认证自动跳过
- 认证端点(login/refresh/logout)自动跳过 CSRF 验证
- 使用
- 流式 CSV 导出 - 分批次流式导出(每批 10,000 条),支持
Transfer-Encoding: chunked- 使用
spawn_blocking将 CSV 序列化移到独立线程池,避免阻塞 worker 线程 - 内存占用优化:导出 100 万条链接内存占用从 O(N) 降至 O(1000)
- 使用
- 可信代理配置 - 新增
api.trusted_proxies配置项(支持 IP 和 CIDR 格式)- 登录限流 key 优先使用连接 IP(不可伪造),仅可信代理时使用
X-Forwarded-For - 支持 IPv4/IPv6 CIDR 匹配(如
192.168.1.0/24)
- 登录限流 key 优先使用连接 IP(不可伪造),仅可信代理时使用
- 批量短码存在性检查 API -
batch_check_codes_exist()方法,支持分批查询(每批 500 个) - API 常量模块 - 硬编码 Cookie 名称(
shortlinker_access,shortlinker_refresh,csrf_token) - 全面的基准测试套件 - 新增 8 个基准测试,覆盖缓存、IPC、密码哈希等关键路径
cache_layer: CompositeCache 各操作性能import_conflict: CSV 导入冲突检测策略对比ipc_protocol: IPC 协议序列化/反序列化性能password: Argon2 密码哈希性能utils: 短码生成、URL 验证等工具函数性能
- 单元测试覆盖 - 新增测试覆盖 22 个模块(JWT、缓存层、存储层、服务层、错误处理等)
- 集成测试套件 - 新增
link_service_tests.rs(865 行)和storage_tests.rs(695 行)
Changed
- Cookie 安全标志默认开启 -
cookie_secure默认改为true,强制 HTTPS 传输 Cookiecookie_secure=false时启动输出警告日志
- 移除可配置 Cookie 名称 - 移除
access_cookie_name和refresh_cookie_name配置项- 改为硬编码常量,减少攻击面
- 升级依赖 - Rust 1.93-slim,移除 OpenSSL 依赖(使用 rustls)
Improved
- CSV 导入冲突检测性能优化 - 全量加载 -> Bloom Filter 预筛选 -> 批量查询
- 预扫描 CSV 提取所有 codes,使用 Bloom Filter 快速排除肯定不存在的 codes
- 仅对可能存在的 codes 执行批量数据库查询
- CSV 导出流式化 - 使用
stream::unfold实现分页流式查询(每批 1000 条) - Dockerfile 构建优化 - 减少镜像层大小,静态链接编译,移除未使用的依赖
- 查询条件构建 - 使用 SeaORM
contains()方法替代手动字符串拼接,防止通配符注入 - 基准测试性能 - 手动创建运行时,避免每次迭代创建/销毁
Fixed
- 健康检查未授权响应 - 统一业务码为 1(之前为 401),保持 API 响应格式一致性
- Symlink 攻击防护 - 使用
create_new()原子创建admin_token.txt,防止 TOCTOU 竞态条件 - SeaORM contains() 误用 - 移除手动添加
%通配符,contains()方法已自动处理
Security
- IPC 权限控制 - Unix socket 文件创建后设置权限为
0600(仅属主可读写) - Admin Token 文件安全 - 原子创建文件 + Unix 权限 0600,防止 symlink 攻击
- 登录限流增强 - 默认使用连接 IP(不可伪造),防止客户端伪造 IP 绕过限流
- CSRF Cookie SameSite 设置 - CSRF Cookie 使用
Lax模式,防止跨站 POST 请求 - 认证方式显式标记 - 在
req.extensions()中插入AuthMethod,CSRF 中间件根据标记判断是否跳过验证
Dependencies
- 升级 Rust 至 1.93-slim
- 移除 OpenSSL 依赖(使用 rustls)
Docs
- 更新 Admin API 鉴权文档,新增 CSRF 防护说明
- 更新配置文档,新增
api.trusted_proxies说明
Migration Notes
- CSRF 防护默认启用 - Web 管理面板的所有变更操作需携带
X-CSRF-Tokenheader - Cookie 名称硬编码 -
access_cookie_name和refresh_cookie_name配置项已移除,现在固定为shortlinker_access和shortlinker_refresh - Cookie Secure 默认开启 - 如需在非 HTTPS 环境使用,需显式设置
cookie_secure=false(启动时会有警告) - 可信代理配置 - 如果在代理/负载均衡器后部署,建议配置
api.trusted_proxies列表以正确识别客户端 IP
Installation
Homebrew (macOS/Linux)
brew install AptS-1547/tap/shortlinkerCargo Binstall
cargo binstall shortlinkerManual Download
| Platform | Architecture | Download |
|---|---|---|
| Linux | x86_64 | shortlinker_v0.4.1_linux_x86_64 |
| Linux | ARM64 | shortlinker_v0.4.1_linux_aarch64 |
| Windows | x86_64 | shortlinker_v0.4.1_windows_x86_64.exe |
| macOS | x86_64 | shortlinker_v0.4.1_macos_x86_64 |
| macOS | ARM64 | shortlinker_v0.4.1_macos_aarch64 |
| Admin Panel | - | shortlinker-admin-panel_v0.4.1.tar.gz |
Checksums: checksums.txt
ShortLinker v0.4.0
🎉 Release Highlights
v0.4.0 是一次架构级别的重大更新,主要亮点:
- IPC 跨进程通信系统 - 全新的 Unix 域套接字 / Windows 命名管道通信机制,CLI 可直接与运行中的服务器交互
- TUI 全面重构 - 组件化架构、模糊搜索、批量操作、详情面板、排序功能
- CSV 导入导出 - 统一的 CSV 格式,替代原有 JSON 格式(JSON 将在 v0.5.0 移除)
- 服务层抽象 - 新增 LinkService 统一业务逻辑,消除代码重复
Added
- IPC 跨进程通信系统 - 替代原有的 Unix 信号和 Windows 文件轮询机制
- Unix 域套接字 (
/tmp/shortlinker.sock) 和 Windows 命名管道 (\\.\pipe\shortlinker) - 长度前缀 JSON 协议,支持链接 CRUD、导入导出、状态查询等命令
- CLI 命令优先通过 IPC 与服务器通信,确保缓存同步
- Unix 域套接字 (
- CLI
status命令 - 通过 IPC 查询服务器状态(版本、运行时间、链接数量等) - TUI 模糊搜索 - 使用
nucleo-matcher实现智能匹配,按/进入搜索模式 - TUI 批量操作 - 支持多选(Space 键)和批量删除
- TUI 详情面板 - 右侧面板显示选中链接的完整信息,支持剪贴板复制
- TUI 排序功能 - 按短代码、URL、点击量、状态排序
- CSV 导入导出 - 统一 CLI、TUI、Web Admin 的导入导出格式
- 自动检测文件格式(CSV/JSON)
- JSON 格式已标记废弃
- LinkService 服务层 - 统一的业务逻辑层,被 IPC 和 HTTP 处理器共享
- 重载协调器 - 新增
ReloadCoordinator支持数据重载和配置热重载
Changed
- CLI IPC 优先架构 - 服务器运行时优先使用 IPC 通信,否则直接访问数据库
- API 强类型响应 - 将动态 JSON 替换为强类型结构体,提高类型安全性
- reset-password 命令改进 - 支持交互式密码输入(使用
rpassword)
Improved
- TUI 组件化架构 - 引入 Action 系统、Component trait、可复用 UI 组件
- 导入性能优化 - 使用批量查询替代循环单次查询
- 密码处理统一 - 新增
password.rs工具模块,统一密码哈希处理逻辑
Fixed
- URL 验证增强 - 统一 CLI 和 TUI 的 URL 验证,阻止危险协议
- 导入密码处理 - 正确区分新密码和已哈希密码,阻止明文密码直接存储
- Unix 守护进程启动 - 修复 IPC 无响应时错误清理 PID 文件的问题
- 导入结果统计 - 区分
skipped和failed字段
Refactored
- TUI 状态管理 - 拆分
state.rs为form_state.rs和模块化状态管理 - 错误定义宏 - 使用宏重构
ShortlinkerError枚举 - 平台层简化 - 移除旧的
reload.rs,功能迁移到reload/模块
Dependencies
- 添加
bytes(1.11) 用于 IPC 协议编解码 - 添加
arboard(3.6) 用于 TUI 剪贴板支持 - 添加
nucleo-matcher(0.3) 用于 TUI 模糊搜索 - 添加
rpassword(7) 用于 CLI 密码输入
Docs
- 更新 CLI 命令文档以反映 IPC 优先行为
- 更新 TUI 帮助文档以反映新增功能快捷键
- 新增
TUI_REFACTOR_REPORT.md记录架构改进
Migration Notes
- CLI 命令现在优先通过 IPC 与运行中的服务器通信,确保缓存同步
- 导入导出默认使用 CSV 格式,JSON 格式仍可读取但已标记废弃
- IPC 套接字路径:Unix
/tmp/shortlinker.sock,Windows\\.\pipe\shortlinker
Installation
Homebrew (macOS/Linux)
brew install AptS-1547/tap/shortlinkerCargo Binstall
cargo binstall shortlinkerManual Download
| Platform | Architecture | Download |
|---|---|---|
| Linux | x86_64 | shortlinker_v0.4.0_linux_x86_64 |
| Linux | ARM64 | shortlinker_v0.4.0_linux_aarch64 |
| Windows | x86_64 | shortlinker_v0.4.0_windows_x86_64.exe |
| macOS | x86_64 | shortlinker_v0.4.0_macos_x86_64 |
| macOS | ARM64 | shortlinker_v0.4.0_macos_aarch64 |
| Admin Panel | - | shortlinker-admin-panel_v0.4.0.tar.gz |
Checksums: checksums.txt
ShortLinker v0.3.0
🎉 Release Highlights
v0.3.0 是一个重大版本更新,包含大量安全增强、性能优化和新功能。主要亮点:
- 动态配置系统 - 支持运行时热更新配置,无需重启服务
- JWT 认证 - 完整的访问令牌/刷新令牌认证体系
- 负向缓存 - 优化缓存架构,减少无效查询
- 管理员登录限流 - 防止暴力破解攻击
- 敏感信息保护 - 全面加强日志和数据库中的敏感信息处理
Added
- 动态配置系统 - 基于数据库的运行时配置管理,支持配置热重载
- 新增
system_config和config_history数据表 - 配置管理 API 端点(
GET/PUT /admin/v1/config) - 首次启动自动从
config.toml迁移配置到数据库
- 新增
- 配置管理 CLI 命令 -
config list/get/set/reset/export/import - 配置 Schema 系统 - 支持前端动态渲染配置表单,按类别分组展示
- JWT 认证系统 - 替换 Bearer Token,支持 Access/Refresh Token
- 健康检查 Bearer Token 认证 - 支持 k8s 等监控工具通过
HEALTH_TOKEN访问 - 负向缓存(Negative Cache) - 缓存不存在的键,减少数据库压力
- 数据库连接重试机制 - 指数退避重试策略,增强连接稳定性
- 链接导出导入功能 - CSV 格式批量导出导入,支持冲突处理模式
- 管理员登录限流 - 基于 IP 的速率限制(1 req/s,burst 5),防止暴力破解
- 短码格式验证 - 长度≤128,字符集
[a-zA-Z0-9_.-/] - 自定义前端支持 -
./frontend-panel目录替换内置管理面板 - ClickManager 基准测试 - criterion 性能测试套件
- cargo-binstall / Homebrew / macOS x86_64 构建支持
Changed
- CORS 默认禁用 - 提升默认安全性,需显式启用
- 缓存预热策略 - 从主动加载改为按需回填(cache-aside)
- 默认管理员令牌长度 - 从 8 位增加到 16 位
- 敏感配置掩码 - 统一使用
[REDACTED]替代******** - Cookie 配置支持热更新 -
cookie_secure、cookie_same_site、cookie_domain
Improved
- ClickManager 性能优化 - 添加原子标志消除任务风暴,优化 Arc 分配(单线程 -40%,并发 +40%~+62%)
- 批量接口性能 - N+1 查询优化为 2 次 DB 往返
- 数据库错误处理统一 - 所有查询返回
Result<Option<T>> - 健康检查性能 - 改用轻量级
count()查询 - 启动流程优化 - 返回 Result 替代 panic,增加错误处理
- 日志初始化回退 - 文件日志失败时优雅回退到 stdout
Fixed
- 敏感信息泄露修复
- 自动生成的
admin_token不再打印到日志,改为写入admin_token.txt文件 - 配置迁移时直接写入哈希值,避免明文先存入数据库
- 配置历史表添加敏感 key 兜底列表,确保脱敏
- 自动生成的
- SQL 注入防护 -
click_sink增加短码格式校验作为防御性检查 - 运行时配置加载 - 区分启动模式和热重载模式,启动时正确加载所有配置
- ClickBuffer 数据竞争修复 - 通过先快照 key 再逐个删除避免竞态
- 刷盘失败恢复机制 - 失败时自动将数据写回缓冲区
- 缓存删除逻辑 - 使用负缓存标记已删除的键
- CSV 导入重复短码 - 改用 HashMap 去重
- CORS 配置 - 防止通配符源与凭据同时启用
- Cookie 路径设置 - Access Cookie path 收窄到
admin_prefix
Refactored
- 配置系统重构 -
definitions.rs作为配置项的唯一数据源 - API 路由模块化 - admin、frontend、health、redirect 拆分为独立模块
- CLI 使用 clap 重构 - 移除自定义参数解析器
- 点击缓冲区计数器 - 重命名为
total_clicks,跟踪总点击数 - 短码验证统一 - 提取到
utils::is_valid_short_code()共用
Dependencies
- 添加
actix-governor、governor用于速率限制 - 添加
clap用于命令行解析 - 添加
strum用于 enum 派生 - 添加
criterion用于基准测试 - SeaORM 升级至 2.0.0-rc.28
- actix-web 升级至 4.12
Admin Panel
- PWA 支持 - 可作为渐进式 Web 应用安装,支持自动更新检测
- 短代码路径格式 - 支持斜杠作为路径分隔符(如
abc/def) - 短代码验证规则 - 允许点号,最大长度从 50 增加到 128
- 系统配置界面重构 - 新增分类展示和 UI 组件
- i18n 改进 - 简化导入覆盖模式描述,改进 CORS 配置项翻译
Migration Notes
- 首次启动时,系统会自动从
config.toml迁移配置到数据库 - 迁移完成后,数据库配置作为主配置源,
config.toml中的动态配置项不再生效 - 自动生成的
admin_token会写入admin_token.txt文件,请保存后删除 - CORS 默认禁用,如需跨域访问请显式配置
- 建议检查并更新
admin_token为更强的密码
Installation
Homebrew (macOS/Linux)
brew install AptS-1547/tap/shortlinkerCargo Binstall
cargo binstall shortlinkerManual Download
| Platform | Architecture | Download |
|---|---|---|
| Linux | x86_64 | shortlinker_v0.3.0_linux_x86_64 |
| Linux | ARM64 | shortlinker_v0.3.0_linux_aarch64 |
| Windows | x86_64 | shortlinker_v0.3.0_windows_x86_64.exe |
| macOS | x86_64 | shortlinker_v0.3.0_macos_x86_64 |
| macOS | ARM64 | shortlinker_v0.3.0_macos_aarch64 |
| Admin Panel | - | shortlinker-admin-panel_v0.3.0.tar.gz |
Checksums: checksums.txt
ShortLinker v0.3.0-beta.3
Added
- ClickManager 性能基准测试 - 新增 criterion 基准测试套件
- 包括单线程/多线程 increment、不同 key 场景和 drain 操作的性能测试
- 添加并发 increment 和 increment+drain 场景的单元测试,验证数据一致性
- cargo-binstall 支持 - 用户可通过
cargo binstall shortlinker直接安装预编译二进制 - Homebrew 发布支持 - 用户可通过
brew install AptS-1547/tap/shortlinker安装 - macOS x86_64 (Intel Mac) 构建 - Release 现已支持 Intel Mac 平台
Fixed
- ClickBuffer 数据竞争修复 - 重构
drain方法,通过先快照 key 再逐个删除的方式避免数据竞争 (#40, #41) - 刷盘失败恢复机制 - 新增
restore方法,刷盘失败时自动将数据写回缓冲区,避免数据丢失 - ClickBuffer 竞态条件修复 - 使用
entryAPI 重构increment方法,消除检查后插入(TOCTOU)的竞态条件 - 点击计数下溢防护 - 将
fetch_sub替换为fetch_update,确保总点击数减法操作不会下溢
Docs
- 更新健康检查 API 鉴权逻辑文档
- 更新短链接路径格式约束说明
- 更新配置项说明:CORS 默认禁用、Cookie 配置热更新说明
- 更新存储配置文档:移除
DATABASE_BACKEND说明,明确从DATABASE_URL自动推断 - 更新部署要求:Rust 版本提升至 1.85+ (Edition 2024)
- 同步更新英文文档
Dependencies
- 添加
criterion依赖用于基准测试 - 升级
colored至 3.1.1
Installation
Homebrew (macOS/Linux)
brew install AptS-1547/tap/shortlinkerCargo Binstall
cargo binstall shortlinkerManual Download
| Platform | Architecture | Download |
|---|---|---|
| Linux | x86_64 | shortlinker_v0.3.0-beta.3_linux_x86_64 |
| Linux | ARM64 | shortlinker_v0.3.0-beta.3_linux_aarch64 |
| Windows | x86_64 | shortlinker_v0.3.0-beta.3_windows_x86_64.exe |
| macOS | x86_64 | shortlinker_v0.3.0-beta.3_macos_x86_64 |
| macOS | ARM64 | shortlinker_v0.3.0-beta.3_macos_aarch64 |
| Admin Panel | - | shortlinker-admin-panel_v0.3.0-beta.3.tar.gz |
Checksums: checksums.txt
ShortLinker v0.3.0-beta.2
Added
- 负向缓存(Negative Cache) - 缓存数据库中不存在的键,减少无效查询的数据库压力
- 重构缓存查询流程:Bloom Filter → 负向缓存 → 对象缓存 → 数据库
- 统一缓存结果枚举,将
ExistsButNoValue重命名为Miss以更准确表达语义
- 数据库连接重试机制 - 新增指数退避重试策略,增强数据库连接稳定性
- 配置项:重试次数、基础延迟、最大延迟
- 为所有数据库操作(查询、插入、删除、点击计数刷新)添加重试逻辑
- 日志初始化回退机制 - 当文件日志初始化失败时,优雅地回退到 stdout 输出
- 健康检查独立 Token -
health_token不再强制依赖admin_token,支持独立配置 - 短码格式验证 - 重定向服务增加短码验证(长度≤128,字符集限制),TUI 同步更新规则
Changed
- CORS 默认禁用 -
default_cors_enabled的默认值从true改为false,提升默认安全性 - 缓存预热策略调整 - 从主动加载改为按需回填(cache-aside),启动时仅加载短码到 Bloom Filter
- 默认管理员令牌长度 - 从 8 位增加到 16 位,增强安全性
- 时间格式显示优化 - 使用简洁的英文缩写(如 "2d 3h")
Improved
- 数据库错误处理统一 - 所有查询返回
Result<Option<T>>,防止静默失败 - 健康检查性能 - 改用轻量级
count()查询替代load_all(),避免内存压力 - 批量查询性能 -
batch_get_existing()使用 HashSet 提升查找性能 - 敏感信息保护 - 敏感配置更新时日志中隐藏明文值
- Cookie 安全属性 - 清理时添加 secure、same-site 和 domain 属性
- 启动流程优化 - 增加错误处理和耗时日志,改进关机信号处理
- SQLite 连接池 - 增加健康检查和连接超时设置
- 时间解析器 - 添加算术溢出检查,错误消息国际化为英文
Fixed
- 缓存删除逻辑 - 修复
CompositeCache::remove方法,删除对象缓存后使用负缓存标记键 - CSV 导入 - 修复因重复短码导致的批量插入失败问题,改用 HashMap 去重
- 短链点击计数 - 修复创建时
click_count字段初始化逻辑,使用传入的点击次数而非固定为 0 - CORS 配置 - 添加安全验证,防止通配符源与凭据同时启用
- 配置更新函数 -
update_config_by_key遇到未知键时正确返回false - Upsert 操作 - 包含 ClickCount 和 CreatedAt 字段,确保数据完整性
Refactored
- 点击缓冲区计数器 -
ClickBuffer.counter重命名为total_clicks,用于跟踪总点击数 - 前端静态资源加载 - 使用异步 IO 并统一加载逻辑
Dependencies
- 更新
aws-lc-rs、chrono、rust-embed、wasm-bindgen等依赖版本 - 升级
rustc-demangle至0.1.27,unicode-truncate至2.0.1 - 移除
itertools 0.13.0
Admin Panel
- PWA 更新检测 - 新增
usePwaUpdatehook,每小时自动检查 Service Worker 更新并显示通知提示 - 短代码路径格式 - 支持使用斜杠作为路径分隔符(如
abc/def) - 短代码验证规则扩展 - 允许点号(
.)作为有效字符,最大长度从 50 增加到 128 - i18n - 简化导入覆盖模式的描述文本,改进 CORS 配置项翻译说明
Downloads
| Platform | Architecture | Download |
|---|---|---|
| Linux | x86_64 | shortlinker_v0.3.0-beta.2_linux_x86_64 |
| Linux | ARM64 | shortlinker_v0.3.0-beta.2_linux_aarch64 |
| Windows | x86_64 | shortlinker_v0.3.0-beta.2_windows_x86_64.exe |
| macOS | ARM64 | shortlinker_v0.3.0-beta.2_macos_aarch64 |
| Admin Panel | - | shortlinker-admin-panel_v0.3.0-beta.2.tar.gz |
Checksums: checksums.txt
ShortLinker v0.3.0-beta.1
Added
- 配置管理 CLI 命令 - 新增完整的配置管理命令 (#37)
config list:列出所有配置项,支持按类别筛选和 JSON 输出config get:获取指定配置项详细信息,包含类型、默认值等元数据config set:设置配置值,支持验证和敏感信息掩码config reset:重置配置到默认值config export:导出所有配置到 JSON 文件config import:从 JSON 文件导入配置,支持预览和强制覆盖
- 健康检查 Bearer Token 认证 - 支持 k8s 等监控工具通过
HEALTH_TOKEN访问健康端点 (#38)- 认证流程:先尝试 Bearer token,再尝试 JWT Cookie
- 配置 Schema 系统 - 支持前端动态渲染配置表单
- 为 Cookie SameSite 策略和 HTTP 方法添加类型安全的 enum 定义
- 实现配置值验证器,确保 enum 配置值的合法性
- 新增配置 Schema API 端点 (
/admin/v1/config/schema)
- 配置分组功能 - 配置项按类别分组:认证、Cookie、功能开关、路由、CORS、点击追踪
- 自定义前端支持 - 可将自定义前端放入
./frontend-panel目录替换内置管理面板 (#32)- 参数注入机制:自动替换
%BASE_PATH%、%ADMIN_ROUTE_PREFIX%等占位符
- 参数注入机制:自动替换
- 自动生成初始管理员令牌 - 首次部署时自动生成 8 位随机令牌并在日志中提示保存 (#35)
Changed
- 配置系统重构为单一数据源架构 -
definitions.rs作为配置项的唯一数据源- 集中定义所有配置的元信息(key、类型、默认值、分类等)
- 配置迁移和 Schema 生成自动基于定义,减少重复代码
- CLI 使用 clap 重构 - 移除自定义参数解析器,使用 clap derive 宏 (#33)
- 删除
src/config/args.rs和src/interfaces/cli/parser.rs - 新增
src/cli.rs定义 CLI 结构
- 删除
- Cookie 配置支持热更新 -
cookie_secure、cookie_same_site、cookie_domain的requires_restart改为false - 文档统一认证方式为 JWT Cookie - 更新 Admin API 和 Health API 文档
Improved
- 配置元数据同步机制 - 配置迁移时自动同步
value_type、requires_restart、is_sensitive字段 - 新增
strum依赖用于 enum 派生
Docs
- 新增管理面板开发指南和故障排除文档
- 更新 CLI 文档,添加
config命令说明 - 更新 README,添加自定义前端说明
Dependencies
- 添加
clap(4.x) 用于命令行解析 - 添加
strum(0.27) 用于 enum 派生
Downloads
| Platform | Architecture | Download |
|---|---|---|
| Linux | x86_64 | shortlinker_v0.3.0-beta.1_linux_x86_64 |
| Linux | ARM64 | shortlinker_v0.3.0-beta.1_linux_aarch64 |
| Windows | x86_64 | shortlinker_v0.3.0-beta.1_windows_x86_64.exe |
| macOS | ARM64 | shortlinker_v0.3.0-beta.1_macos_aarch64 |
| Admin Panel | - | shortlinker-admin-panel_v0.3.0-beta.1.tar.gz |
Checksums: checksums.txt