Skip to content

Releases: AptS-1547/shortlinker

ShortLinker v0.5.0-alpha.2

03 Feb 18:15
v0.5.0-alpha.2
43f01d6

Choose a tag to compare

Pre-release

🎉 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_localis_trusted_proxyip_in_cidr 提取到独立模块
  • 客户端 IP 提取 - 使用统一的 extract_client_ip 函数替代内联实现

Dependencies

  • 添加 maxminddb (0.27) 用于 MaxMind GeoLite2 数据库解析
  • 添加 reqwest (0.13) 用于外部 GeoIP API 调用
  • 添加 config (0.15) 用于配置文件加载
  • 替换 dotenvdotenvy (0.15)
  • 升级 criterion 0.5 → 0.8
  • 升级 nix 0.30 → 0.31
  • 升级 ts-rs 11.1 → 12.0
  • 升级 socket2windows-sys 等依赖

Docs

  • 完善 Analytics API 文档,补充查询参数说明和 GeoIP 配置要求
  • 更新配置文档,说明环境变量覆盖和配置优先级
  • 更新 Docker、systemd 部署文档

Installation

Homebrew (macOS/Linux)

brew install AptS-1547/tap/shortlinker

Cargo Binstall

cargo binstall shortlinker

Manual 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

01 Feb 17:05
v0.5.0-alpha.1
325032f

Choose a tag to compare

Pre-release

🎉 Release Highlights

v0.5.0-alpha.1 是一次架构级别的重大重构版本,主要亮点:

  • 配置系统重构 - 移除 config.toml 和环境变量支持,所有运行时配置现在存储在数据库中
  • 错误码系统重构 - 统一 API 错误响应格式,提供更精确的错误类型
  • 新增配置类型 - 支持 StringArray 和 EnumArray 配置类型

