AutoJump
通过 Tampermonkey 脚本 + Caddy 服务端,根据当前 URL 自动跳转到指定目标。管理员用 CLI 管理用户和规则,用户只需安装脚本并输入 Token。
整体逻辑
flowchart TB
subgraph Admin["管理员"]
CLI["python3 main.py<br/>user add / rule add / gen"]
DATA[("data.json<br/>用户 + 规则")]
GEN_OUT["生成产物<br/>AutoJump.Caddyfile<br/>www/AutoJump.user.js"]
end
subgraph Server["Caddy Server"]
API["/map 接口<br/>按 Bearer Token 分发 URL 映射"]
STATIC["AutoJump.user.js(静态文件)"]
end
subgraph Browser["用户浏览器 · Tampermonkey"]
SCRIPT["AutoJump.user.js<br/>1. 检查缓存<br/>2. GET /map<br/>3. 匹配 URL(^…$)<br/>4. 跳转"]
CACHE[("GM_setValue<br/>缓存 1 小时")]
TOKEN[("GM_setValue<br/>Token 持久化")]
end
CLI --> DATA
CLI --> GEN_OUT
GEN_OUT --> Server
SCRIPT -->|"Authorization: Bearer <token>"| API
SCRIPT --> CACHE
SCRIPT --> TOKEN
SCRIPT -->|"@updateURL"| STATIC
组件
| 文件 |
说明 |
main.py |
CLI 管理工具,管理用户、规则,生成 Caddyfile 和脚本 |
data.json |
配置文件,根即用户字典 |
AutoJump.Caddyfile |
Caddy 服务端配置,按 Bearer Token 分发不同用户的 URL 映射 |
www/AutoJump.user.js |
Tampermonkey 用户脚本 |
www/AutoJump.user.js.meta.js |
脚本元数据,供 Tampermonkey 自动检测更新 |
数据流
- 管理员用
main.py 添加用户和 URL 跳转规则
gen --server <url> 生成 Caddyfile(输出目录根)+ 用户脚本(输出到 www/),版本号自动取当前时间
- 将
AutoJump.Caddyfile 部署到 Caddy,www/ 目录设为 Caddy web root
- 管理员给用户分配 Token
- 用户安装脚本后,首次运行弹窗输入 Token(存入
GM_setValue,更新不丢失)
- 每次页面加载:
- 先检查本地缓存(1 小时有效),有则直接匹配跳转
- 无缓存则
GET /map 带上 Bearer Token 获取用户专属的 URL 映射 JSON
- 正则从 URL 开头匹配到结尾(
^…$),防止部分路径误匹配
- 匹配则
window.location.replace 跳转
- Tampermonkey 通过
@updateURL 定期检查脚本更新
快速开始
1. 添加用户
python3 main.py user add alice
# [OK] 已添加用户 'alice', token: a1b2c3d4e5f6a7b8
2. 添加规则
python3 main.py rule add --user alice 'https://old-site\.com/.*' 'https://new-site.com/'
python3 main.py rule add --user alice 'https://legacy\.org/page.*' 'https://new-site.com/home'
3. 生成
python3 main.py gen --server https://jump.example.com -o .
# 输出:
# ./AutoJump.Caddyfile
# ./www/AutoJump.user.js
# ./www/AutoJump.user.js.meta.js
# 自动运行 caddy fmt + caddy validate
4. 部署
AutoJump.Caddyfile 放到 Caddy 配置目录
www/ 目录设为 Caddy web root
5. 用户安装
- 打开
https://jump.example.com/AutoJump.user.js,Tampermonkey 会自动识别安装
- 首次运行弹窗输入 Token(菜单也可随时修改:🔑 设置 Token)
CLI 命令参考
用户管理
user list 列出所有用户
user add <name> 添加用户(token 自动生成)
user remove <name> 删除用户
user token <name> 重新生成 token
规则管理
rule list --user <name> 列出规则(带编号)
rule add --user <name> <regex> <target> 添加规则
rule remove --user <name> <编号> 按编号删除
生成
gen --server <url> [-o <dir>] 生成 Caddyfile + 用户脚本
版本自动取当前时间
自动运行 caddy fmt + validate
Caddyfile 示例
(ALICE) {
header Content-Type "application/json"
respond `{"https://old-site\\.com/.*":"https://new-site.com/"}`
}
jump.example.com {
handle /map {
@alice header Authorization "Bearer a1b2c3d4e5f6a7b8"
handle @alice { import ALICE }
handle {
header Content-Type "application/json"
respond `{"error":"unauthorized"}` 401
}
}
handle /www/* {
root * /home/user/services/AutoJump
file_server
}
handle {
root * /home/user/services/AutoJump/www
file_server
}
}
用户脚本功能
- Token 持久化:存入
GM_setValue,自动更新不丢失
- 引导式设置:首次运行弹窗输入 Token,Tampermonkey 菜单
🔑 设置 Token 可随时修改
- 缓存 URL 映射 1 小时(
GM_setValue),减少请求
- 全 URL 匹配:正则自动加
^…$ 锚点,防止部分路径误匹配
- 控制台日志:
[AutoJump] 前缀输出缓存命中、URL 检查、匹配/未匹配、请求结果
- Tampermonkey 菜单:
🔄 刷新 URL 映射 手动清缓存刷新
- @updateURL / @downloadURL 自动检测更新
更新日志
| 版本 |
变更 |
| 0.0.1 |
初始版本:CLI 管理用户/规则,生成 Caddyfile + Tampermonkey 脚本 |
| - |
Mermaid 流程图替换 ASCII 示意图 |
| - |
脚本输出到 www/ 子目录,Caddyfile 使用真实绝对路径 |
| - |
脚本添加 [AutoJump] 控制台日志 |
| - |
--server 自动补 https:// |
| - |
正则加 ^…$ 锚点,防止部分 URL 误匹配 |
| - |
Token 存入 GM_setValue(更新不丢失),首次运行弹窗输入,菜单可修改 |