No description
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-07-11 16:08:17 +08:00
.gitignore 0.0.1 2026-07-11 03:28:40 +08:00
main.py 0.1.0 2026-07-11 16:08:17 +08:00
README.md 0.1.0 2026-07-11 16:08:17 +08:00

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 自动检测更新

数据流

  1. 管理员用 main.py 添加用户和 URL 跳转规则
  2. gen --server <url> 生成 Caddyfile输出目录根+ 用户脚本(输出到 www/),版本号自动取当前时间
  3. AutoJump.Caddyfile 部署到 Caddywww/ 目录设为 Caddy web root
  4. 管理员给用户分配 Token
  5. 用户安装脚本后,首次运行弹窗输入 Token存入 GM_setValue,更新不丢失)
  6. 每次页面加载:
    • 先检查本地缓存1 小时有效),有则直接匹配跳转
    • 无缓存则 GET /map 带上 Bearer Token 获取用户专属的 URL 映射 JSON
    • 正则从 URL 开头匹配到结尾(^…$),防止部分路径误匹配
    • 匹配则 window.location.replace 跳转
  7. 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.jsTampermonkey 会自动识别安装
  • 首次运行弹窗输入 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,自动更新不丢失
  • 引导式设置:首次运行弹窗输入 TokenTampermonkey 菜单 🔑 设置 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(更新不丢失),首次运行弹窗输入,菜单可修改