Skip to content

Commit 220cec8

Browse files
xinghenLuyusnelvko
authored andcommitted
Improve subscription fetch validation and configurable subconverter source
1 parent 1a658ac commit 220cec8

3 files changed

Lines changed: 85 additions & 9 deletions

File tree

.env.install

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,10 @@ VERSION_MIHOMO= # v1.19.25
2828
VERSION_YQ= # v4.53.2
2929
VERSION_SUBCONVERTER= # v0.9.0
3030

31+
# subconverter 官方仓库
32+
# SUBCONVERTER_REPO=tindy2013/subconverter
33+
# 下方为社区版,支持更多协议
34+
SUBCONVERTER_REPO=asdlokj1qpi233/subconverter
35+
3136
# Web UI 压缩包
3237
ZIP_UI=archives/dist.zip

scripts/lib/convert.sh

Lines changed: 75 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,82 @@ _download_config() {
55
local url=$2
66
[ "${url:0:4}" = 'file' ] || _okcat '' '正在下载...'
77
_download_raw_config "$dest" "$url" || return 1
8-
_okcat '🍃' '验证订阅配置...'
9-
_valid_config "$dest" || {
10-
_failcat '🍂' "验证失败:尝试订阅转换..."
8+
_normalize_sub_config "$dest" || return 1
9+
10+
_is_html_response "$dest" && {
11+
_errorcat "订阅响应疑似 HTML 页面,请检查订阅链接或 User-Agent"
12+
return 1
13+
}
14+
15+
_is_native_yaml_config "$dest" && {
16+
_okcat '🍃' '检测到原生 Clash/Mihomo 配置'
17+
_valid_config "$dest" && _valid_sub_nodes "$dest" && return
18+
_failcat '🍂' "原生配置验证失败:尝试订阅转换..."
1119
cat "$dest" >"${dest}.raw"
12-
_download_convert_config "$dest" "$url"
20+
_download_convert_config "$dest" "$url" || return
21+
_normalize_sub_config "$dest" || return
22+
_valid_sub_nodes "$dest"
23+
return
24+
}
25+
26+
_okcat '🍃' '验证订阅配置...'
27+
_valid_config "$dest" && _valid_sub_nodes "$dest" && return
28+
29+
_failcat '🍂' "验证失败:尝试订阅转换..."
30+
cat "$dest" >"${dest}.raw"
31+
_download_convert_config "$dest" "$url" || return
32+
_normalize_sub_config "$dest" || return
33+
_valid_sub_nodes "$dest"
34+
}
35+
36+
_normalize_sub_config() {
37+
local dest=$1
38+
39+
[ -s "$dest" ] || {
40+
_errorcat "订阅响应为空,请检查订阅链接"
41+
return 1
42+
}
43+
44+
LC_ALL=C sed -i '1s/^\xEF\xBB\xBF//' "$dest" 2>/dev/null || true
45+
sed -i 's/\r$//' "$dest" 2>/dev/null || true
46+
47+
command -v iconv >/dev/null || return 0
48+
iconv -f UTF-8 -t UTF-8 "$dest" >/dev/null 2>&1 && return 0
49+
50+
local charset
51+
for charset in GB18030 GBK BIG5; do
52+
iconv -f "$charset" -t UTF-8 "$dest" -o "${dest}.utf8" 2>/dev/null && {
53+
/bin/mv -f "${dest}.utf8" "$dest"
54+
_okcat '🔤' "订阅已从 $charset 转为 UTF-8"
55+
return 0
56+
}
57+
done
58+
59+
/usr/bin/rm -f "${dest}.utf8" 2>/dev/null
60+
return 0
61+
}
62+
63+
_is_html_response() {
64+
LC_ALL=C grep -qiE '<[[:space:]]*(!doctype|html|head|body|title)([[:space:]>]|$)' "$1"
65+
}
66+
67+
_is_native_yaml_config() {
68+
"$BIN_YQ" -e '
69+
((.proxies // []) | type == "!!seq" and length > 0) or
70+
((.proxy-providers // {}) | type == "!!map" and length > 0)
71+
' "$1" >/dev/null 2>&1
72+
}
73+
74+
_valid_sub_nodes() {
75+
local config=$1 count
76+
count=$("$BIN_YQ" '
77+
((.proxies // []) | length) +
78+
((.proxy-providers // {}) | length)
79+
' "$config" 2>/dev/null) || return 0
80+
81+
[ "${count:-0}" -gt 0 ] || {
82+
_errorcat "订阅未解析出任何节点,请检查订阅内容或转换器版本"
83+
return 1
1384
}
1485
}
1586

scripts/preflight.sh

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ download_zip() {
130130
case $item in
131131
mihomo) _resolve_version VERSION_MIHOMO MetaCubeX/mihomo || exit ;;
132132
yq) _resolve_version VERSION_YQ mikefarah/yq || exit ;;
133-
subconverter) _resolve_version VERSION_SUBCONVERTER tindy2013/subconverter || exit ;;
133+
subconverter) _resolve_version VERSION_SUBCONVERTER "$SUBCONVERTER_REPO" || exit ;;
134134
esac
135135
done
136136

@@ -145,25 +145,25 @@ download_zip() {
145145
url_clash=https://github.com/nelvko/clash-for-linux-install/releases/download/clash/clash-linux-amd64-2023.08.17.gz
146146
url_mihomo=https://github.com/MetaCubeX/mihomo/releases/download/${VERSION_MIHOMO##*-}/mihomo-linux-amd64-${VERSION_MIHOMO}.gz
147147
url_yq=https://github.com/mikefarah/yq/releases/download/${VERSION_YQ}/yq_linux_amd64.tar.gz
148-
url_subconverter=https://github.com/tindy2013/subconverter/releases/download/${VERSION_SUBCONVERTER}/subconverter_linux64.tar.gz
148+
url_subconverter=https://github.com/${SUBCONVERTER_REPO}/releases/download/${VERSION_SUBCONVERTER}/subconverter_linux64.tar.gz
149149
;;
150150
*86*)
151151
url_clash=https://github.com/nelvko/clash-for-linux-install/releases/download/clash/clash-linux-386-2023.08.17.gz
152152
url_mihomo=https://github.com/MetaCubeX/mihomo/releases/download/${VERSION_MIHOMO##*-}/mihomo-linux-386-${VERSION_MIHOMO}.gz
153153
url_yq=https://github.com/mikefarah/yq/releases/download/${VERSION_YQ}/yq_linux_386.tar.gz
154-
url_subconverter=https://github.com/tindy2013/subconverter/releases/download/${VERSION_SUBCONVERTER}/subconverter_linux32.tar.gz
154+
url_subconverter=https://github.com/${SUBCONVERTER_REPO}/releases/download/${VERSION_SUBCONVERTER}/subconverter_linux32.tar.gz
155155
;;
156156
armv*)
157157
url_clash=https://github.com/nelvko/clash-for-linux-install/releases/download/clash/clash-linux-armv5-2023.08.17.gz
158158
url_mihomo=https://github.com/MetaCubeX/mihomo/releases/download/${VERSION_MIHOMO##*-}/mihomo-linux-armv7-${VERSION_MIHOMO}.gz
159159
url_yq=https://github.com/mikefarah/yq/releases/download/${VERSION_YQ}/yq_linux_arm.tar.gz
160-
url_subconverter=https://github.com/tindy2013/subconverter/releases/download/${VERSION_SUBCONVERTER}/subconverter_armv7.tar.gz
160+
url_subconverter=https://github.com/${SUBCONVERTER_REPO}/releases/download/${VERSION_SUBCONVERTER}/subconverter_armv7.tar.gz
161161
;;
162162
aarch64)
163163
url_clash=https://github.com/nelvko/clash-for-linux-install/releases/download/clash/clash-linux-arm64-2023.08.17.gz
164164
url_mihomo=https://github.com/MetaCubeX/mihomo/releases/download/${VERSION_MIHOMO##*-}/mihomo-linux-arm64-${VERSION_MIHOMO}.gz
165165
url_yq=https://github.com/mikefarah/yq/releases/download/${VERSION_YQ}/yq_linux_arm64.tar.gz
166-
url_subconverter=https://github.com/tindy2013/subconverter/releases/download/${VERSION_SUBCONVERTER}/subconverter_aarch64.tar.gz
166+
url_subconverter=https://github.com/${SUBCONVERTER_REPO}/releases/download/${VERSION_SUBCONVERTER}/subconverter_aarch64.tar.gz
167167
;;
168168
*)
169169
_errorcat "未知的架构版本:$arch,请自行下载对应版本至 ${ZIP_BASE_DIR} 目录" || exit

0 commit comments

Comments
 (0)