1
0
mirror of https://github.com/nitezs/sub2clash.git synced 2024-12-23 14:54:42 -05:00

fix: vless 未解析 short-id

This commit is contained in:
Nite07 2024-03-10 13:56:22 +08:00
parent 94a320a682
commit 916670cf68
7 changed files with 9764 additions and 9762 deletions

View File

@ -2,36 +2,36 @@
获取 Clash/Clash.Meta 配置链接 获取 Clash/Clash.Meta 配置链接
| Query 参数 | 类型 | 是否必须 | 默认值 | 说明 | | Query 参数 | 类型 | 是否必须 | 默认值 | 说明 |
|--------------|--------|-------------------|-----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | ------------ | ------ | ------------------------ | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| sub | string | sub/proxy 至少有一项存在 | - | 订阅链接,可以在链接结尾加上`#名称`,来给订阅中的节点加上统一前缀(可以输入多个,用 `,` 分隔) | | sub | string | sub/proxy 至少有一项存在 | - | 订阅链接,可以在链接结尾加上`#名称`,来给订阅中的节点加上统一前缀(可以输入多个,用 `,` 分隔) |
| proxy | string | sub/proxy 至少有一项存在 | - | 节点分享链接(可以输入多个,用 `,` 分隔) | | proxy | string | sub/proxy 至少有一项存在 | - | 节点分享链接(可以输入多个,用 `,` 分隔) |
| refresh | bool | 否 | `false` | 强制刷新配置(默认缓存 5 分钟) | | refresh | bool | 否 | `false` | 强制刷新配置(默认缓存 5 分钟) |
| template | string | 否 | - | 外部模板链接或内部模板名称 | | template | string | 否 | - | 外部模板链接或内部模板名称 |
| ruleProvider | string | 否 | - | 格式 `[Behavior,Url,Group,Prepend,Name],[Behavior,Url,Group,Prepend,Name]...`,其中 `Group` 是该规则集使用的策略组名,`Prepend` 为 bool 类型,如果为 `true` 规则将被添加到规则列表顶部,否则添加到规则列表底部(会调整到 MATCH 规则之前) | | ruleProvider | string | 否 | - | 格式 `[Behavior,Url,Group,Prepend,Name],[Behavior,Url,Group,Prepend,Name]...`,其中 `Group` 是该规则集使用的策略组名,`Prepend` 为 bool 类型,如果为 `true` 规则将被添加到规则列表顶部,否则添加到规则列表底部(会调整到 MATCH 规则之前) |
| rule | string | 否 | - | 格式 `[Rule,Prepend],[Rule,Prepend]...`,其中 `Prepend` 为 bool 类型,如果为 `true` 规则将被添加到规则列表顶部,否则添加到规则列表底部(会调整到 MATCH 规则之前) | | rule | string | 否 | - | 格式 `[Rule,Prepend],[Rule,Prepend]...`,其中 `Prepend` 为 bool 类型,如果为 `true` 规则将被添加到规则列表顶部,否则添加到规则列表底部(会调整到 MATCH 规则之前) |
| autoTest | bool | 否 | `false` | 国家策略组是否自动测速 | | autoTest | bool | 否 | `false` | 国家策略组是否自动测速 |
| lazy | bool | 否 | `false` | 自动测速是否启用 lazy | | lazy | bool | 否 | `false` | 自动测速是否启用 lazy |
| sort | string | 否 | `nameasc` | 国家策略组排序策略,可选值 `nameasc`、`namedesc`、`sizeasc`、`sizedesc` | | sort | string | 否 | `nameasc` | 国家策略组排序策略,可选值 `nameasc`、`namedesc`、`sizeasc`、`sizedesc` |
| replace | string | 否 | - | 通过正则表达式重命名节点,格式 `[<ReplaceKey>,<ReplaceTo>],[<ReplaceKey>,<ReplaceTo>]...` | | replace | string | 否 | - | 通过正则表达式重命名节点,格式 `[<ReplaceKey>,<ReplaceTo>],[<ReplaceKey>,<ReplaceTo>]...` |
| remove | string | 否 | - | 通过正则表达式删除节点 | | remove | string | 否 | - | 通过正则表达式删除节点 |
| nodeList | bool | 否 | `false` | 只输出节点 | | nodeList | bool | 否 | `false` | 只输出节点 |
# `/short` # `/short`
获取短链Content-Type 为 `application/json` 获取短链Content-Type 为 `application/json`
具体参考使用可以参考 [api\templates\index.html](api/static/index.html) 具体参考使用可以参考 [api\templates\index.html](api/static/index.html)
| Body 参数 | 类型 | 是否必须 | 默认值 | 说明 | | Body 参数 | 类型 | 是否必须 | 默认值 | 说明 |
|----------|--------|------|-----|------------------| | --------- | ------ | -------- | ------ | ------------------------- |
| url | string | 是 | - | 需要转换的 Query 参数部分 | | url | string | 是 | - | 需要转换的 Query 参数部分 |
| password | string | 否 | - | 短链密码 | | password | string | 否 | - | 短链密码 |
# `/s/:hash` # `/s/:hash`
短链跳转 短链跳转
`hash` 为动态路由参数,可以通过 `/short` 接口获取 `hash` 为动态路由参数,可以通过 `/short` 接口获取
| Query 参数 | 类型 | 是否必须 | 默认值 | 说明 | | Query 参数 | 类型 | 是否必须 | 默认值 | 说明 |
|----------|--------|------|-----|------| | ---------- | ------ | -------- | ------ | -------- |
| password | string | 否 | - | 短链密码 | | password | string | 否 | - | 短链密码 |