Added

  • StringArray 和 EnumArray 配置类型 - 新增两种配置类型用于数组值
    • StringArray:用于字符串数组(如 api.trusted_proxiescors.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_foundvalidation_error
    • 中间件和服务层统一使用新的错误类型

Improved

  • 配置 Schema 静态缓存 - 避免重复计算,提升性能
  • 枚举选项生成逻辑 - 基于 RustType 自动推断,增加编译期安全检查
  • CORS 配置动态加载 - 从 RuntimeConfig 动态读取,支持热更新

Fixed

  • TUI 过期时间解析错误类型 - 从 validation 更改为 link_invalid_expire_time,提高错误信息准确性

Refactored

  • LinkService 简化 - 移除冗余的错误处理代码,使用新的错误类型
  • 中间件错误处理 - 统一使用 ShortlinkerError 类型
  • 配置更新逻辑 - 移除 AppConfig 同步,仅更新数据库和内存缓存

Dependencies

  • 添加 thiserror 依赖用于错误派生

Migration Notes

⚠️ 从 v0.4.x 升级注意事项:

  1. 配置系统变更 - config.toml 中的运行时配置项不再生效
    • 所有运行时配置现在存储在数据库中
    • 首次启动时会自动初始化默认值
    • 后续通过管理面板或 API 修改配置
  2. API 错误响应格式变更 - 错误响应现在包含更精确的 code 字段
    • link_not_foundvalidation_errorunauthorized
    • 前端需要根据新的错误码处理错误

Installation

Homebrew (macOS/Linux)

brew install AptS-1547/tap/shortlinker

Cargo Binstall

cargo binstall shortlinker

Manual 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

01 Feb 15:23
v0.4.3
70b665a

Choose a tag to compare

🎉 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/shortlinker

Cargo Binstall

cargo binstall shortlinker

Manual 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

01 Feb 07:38
v0.4.2
b7f1be1

Choose a tag to compare

🎉 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/8172.16.0.0/12192.168.0.0/16
    • 适合常见的 Docker、nginx、Caddy 反向代理场景,无需手动配置
    • 公网 IP 默认不信任 X-Forwarded-For,防止伪造攻击
  • 启动时代理检测模式日志 - 显示当前使用的代理检测策略(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

⚠️ 从 v0.4.1 升级注意事项:

  1. 默认行为变更 - 未配置 api.trusted_proxies 时,现在会自动信任来自私有 IP 的连接
    • 大部分反向代理场景(Docker、nginx)可直接使用,无需配置
    • 如需禁用智能检测,请显式配置 api.trusted_proxies = [](空数组)
  2. Unix Socket 模式更严格 - 现在强制要求 X-Forwarded-For 头部,请检查代理配置

Installation

Homebrew (macOS/Linux)

brew install AptS-1547/tap/shortlinker

Cargo Binstall

cargo binstall shortlinker

Manual 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

01 Feb 03:26
v0.4.1
eaa9d2d

Choose a tag to compare

🎉 Release Highlights

v0.4.1 是一次重要的安全与性能优化版本,主要亮点:

  • CSRF 防护 - 双令牌模式的 CSRF 中间件,防止跨站请求伪造攻击
  • 流式 CSV 导出 - 支持大规模数据导出,内存占用从 O(N) 降至 O(batch_size)
  • 登录限流安全增强 - 可信代理配置,防止 IP 伪造绕过限流
  • CSV 导入性能优化 - Bloom Filter 预筛选 + 批量查询,显著提升冲突检测性能
  • 全面的测试覆盖 - 新增 8 个基准测试和覆盖 22 个模块的单元测试

Added

  • CSRF 防护中间件 - 双令牌模式,验证 X-CSRF-Token header 与 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
  • 批量短码存在性检查 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 传输 Cookie
    • cookie_secure=false 时启动输出警告日志
  • 移除可配置 Cookie 名称 - 移除 access_cookie_namerefresh_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

⚠️ 从 v0.4.0 升级注意事项:

  1. CSRF 防护默认启用 - Web 管理面板的所有变更操作需携带 X-CSRF-Token header
  2. Cookie 名称硬编码 - access_cookie_namerefresh_cookie_name 配置项已移除,现在固定为 shortlinker_accessshortlinker_refresh
  3. Cookie Secure 默认开启 - 如需在非 HTTPS 环境使用,需显式设置 cookie_secure=false(启动时会有警告)
  4. 可信代理配置 - 如果在代理/负载均衡器后部署,建议配置 api.trusted_proxies 列表以正确识别客户端 IP

Installation

Homebrew (macOS/Linux)

brew install AptS-1547/tap/shortlinker

Cargo Binstall

cargo binstall shortlinker

Manual 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

22 Jan 16:45
v0.4.0
ff75c21

Choose a tag to compare

🎉 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 与服务器通信,确保缓存同步
  • 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 文件的问题
  • 导入结果统计 - 区分 skippedfailed 字段

Refactored

  • TUI 状态管理 - 拆分 state.rsform_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

⚠️ 从 v0.3.x 升级注意事项:

  1. CLI 命令现在优先通过 IPC 与运行中的服务器通信,确保缓存同步
  2. 导入导出默认使用 CSV 格式,JSON 格式仍可读取但已标记废弃
  3. IPC 套接字路径:Unix /tmp/shortlinker.sock,Windows \\.\pipe\shortlinker

Installation

Homebrew (macOS/Linux)

brew install AptS-1547/tap/shortlinker

Cargo Binstall

cargo binstall shortlinker

Manual 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

18 Jan 20:08
v0.3.0
d78e5f6

Choose a tag to compare

🎉 Release Highlights

v0.3.0 是一个重大版本更新,包含大量安全增强、性能优化和新功能。主要亮点:

  • 动态配置系统 - 支持运行时热更新配置,无需重启服务
  • JWT 认证 - 完整的访问令牌/刷新令牌认证体系
  • 负向缓存 - 优化缓存架构,减少无效查询
  • 管理员登录限流 - 防止暴力破解攻击
  • 敏感信息保护 - 全面加强日志和数据库中的敏感信息处理

Added

  • 动态配置系统 - 基于数据库的运行时配置管理,支持配置热重载
    • 新增 system_configconfig_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_securecookie_same_sitecookie_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-governorgovernor 用于速率限制
  • 添加 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

⚠️ 从 v0.2.x 升级注意事项:

  1. 首次启动时,系统会自动从 config.toml 迁移配置到数据库
  2. 迁移完成后,数据库配置作为主配置源,config.toml 中的动态配置项不再生效
  3. 自动生成的 admin_token 会写入 admin_token.txt 文件,请保存后删除
  4. CORS 默认禁用,如需跨域访问请显式配置
  5. 建议检查并更新 admin_token 为更强的密码

Installation

Homebrew (macOS/Linux)

brew install AptS-1547/tap/shortlinker

Cargo Binstall

cargo binstall shortlinker

Manual 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

18 Jan 12:55
v0.3.0-beta.3
cc22cdd

Choose a tag to compare

Pre-release

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 竞态条件修复 - 使用 entry API 重构 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/shortlinker

Cargo Binstall

cargo binstall shortlinker

Manual 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

16 Jan 16:07
v0.3.0-beta.2
543ceb3

Choose a tag to compare

Pre-release

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-rschronorust-embedwasm-bindgen 等依赖版本
  • 升级 rustc-demangle0.1.27unicode-truncate2.0.1
  • 移除 itertools 0.13.0

Admin Panel

  • PWA 更新检测 - 新增 usePwaUpdate hook,每小时自动检查 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

15 Jan 11:18
v0.3.0-beta.1
dd17b94

Choose a tag to compare

Pre-release

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.rssrc/interfaces/cli/parser.rs
    • 新增 src/cli.rs 定义 CLI 结构
  • Cookie 配置支持热更新 - cookie_securecookie_same_sitecookie_domainrequires_restart 改为 false
  • 文档统一认证方式为 JWT Cookie - 更新 Admin API 和 Health API 文档

Improved

  • 配置元数据同步机制 - 配置迁移时自动同步 value_typerequires_restartis_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