View File

@ -5,40 +5,40 @@
## 特性 ## 特性
- 开箱即用的规则、策略组配置 - 开箱即用的规则、策略组配置
- 自动根据节点名称按国家划分策略组 - 自动根据节点名称按国家划分策略组
- 支持多订阅合并 - 支持多订阅合并
- 支持添加自定义 Rule Provider、Rule - 支持添加自定义 Rule Provider、Rule
- 支持多种协议 - 支持多种协议
- Shadowsocks - Shadowsocks
- ShadowsocksR - ShadowsocksR
- Vmess - Vmess
- Vless Clash.Meta - Vless Clash.Meta
- Trojan - Trojan
- Hysteria Clash.Meta - Hysteria Clash.Meta
- Hysteria2 Clash.Meta - Hysteria2 Clash.Meta
## 使用 ## 使用
### 运行 ### 运行
- [docker compose](./docker-compose.yml) - [docker compose](./docker-compose.yml)
- 运行[二进制文件](https://github.com/nitezs/sub2clash/releases/latest) - 运行[二进制文件](https://github.com/nitezs/sub2clash/releases/latest)
### 配置 ### 配置
可以通过编辑 .env 文件来修改默认配置docker 直接添加环境变量 可以通过编辑 .env 文件来修改默认配置docker 直接添加环境变量
| 变量名 | 说明 | 默认值 | | 变量名 | 说明 | 默认值 |
|-----------------------|----------------------------------------|-----------------------| | --------------------- | ---------------------------------------------- | --------------------- |
| PORT | 端口 | `8011` | | PORT | 端口 | `8011` |
| META_TEMPLATE | 默认 meta 模板文件名 | `template_meta.yaml` | | META_TEMPLATE | 默认 meta 模板文件名 | `template_meta.yaml` |
| CLASH_TEMPLATE | 默认 clash 模板文件名 | `template_clash.yaml` | | CLASH_TEMPLATE | 默认 clash 模板文件名 | `template_clash.yaml` |
| REQUEST_RETRY_TIMES | Get 请求重试次数 | `3` | | REQUEST_RETRY_TIMES | Get 请求重试次数 | `3` |
| REQUEST_MAX_FILE_SIZE | Get 请求订阅文件最大大小byte | `1048576` | | REQUEST_MAX_FILE_SIZE | Get 请求订阅文件最大大小byte | `1048576` |
| CACHE_EXPIRE | 订阅缓存时间(秒) | `300` | | CACHE_EXPIRE | 订阅缓存时间(秒) | `300` |
| LOG_LEVEL | 日志等级,可选值 `debug`,`info`,`warn`,`error` | `info` | | LOG_LEVEL | 日志等级,可选值 `debug`,`info`,`warn`,`error` | `info` |
| SHORT_LINK_LENGTH | 短链长度 | `6` | | SHORT_LINK_LENGTH | 短链长度 | `6` |
### API ### API
@ -49,14 +49,14 @@
可以通过变量自定义模板中的策略组代理节点 可以通过变量自定义模板中的策略组代理节点
解释的不太清楚,可以参考下方默认模板 解释的不太清楚,可以参考下方默认模板
- `<all>` 为添加所有节点 - `<all>` 为添加所有节点
- `<countries>` 为添加所有国家策略组 - `<countries>` 为添加所有国家策略组
- `<地区二位字母代码>` 为添加指定地区所有节点,例如 `<hk>` 将添加所有香港节点 - `<地区二位字母代码>` 为添加指定地区所有节点,例如 `<hk>` 将添加所有香港节点
#### 默认模板 #### 默认模板
- [Clash](./templates/template_clash.yaml) - [Clash](./templates/template_clash.yaml)
- [Clash.Meta](./templates/template_meta.yaml) - [Clash.Meta](./templates/template_meta.yaml)
## 已知问题 ## 已知问题

View File

@ -46,6 +46,10 @@ func ParseShadowsocksR(proxy string) (model.Proxy, error) {
remarks, err = DecodeBase64(params.Get("remarks")) remarks, err = DecodeBase64(params.Get("remarks"))
} }
if err != nil {
return model.Proxy{}, err
}
result := model.Proxy{ result := model.Proxy{
Name: remarks, Name: remarks,
Type: "ssr", Type: "ssr",

View File

@ -49,6 +49,7 @@ func ParseVless(proxy string) (model.Proxy, error) {
Servername: params.Get("sni"), Servername: params.Get("sni"),
RealityOpts: model.RealityOptions{ RealityOpts: model.RealityOptions{
PublicKey: params.Get("pbk"), PublicKey: params.Get("pbk"),
ShortID: params.Get("sid"),
}, },
} }
if params.Get("alpn") != "" { if params.Get("alpn") != "" {

File diff suppressed because it is too large Load Diff

View File

@ -5,123 +5,123 @@ mode: Rule
log-level: info log-level: info
proxies: proxies:
proxy-groups: proxy-groups:
- name: 节点选择 - name: 节点选择
type: select type: select
proxies: proxies:
- <countries> - <countries>
- 手动切换 - 手动切换
- DIRECT - DIRECT
- name: 手动切换 - name: 手动切换
type: select type: select
proxies: proxies:
- <all> - <all>
- name: 游戏平台(中国) - name: 游戏平台(中国)
type: select type: select
proxies: proxies:
- 节点选择 - 节点选择
- <countries> - <countries>
- 手动切换 - 手动切换
- DIRECT - DIRECT
- name: 游戏平台(全球) - name: 游戏平台(全球)
type: select type: select
proxies: proxies:
- 节点选择 - 节点选择
- <countries> - <countries>
- 手动切换 - 手动切换
- DIRECT - DIRECT
- name: 巴哈姆特 - name: 巴哈姆特
type: select type: select
proxies: proxies:
- 节点选择 - 节点选择
- <countries> - <countries>
- 手动切换 - 手动切换
- DIRECT - DIRECT
- name: 哔哩哔哩 - name: 哔哩哔哩
type: select type: select
proxies: proxies:
- 节点选择 - 节点选择
- <countries> - <countries>
- 手动切换 - 手动切换
- DIRECT - DIRECT
- name: Telegram - name: Telegram
type: select type: select
proxies: proxies:
- 节点选择 - 节点选择
- <countries> - <countries>
- 手动切换 - 手动切换
- DIRECT - DIRECT
- name: OpenAI - name: OpenAI
type: select type: select
proxies: proxies:
- 节点选择 - 节点选择
- <countries> - <countries>
- 手动切换 - 手动切换
- DIRECT - DIRECT
- name: Youtube - name: Youtube
type: select type: select
proxies: proxies:
- 节点选择 - 节点选择
- <countries> - <countries>
- 手动切换 - 手动切换
- DIRECT - DIRECT
- name: Microsoft - name: Microsoft
type: select type: select
proxies: proxies:
- 节点选择 - 节点选择
- <countries> - <countries>
- 手动切换 - 手动切换
- DIRECT - DIRECT
- name: Onedrive - name: Onedrive
type: select type: select
proxies: proxies:
- 节点选择 - 节点选择
- <countries> - <countries>
- 手动切换 - 手动切换
- DIRECT - DIRECT
- name: Apple - name: Apple
type: select type: select
proxies: proxies:
- 节点选择 - 节点选择
- <countries> - <countries>
- 手动切换 - 手动切换
- DIRECT - DIRECT
- name: Netflix - name: Netflix
type: select type: select
proxies: proxies:
- 节点选择 - 节点选择
- <countries> - <countries>
- 手动切换 - 手动切换
- DIRECT - DIRECT
- name: 广告拦截 - name: 广告拦截
type: select type: select
proxies: proxies:
- REJECT - REJECT
- DIRECT - DIRECT
- name: 漏网之鱼 - name: 漏网之鱼
type: select type: select
proxies: proxies:
- 节点选择 - 节点选择
- <countries> - <countries>
- 手动切换 - 手动切换
- DIRECT - DIRECT
rules: rules:
- GEOSITE,private,DIRECT,no-resolve - GEOSITE,private,DIRECT,no-resolve
- GEOIP,private,DIRECT - GEOIP,private,DIRECT
- GEOSITE,category-ads-all,广告拦截 - GEOSITE,category-ads-all,广告拦截
- GEOSITE,microsoft,Microsoft - GEOSITE,microsoft,Microsoft
- GEOSITE,apple,Apple - GEOSITE,apple,Apple
- GEOSITE,netflix,Netflix - GEOSITE,netflix,Netflix
- GEOIP,netflix,Netflix - GEOIP,netflix,Netflix
- GEOSITE,onedrive,Onedrive - GEOSITE,onedrive,Onedrive
- GEOSITE,youtube,Youtube - GEOSITE,youtube,Youtube
- GEOSITE,telegram,Telegram - GEOSITE,telegram,Telegram
- GEOIP,telegram,Telegram - GEOIP,telegram,Telegram
- GEOSITE,openai,OpenAI - GEOSITE,openai,OpenAI
- GEOSITE,bilibili,哔哩哔哩 - GEOSITE,bilibili,哔哩哔哩
- GEOSITE,bahamut,巴哈姆特 - GEOSITE,bahamut,巴哈姆特
- GEOSITE,category-games@cn,游戏平台(中国) - GEOSITE,category-games@cn,游戏平台(中国)
- GEOSITE,category-games,游戏平台(全球) - GEOSITE,category-games,游戏平台(全球)
- GEOSITE,geolocation-!cn,节点选择 - GEOSITE,geolocation-!cn,节点选择
- GEOSITE,CN,DIRECT - GEOSITE,CN,DIRECT
- GEOIP,CN,DIRECT - GEOIP,CN,DIRECT
- MATCH,漏网之鱼 - MATCH,漏网之鱼

View File

@ -27,9 +27,6 @@ func ConnectDB() error {
if err != nil { if err != nil {
return err return err
} }
if err != nil {
return err
}
DB = db DB = db
err = db.AutoMigrate(&model.ShortLink{}) err = db.AutoMigrate(&model.ShortLink{})
if err != nil { if err != nil {