mirror of
https://github.com/juewuy/ShellCrash.git
synced 2026-03-11 07:51:45 +00:00
Merge remote-tracking branch 'upstream/dev' into redesign-1
This commit is contained in:
2
.github/workflows/update_singbox_core.yaml
vendored
2
.github/workflows/update_singbox_core.yaml
vendored
@@ -88,7 +88,7 @@ jobs:
|
|||||||
git fetch --tags sekai
|
git fetch --tags sekai
|
||||||
version=$(CGO_ENABLED=0 go run ./cmd/internal/read_tag)
|
version=$(CGO_ENABLED=0 go run ./cmd/internal/read_tag)
|
||||||
[ -z "$version" ] && version=${{ inputs.tag2 }}
|
[ -z "$version" ] && version=${{ inputs.tag2 }}
|
||||||
version=$(echo $version | sed 's/-.*$//')
|
version=$(echo ${version%-*})
|
||||||
echo version=$version >> $GITHUB_OUTPUT
|
echo version=$version >> $GITHUB_OUTPUT
|
||||||
if [ -z "$TAGS" ];then
|
if [ -z "$TAGS" ];then
|
||||||
if [ "$REPO" = 'SagerNet/sing-box' ];then
|
if [ "$REPO" = 'SagerNet/sing-box' ];then
|
||||||
|
|||||||
Binary file not shown.
@@ -1,4 +1,4 @@
|
|||||||
meta_v=v1.19.17
|
meta_v=v1.19.17
|
||||||
singboxr_v=1.13.0-alpha.27
|
singboxr_v=1.13.0-alpha.27
|
||||||
versionsh=1.9.5alpha4
|
versionsh=1.9.5alpha5
|
||||||
GeoIP_v=20251205
|
GeoIP_v=20251205
|
||||||
|
|||||||
@@ -9,4 +9,4 @@ COMMON_MOD="模式"
|
|||||||
COMMON_ERR_NUM="请输入正确的数字!"
|
COMMON_ERR_NUM="请输入正确的数字!"
|
||||||
COMMON_ERR_LETTER="请输入正确的字母或数字!"
|
COMMON_ERR_LETTER="请输入正确的字母或数字!"
|
||||||
COMMON_ERR_INPUT="输入错误,请重新输入!"
|
COMMON_ERR_INPUT="输入错误,请重新输入!"
|
||||||
COMMON_ERR_INPUT="操作已取消!"
|
COMMON_ERR_CANCEL="操作已取消!"
|
||||||
|
|||||||
@@ -9,4 +9,4 @@ COMMON_MOD="Mod"
|
|||||||
COMMON_ERR_NUM="Please enter a valid number!"
|
COMMON_ERR_NUM="Please enter a valid number!"
|
||||||
COMMON_ERR_LETTER="Please enter a valid letter or number!"
|
COMMON_ERR_LETTER="Please enter a valid letter or number!"
|
||||||
COMMON_ERR_INPUT="Invalid input, please try again!"
|
COMMON_ERR_INPUT="Invalid input, please try again!"
|
||||||
COMMON_ERR_INPUT="Operation cancelled!"
|
COMMON_ERR_CANCEL="Operation cancelled!"
|
||||||
|
|||||||
@@ -32,10 +32,12 @@ start_core() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -s "$core_config" ] && [ -s "$CRASHDIR/configs/providers.cfg" ]; then
|
if [ ! -s "$core_config" ] && [ -s "$CRASHDIR/configs/providers.cfg" ]; then
|
||||||
[ "$crashcore" = singboxr ] && coretype=singbox
|
if [ "$crashcore" = singboxr ];then
|
||||||
[ "$crashcore" = meta -o "$crashcore" = clashpre ] && coretype=clash
|
CORE_TYPE=singbox
|
||||||
|
else
|
||||||
. "$CRASHDIR/menus/6_core_config.sh" && gen_"${coretype}"_providers
|
CORE_TYPE=clash
|
||||||
|
fi
|
||||||
|
. "$CRASHDIR/menus/providers_$CORE_TYPE.sh" && gen_providers
|
||||||
|
|
||||||
line_break
|
line_break
|
||||||
separator_line "="
|
separator_line "="
|
||||||
|
|||||||
@@ -5,10 +5,13 @@
|
|||||||
__IS_MODULE_6_CORECONFIG_LOADED=1
|
__IS_MODULE_6_CORECONFIG_LOADED=1
|
||||||
|
|
||||||
if echo "$crashcore" | grep -q 'singbox'; then
|
if echo "$crashcore" | grep -q 'singbox'; then
|
||||||
CONFIG_PATH="$CRASHDIR"/yamls/config.json
|
CONFIG_PATH="$CRASHDIR"/jsons/config.json
|
||||||
|
CORE_TYPE=singbox
|
||||||
else
|
else
|
||||||
CONFIG_PATH="$CRASHDIR"/jsons/config.yaml
|
CONFIG_PATH="$CRASHDIR"/yamls/config.yaml
|
||||||
|
CORE_TYPE=clash
|
||||||
fi
|
fi
|
||||||
|
URI_EXP='ss|vmess|vless|trojan|tuic|anytls|shadowtls|hysteria(2)?'
|
||||||
|
|
||||||
# 配置文件主界面
|
# 配置文件主界面
|
||||||
set_core_config() {
|
set_core_config() {
|
||||||
@@ -17,15 +20,14 @@ set_core_config() {
|
|||||||
[ -s "$CRASHDIR"/configs/providers.cfg ] || [ -s "$CRASHDIR"/configs/providers_uri.cfg ] && {
|
[ -s "$CRASHDIR"/configs/providers.cfg ] || [ -s "$CRASHDIR"/configs/providers_uri.cfg ] && {
|
||||||
echo -e "\033[36m输入数字可管理对应提供者\033[0m"
|
echo -e "\033[36m输入数字可管理对应提供者\033[0m"
|
||||||
cat "$CRASHDIR"/configs/providers.cfg "$CRASHDIR"/configs/providers_uri.cfg 2>/dev/null |
|
cat "$CRASHDIR"/configs/providers.cfg "$CRASHDIR"/configs/providers_uri.cfg 2>/dev/null |
|
||||||
awk '{print " " NR ") " $1 "\t" substr($2,1,30) "..."}'
|
awk '{print " " NR ") " $1 " \t\t" substr($2,1,30) "..."}'
|
||||||
separator_line "-"
|
separator_line "-"
|
||||||
}
|
}
|
||||||
content_line "a) \033[32m添加提供者\033[0m(支持订阅/节点/本地文件)"
|
content_line "a) \033[32m添加提供者\033[0m(支持订阅/分享链接及本地文件)"
|
||||||
content_line "b) \033[36m本地生成配置文件\033[0m(基于providers,推荐!)"
|
content_line "b) \033[36m本地生成配置文件\033[0m(By Providers,推荐!)"
|
||||||
content_line "c) \033[33m在线生成配置文件\033[0m(Subconverter)"
|
content_line "c) \033[33m在线生成配置文件\033[0m(By Subconverter)"
|
||||||
content_line "d) \033[31m清空提供者列表\033[0m"
|
content_line "d) \033[31m清空提供者列表\033[0m"
|
||||||
content_line "e) \033[36m自定义配置文件\033[0m"
|
content_line "e) \033[36m自定义配置文件\033[0m"
|
||||||
content_line "f) \033[33m还原配置文件\033[0m"
|
|
||||||
|
|
||||||
common_back
|
common_back
|
||||||
read -r -p "$COMMON_INPUT_L > " num
|
read -r -p "$COMMON_INPUT_L > " num
|
||||||
@@ -35,10 +37,9 @@ set_core_config() {
|
|||||||
;;
|
;;
|
||||||
[1-9] | [1-9][0-9])
|
[1-9] | [1-9][0-9])
|
||||||
line=$(cat "$CRASHDIR"/configs/providers.cfg "$CRASHDIR"/configs/providers_uri.cfg 2>/dev/null | sed -n "$num p")
|
line=$(cat "$CRASHDIR"/configs/providers.cfg "$CRASHDIR"/configs/providers_uri.cfg 2>/dev/null | sed -n "$num p")
|
||||||
setproviders
|
setproviders "$line"
|
||||||
;;
|
;;
|
||||||
a)
|
a)
|
||||||
line=''
|
|
||||||
setproviders
|
setproviders
|
||||||
;;
|
;;
|
||||||
b)
|
b)
|
||||||
@@ -80,28 +81,6 @@ set_core_config() {
|
|||||||
[ "$checkcfg" != "$checkcfg_new" ] && checkrestart
|
[ "$checkcfg" != "$checkcfg_new" ] && checkrestart
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
f)
|
|
||||||
if [ ! -f "$CONFIG_PATH".bak ]; then
|
|
||||||
echo "-----------------------------------------------"
|
|
||||||
content_line "\033[31m没有找到配置文件的备份!\033[0m"
|
|
||||||
else
|
|
||||||
echo "-----------------------------------------------"
|
|
||||||
content_line "备份文件共有\033[32m$(wc -l <$"$CONFIG_PATH".bak)\033[0m行内容"
|
|
||||||
content_line "当前文件共有\033[32m$(wc -l <$"$CONFIG_PATH")\033[0m行内容"
|
|
||||||
read -p "确认还原配置文件?此操作不可逆![1/0] > " res
|
|
||||||
if [ "$res" = '1' ]; then
|
|
||||||
mv "$CONFIG_PATH".bak "$CONFIG_PATH"
|
|
||||||
echo "----------------------------------------------"
|
|
||||||
content_line "\033[32m配置文件已还原!请手动重启服务!\033[0m"
|
|
||||||
sleep 1
|
|
||||||
break
|
|
||||||
else
|
|
||||||
echo "-----------------------------------------------"
|
|
||||||
content_line "\033[31m操作已取消!返回上级菜单!\033[0m"
|
|
||||||
sleep 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
*)
|
||||||
error_letter
|
error_letter
|
||||||
@@ -112,23 +91,24 @@ set_core_config() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setproviders() {
|
setproviders() {
|
||||||
case "$(echo "$line" | cut -d ' ' -f 2)" in
|
case "$(echo "$@" | cut -d ' ' -f 2)" in
|
||||||
http* | ./providers*)
|
http* | ./providers*)
|
||||||
set -- $line
|
set -- $@
|
||||||
name=$1
|
name=$1
|
||||||
link=$2
|
link=$2
|
||||||
interval=$3
|
interval=$3
|
||||||
interval2=$4
|
interval2=$4
|
||||||
ua=$5
|
ua=$5
|
||||||
exclude=$6
|
exclude_w=${6#\#}
|
||||||
include=$7
|
include_w=${7#\#}
|
||||||
;;
|
;;
|
||||||
*)
|
*://*)
|
||||||
set -- $line
|
set -- $line
|
||||||
name=$1
|
name=$1
|
||||||
link_uri=$2
|
link_uri=$2
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
last_name="$name"
|
||||||
[ -z "$interval" ] && interval=3
|
[ -z "$interval" ] && interval=3
|
||||||
[ -z "$interval2" ] && interval2=12
|
[ -z "$interval2" ] && interval2=12
|
||||||
[ -z "$ua" ] && ua='clash.meta'
|
[ -z "$ua" ] && ua='clash.meta'
|
||||||
@@ -141,13 +121,13 @@ setproviders() {
|
|||||||
separator_line '-'
|
separator_line '-'
|
||||||
content_line "3) 设置\033[33m健康检查间隔\033[0m:\t\033[47;30m$interval\033[0m"
|
content_line "3) 设置\033[33m健康检查间隔\033[0m:\t\033[47;30m$interval\033[0m"
|
||||||
content_line "4) 设置\033[36m自动更新间隔\033[0m:\t\033[47;30m$interval2\033[0m"
|
content_line "4) 设置\033[36m自动更新间隔\033[0m:\t\033[47;30m$interval2\033[0m"
|
||||||
content_line "5) 设置\033[31m排除节点正则\033[0m:\t\033[47;30m$exclude\033[0m"
|
content_line "5) 设置\033[31m排除节点正则\033[0m:\t\033[47;30m$exclude_w\033[0m"
|
||||||
content_line "6) 设置\033[32m包含节点正则\033[0m:\t\033[47;30m$include\033[0m"
|
content_line "6) 设置\033[32m包含节点正则\033[0m:\t\033[47;30m$include_w\033[0m"
|
||||||
echo "$link" | grep -q '^http' &&
|
echo "$link" | grep -q '^http' &&
|
||||||
content_line "7) 设置\033[33m虚拟浏览器UA\033[0m:\t\033[47;30m$ua\033[0m"
|
content_line "7) 设置\033[33m虚拟浏览器UA\033[0m:\t\033[47;30m$ua\033[0m"
|
||||||
}
|
}
|
||||||
separator_line "-"
|
separator_line "-"
|
||||||
content_line "a) \033[32m添加此提供者\033[0m"
|
content_line "a) \033[36m保存此提供者\033[0m"
|
||||||
[ -n "$link" ] &&
|
[ -n "$link" ] &&
|
||||||
content_line "b) \033[32m本地生成\033[0m仅包含此提供者的配置文件"
|
content_line "b) \033[32m本地生成\033[0m仅包含此提供者的配置文件"
|
||||||
echo "$link$link_uri" | grep -q '://' &&
|
echo "$link$link_uri" | grep -q '://' &&
|
||||||
@@ -175,24 +155,59 @@ setproviders() {
|
|||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
separator_line "="
|
separator_line "="
|
||||||
content_line "订阅链接-支持https/http开头的clash配置文件订阅链接"
|
content_line "\033[33m订阅链接\033[0m: https/http开头的clash配置文件订阅链接"
|
||||||
content_line "分享链接-支持ss|vmess|vless|trojan|tuic|anytls|shadowtls|hysteria(2)..."
|
content_line "\033[36m分享链接\033[0m: $URI_EXP"
|
||||||
content_line "本地文件-必须放在此目录下:\033[32m$CRASHDIR/providers\033[0m"
|
content_line "\033[33m本地文件\033[0m: 必须放在此目录下:\033[32m$CRASHDIR/providers\033[0m"
|
||||||
|
content_line "\033[36m Base64 \033[0m: 请直接写入本地文件"
|
||||||
separator_line "-"
|
separator_line "-"
|
||||||
read -p "请输入具体链接或文件名 > " text
|
list=$(
|
||||||
|
for f in "$CRASHDIR"/providers/*; do
|
||||||
|
[ "$f" = "$CRASHDIR"/providers/uri_group ] && continue
|
||||||
|
[ -f "$f" ] || continue
|
||||||
|
printf '%s\n' "${f##*/}"
|
||||||
|
done | sort -V
|
||||||
|
)
|
||||||
|
if [ -n "$list" ];then
|
||||||
|
i=1
|
||||||
|
printf '%s\n' "$list" | while IFS= read -r f; do
|
||||||
|
content_line "$i) $f"
|
||||||
|
i=$((i+1))
|
||||||
|
done
|
||||||
|
separator_line "-"
|
||||||
|
read -r -p "请选择对应文件或输入具体链接 > " text
|
||||||
|
else
|
||||||
|
read -r -p "请输入具体链接 > " text
|
||||||
|
fi
|
||||||
text=$(echo "$text" | sed 's/ //g') #去空格
|
text=$(echo "$text" | sed 's/ //g') #去空格
|
||||||
if echo "$text" | grep -q '^http'; then
|
case "$text" in
|
||||||
|
http*)
|
||||||
|
#处理订阅链接
|
||||||
text=$(echo "$text" | sed 's/ *(.*)//g; s/#.*//g') #处理注释及超链接
|
text=$(echo "$text" | sed 's/ *(.*)//g; s/#.*//g') #处理注释及超链接
|
||||||
link="$text"
|
link="$text"
|
||||||
elif [ -n "$(echo $text | grep -E '^ss|vmess|vless|trojan|tuic|anytls|shadowtls|hysteria(2)')" ]; then
|
common_success
|
||||||
|
;;
|
||||||
|
[1-9] | [1-9][0-9])
|
||||||
|
#处理本地文件
|
||||||
|
file=$(printf '%s\n' "$list" | sed -n "${text}p")
|
||||||
|
if [ -s "$CRASHDIR/providers/$file" ]; then
|
||||||
|
link="$file"
|
||||||
|
common_success
|
||||||
|
else
|
||||||
|
errornum
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
#处理分享链接
|
||||||
|
if [ -n "$(echo $text | grep -E "^$URI_EXP")" ]; then
|
||||||
link_uri=$(echo "$text" | sed 's/#.*//g') # 删除注释
|
link_uri=$(echo "$text" | sed 's/#.*//g') # 删除注释
|
||||||
[ -z "$name" ] && name=$(echo "$text" | grep -o '#.*$' | cut -c2-)
|
[ -z "$name" ] && name=$(echo "$text" | grep -o '#.*$' | cut -c2-)
|
||||||
elif [ -f "$CRASHDIR/providers/$text" ]; then
|
common_success
|
||||||
link="./providers/$text"
|
|
||||||
else
|
else
|
||||||
error_input
|
error_input
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
3)
|
3)
|
||||||
read -p "请输入健康检查间隔(单位:分钟) > " num
|
read -p "请输入健康检查间隔(单位:分钟) > " num
|
||||||
if [ -n "$num" ]; then
|
if [ -n "$num" ]; then
|
||||||
@@ -210,38 +225,49 @@ setproviders() {
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
read -p "请输入需要排除的节点关键字(支持正则) > " text
|
read -p "请输入需要排除的节点关键字(支持正则,不支持空格,输入0删除) > " text
|
||||||
if [ -n "$text" ]; then
|
text=$(echo "$text" | sed 's/ //g') #去空格
|
||||||
exclude="$text"
|
case "$text" in
|
||||||
else
|
0)
|
||||||
error_input
|
exclude_w=''
|
||||||
fi
|
;;
|
||||||
|
*)
|
||||||
|
exclude_w="$text"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
;;
|
;;
|
||||||
6)
|
6)
|
||||||
read -p "请输入需要筛选使用的节点关键字(支持正则) > " text
|
read -p "请输入需要筛选使用的节点关键字(支持正则,不支持空格,输入0删除) > " text
|
||||||
if [ -n "$text" ]; then
|
text=$(echo "$text" | sed 's/ //g') #去空格
|
||||||
include="$text"
|
case "$text" in
|
||||||
else
|
0)
|
||||||
error_input
|
include_w=''
|
||||||
fi
|
;;
|
||||||
|
*)
|
||||||
|
include_w="$text"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
;;
|
;;
|
||||||
7)
|
7)
|
||||||
read -p "请输入浏览器UA > " text
|
read -p "请输入浏览器UA(输入0重置) > " text
|
||||||
if [ -n "$text" ]; then
|
case "$text" in
|
||||||
ua="$text"
|
0)
|
||||||
else
|
include_w='clash.meta'
|
||||||
error_input
|
;;
|
||||||
fi
|
*)
|
||||||
|
include_w="$text"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
;;
|
;;
|
||||||
a)
|
a)
|
||||||
addproviders && common_success
|
addproviders && common_success
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
b)
|
b)
|
||||||
if echo "$link" | grep -q '^http'; then
|
if [ -n "$name" ] && [ -n "$link" ]; then
|
||||||
addproviders
|
addproviders
|
||||||
. "$CRASHDIR"/menus/providers.sh
|
. "$CRASHDIR/menus/providers_$CORE_TYPE.sh"
|
||||||
gen_${coretype}_providers "$name" "$link" "$interval" "$interval2" "$exclude" "$include"
|
gen_providers "$name" "$link" "$interval" "$interval2" "$ua" "#$exclude_w" "#$include_w"
|
||||||
else
|
else
|
||||||
content_line "\033[31m$请先完成必填选项!\033[0m"
|
content_line "\033[31m$请先完成必填选项!\033[0m"
|
||||||
fi
|
fi
|
||||||
@@ -302,11 +328,11 @@ setproviders() {
|
|||||||
|
|
||||||
addproviders() {
|
addproviders() {
|
||||||
[ -n "$name" ] && {
|
[ -n "$name" ] && {
|
||||||
[ -s "$CRASHDIR"/configs/providers.cfg ] && sed -i "/^$name /d" "$CRASHDIR"/configs/providers.cfg
|
[ -s "$CRASHDIR"/configs/providers.cfg ] && sed -i "/^$last_name /d" "$CRASHDIR"/configs/providers.cfg
|
||||||
[ -s "$CRASHDIR"/configs/providers_uri.cfg ] && sed -i "/^$name /d" "$CRASHDIR"/configs/providers_uri.cfg
|
[ -s "$CRASHDIR"/configs/providers_uri.cfg ] && sed -i "/^$last_name /d" "$CRASHDIR"/configs/providers_uri.cfg
|
||||||
}
|
}
|
||||||
if [ -n "$name" ] && [ -n "$link" ]; then
|
if [ -n "$name" ] && [ -n "$link" ]; then
|
||||||
echo "$name $link $interval $interval2 $ua $exclude $include" >>"$CRASHDIR"/configs/providers.cfg
|
echo "$name $link $interval $interval2 $ua #$exclude_w #$include_w" >>"$CRASHDIR"/configs/providers.cfg
|
||||||
return 0
|
return 0
|
||||||
elif [ -n "$name" ] && [ -n "$link_uri" ]; then
|
elif [ -n "$name" ] && [ -n "$link_uri" ]; then
|
||||||
echo "$name $link_uri" >>"$CRASHDIR"/configs/providers_uri.cfg
|
echo "$name $link_uri" >>"$CRASHDIR"/configs/providers_uri.cfg
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ error_input() {
|
|||||||
msg_alert "\033[31m$COMMON_ERR_INPUT\033[0m"
|
msg_alert "\033[31m$COMMON_ERR_INPUT\033[0m"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
error_cancel() {
|
||||||
|
error_report "\033[31m$COMMON_ERR_CANCEL\033[0m"
|
||||||
|
}
|
||||||
|
|
||||||
cancel_back() {
|
cancel_back() {
|
||||||
separator_line "-"
|
separator_line "-"
|
||||||
content_line "$COMMON_CANCEL"
|
content_line "$COMMON_CANCEL"
|
||||||
|
|||||||
@@ -5,220 +5,23 @@
|
|||||||
__IS_MODULE_PROVIDERS=1
|
__IS_MODULE_PROVIDERS=1
|
||||||
|
|
||||||
if [ "$crashcore" = singboxr ]; then
|
if [ "$crashcore" = singboxr ]; then
|
||||||
coretype=singbox
|
CORE_TYPE=singbox
|
||||||
else
|
else
|
||||||
coretype=clash
|
CORE_TYPE=clash
|
||||||
fi
|
fi
|
||||||
|
|
||||||
gen_clash_providers(){ #生成clash的providers配置文件
|
|
||||||
gen_clash_providers_txt(){
|
|
||||||
if [ -n "$(echo $2|grep -E '^./')" ];then
|
|
||||||
local type=file
|
|
||||||
local path=$2
|
|
||||||
local download_url=
|
|
||||||
else
|
|
||||||
local type=http
|
|
||||||
local path="./providers/${1}.yaml"
|
|
||||||
local download_url=$2
|
|
||||||
fi
|
|
||||||
cat >> $TMPDIR/providers/providers.yaml <<EOF
|
|
||||||
${1}:
|
|
||||||
type: $type
|
|
||||||
url: "$download_url"
|
|
||||||
path: "$path"
|
|
||||||
interval: 43200
|
|
||||||
health-check:
|
|
||||||
enable: true
|
|
||||||
lazy: true
|
|
||||||
url: "https://www.gstatic.com/generate_204"
|
|
||||||
interval: 600
|
|
||||||
EOF
|
|
||||||
[ "$crashcore" = 'meta' ] && {
|
|
||||||
[ "$skip_cert" != "OFF" ] && skip_cert_verify='skip-cert-verify: true'
|
|
||||||
cat >> $TMPDIR/providers/providers.yaml <<EOF
|
|
||||||
override:
|
|
||||||
udp: true
|
|
||||||
$skip_cert_verify
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if [ -z "$(grep "provider_temp_${coretype}" "$CRASHDIR"/configs/ShellCrash.cfg)" ];then
|
|
||||||
provider_temp_file="$(sed -n "1 p" "$CRASHDIR"/configs/${coretype}_providers.list | awk '{print $2}')"
|
|
||||||
else
|
|
||||||
provider_temp_file=$(grep "provider_temp_${coretype}" "$CRASHDIR"/configs/ShellCrash.cfg | awk -F '=' '{print $2}')
|
|
||||||
fi
|
|
||||||
echo "-----------------------------------------------"
|
|
||||||
if [ -s "$provider_temp_file" ];then
|
|
||||||
ln -sf "$provider_temp_file" "$TMPDIR"/provider_temp_file
|
|
||||||
else
|
|
||||||
echo -e "\033[33m正在获取在线模版!\033[0m"
|
|
||||||
get_bin "$TMPDIR"/provider_temp_file "rules/${coretype}_providers/$provider_temp_file"
|
|
||||||
[ -z "$(grep -o 'rules' "$TMPDIR"/provider_temp_file)" ] && {
|
|
||||||
echo -e "\033[31m下载失败,请尝试更换安装源!\033[0m"
|
|
||||||
. "$CRASHDIR"/menus/9_upgrade.sh && setserver
|
|
||||||
setproviders
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
#生成proxy_providers模块
|
|
||||||
mkdir -p "$TMPDIR"/providers
|
|
||||||
#预创建文件并写入对应文件头
|
|
||||||
echo 'proxy-providers:' > "$TMPDIR"/providers/providers.yaml
|
|
||||||
#切割模版文件
|
|
||||||
sed -n '/^proxy-groups:/,/^[a-z]/ { /^rule/d; p; }' "$TMPDIR"/provider_temp_file > "$TMPDIR"/providers/proxy-groups.yaml
|
|
||||||
sed -n '/^rule/,$p' "$TMPDIR"/provider_temp_file > "$TMPDIR"/providers/rules.yaml
|
|
||||||
rm -rf "$TMPDIR"/provider_temp_file
|
|
||||||
#生成providers模块
|
|
||||||
if [ -n "$2" ];then
|
|
||||||
gen_clash_providers_txt $1 $2
|
|
||||||
providers_tags=$1
|
|
||||||
echo ' - {name: '${1}', type: url-test, tolerance: 100, lazy: true, use: ['${1}']}' >> "$TMPDIR"/providers/proxy-groups.yaml
|
|
||||||
else
|
|
||||||
providers_tags=''
|
|
||||||
while read line;do
|
|
||||||
tag=$(echo $line | awk '{print $1}')
|
|
||||||
url=$(echo $line | awk '{print $2}')
|
|
||||||
providers_tags=$(echo "$providers_tags, $tag" | sed 's/^, //')
|
|
||||||
gen_clash_providers_txt $tag $url
|
|
||||||
echo ' - {name: '${tag}', type: url-test, tolerance: 100, lazy: true, use: ['${tag}']}' >> "$TMPDIR"/providers/proxy-groups.yaml
|
|
||||||
done < "$CRASHDIR"/configs/providers.cfg
|
|
||||||
fi
|
|
||||||
#修饰模版文件并合并
|
|
||||||
sed -i "s/{providers_tags}/$providers_tags/g" "$TMPDIR"/providers/proxy-groups.yaml
|
|
||||||
cut -c 1- "$TMPDIR"/providers/providers.yaml "$TMPDIR"/providers/proxy-groups.yaml "$TMPDIR"/providers/rules.yaml > "$TMPDIR"/config.yaml
|
|
||||||
rm -rf "$TMPDIR"/providers
|
|
||||||
#调用内核测试
|
|
||||||
. "$CRASHDIR"/starts/check_core.sh && check_core && "$TMPDIR"/CrashCore -t -d "$BINDIR" -f "$TMPDIR"/config.yaml
|
|
||||||
if [ "$?" = 0 ];then
|
|
||||||
echo -e "\033[32m配置文件生成成功!\033[0m"
|
|
||||||
mkdir -p "$CRASHDIR"/yamls
|
|
||||||
mv -f "$TMPDIR"/config.yaml "$CRASHDIR"/yamls/config.yaml
|
|
||||||
read -p "是否立即启动/重启服务?(1/0) > " res
|
|
||||||
[ "$res" = 1 ] && {
|
|
||||||
start_core && cronset '更新订阅'
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
else
|
|
||||||
rm -rf "$TMPDIR"/CrashCore
|
|
||||||
rm -rf "$TMPDIR"/config.yaml
|
|
||||||
echo -e "\033[31m生成配置文件出错,请仔细检查输入!\033[0m"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
gen_singbox_providers(){ #生成singbox的providers配置文件
|
|
||||||
gen_singbox_providers_txt(){
|
|
||||||
if [ -n "$(echo $2|grep -E '^./')" ];then
|
|
||||||
cat >> "$TMPDIR"/providers/providers.json <<EOF
|
|
||||||
{
|
|
||||||
"tag": "${1}",
|
|
||||||
"type": "local",
|
|
||||||
"path": "${2}",
|
|
||||||
EOF
|
|
||||||
else
|
|
||||||
cat >> "$TMPDIR"/providers/providers.json <<EOF
|
|
||||||
{
|
|
||||||
"tag": "${1}",
|
|
||||||
"type": "remote",
|
|
||||||
"url": "${2}",
|
|
||||||
"path": "./providers/${1}.yaml",
|
|
||||||
"user_agent": "clash.meta;mihomo",
|
|
||||||
"update_interval": "12h",
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
#通用部分生成
|
|
||||||
[ "$skip_cert" != "OFF" ] && override_tls='true' || override_tls='false'
|
|
||||||
cat >> "$TMPDIR"/providers/providers.json <<EOF
|
|
||||||
"health_check": {
|
|
||||||
"enabled": true,
|
|
||||||
"url": "https://www.gstatic.com/generate_204",
|
|
||||||
"interval": "10m",
|
|
||||||
"timeout": "3s"
|
|
||||||
},
|
|
||||||
"override_tls": {
|
|
||||||
"enabled": true,
|
|
||||||
"insecure": $override_tls
|
|
||||||
}
|
|
||||||
},
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
if [ -z "$(grep "provider_temp_${coretype}" "$CRASHDIR"/configs/ShellCrash.cfg)" ];then
|
|
||||||
provider_temp_file="$(sed -n "1 p" "$CRASHDIR"/configs/${coretype}_providers.list | awk '{print $2}')"
|
|
||||||
else
|
|
||||||
provider_temp_file=$(grep "provider_temp_${coretype}" "$CRASHDIR"/configs/ShellCrash.cfg | awk -F '=' '{print $2}')
|
|
||||||
fi
|
|
||||||
echo "-----------------------------------------------"
|
|
||||||
if [ -s "$provider_temp_file" ];then
|
|
||||||
ln -sf "$provider_temp_file" "$TMPDIR"/provider_temp_file
|
|
||||||
else
|
|
||||||
echo -e "\033[33m正在获取在线模版!\033[0m"
|
|
||||||
get_bin "$TMPDIR"/provider_temp_file "rules/${coretype}_providers/$provider_temp_file"
|
|
||||||
[ -z "$(grep -o 'route' "$TMPDIR"/provider_temp_file)" ] && {
|
|
||||||
echo -e "\033[31m下载失败,请尝试更换安装源!\033[0m"
|
|
||||||
. "$CRASHDIR"/menus/9_upgrade.sh && setserver
|
|
||||||
setproviders
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
#生成outbound_providers模块
|
|
||||||
mkdir -p "$TMPDIR"/providers
|
|
||||||
#预创建文件并写入对应文件头
|
|
||||||
cat > "$TMPDIR"/providers/providers.json <<EOF
|
|
||||||
{
|
|
||||||
"providers": [
|
|
||||||
EOF
|
|
||||||
cat > "$TMPDIR"/providers/outbounds_add.json <<EOF
|
|
||||||
{
|
|
||||||
"outbounds": [
|
|
||||||
EOF
|
|
||||||
#单独指定节点时使用特殊方式
|
|
||||||
if [ -n "$2" ];then
|
|
||||||
gen_singbox_providers_txt $1 $2
|
|
||||||
providers_tags=\"$1\"
|
|
||||||
echo '{ "tag": "'${1}'", "type": "urltest", "tolerance": 100, "providers": ["'${1}'"], "include": ".*" },' >> "$TMPDIR"/providers/outbounds_add.json
|
|
||||||
else
|
|
||||||
providers_tags=''
|
|
||||||
while read line;do
|
|
||||||
tag=$(echo $line | awk '{print $1}')
|
|
||||||
url=$(echo $line | awk '{print $2}')
|
|
||||||
providers_tags=$(echo "$providers_tags, \"$tag\"" | sed 's/^, //')
|
|
||||||
gen_singbox_providers_txt $tag $url
|
|
||||||
echo '{ "tag": "'${tag}'", "type": "urltest", "tolerance": 100, "providers": ["'${tag}'"], "include": ".*" },' >> "$TMPDIR"/providers/outbounds_add.json
|
|
||||||
done < "$CRASHDIR"/configs/providers.cfg
|
|
||||||
fi
|
|
||||||
#修复文件格式
|
|
||||||
sed -i '$s/},/}]}/' "$TMPDIR"/providers/outbounds_add.json
|
|
||||||
sed -i '$s/},/}]}/' "$TMPDIR"/providers/providers.json
|
|
||||||
#使用模版生成outbounds和rules模块
|
|
||||||
cat "$TMPDIR"/provider_temp_file | sed "s/{providers_tags}/$providers_tags/g" | sed "s/\"providers_tags\"/$providers_tags/g" > "$TMPDIR"/providers/outbounds.json
|
|
||||||
rm -rf "$TMPDIR"/provider_temp_file
|
|
||||||
#调用内核测试
|
|
||||||
. "$CRASHDIR"/starts/check_core.sh && check_core && "$TMPDIR"/CrashCore merge "$TMPDIR"/config.json -C "$TMPDIR"/providers
|
|
||||||
if [ "$?" = 0 ];then
|
|
||||||
echo -e "\033[32m配置文件生成成功!如果启动超时建议更新里手动安装Singbox-srs数据库常用包!\033[0m"
|
|
||||||
mkdir -p "$CRASHDIR"/jsons
|
|
||||||
mv -f "$TMPDIR"/config.json "$CRASHDIR"/jsons/config.json
|
|
||||||
rm -rf "$TMPDIR"/providers
|
|
||||||
read -p "是否立即启动/重启服务?(1/0) > " res
|
|
||||||
[ "$res" = 1 ] && {
|
|
||||||
start_core && cronset '更新订阅'
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
else
|
|
||||||
echo -e "\033[31m生成配置文件出错,请仔细检查输入!\033[0m"
|
|
||||||
rm -rf "$TMPDIR"/CrashCore
|
|
||||||
rm -rf "$TMPDIR"/providers
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
#providers
|
|
||||||
providers() {
|
providers() {
|
||||||
. "$CRASHDIR"/libs/web_get_bin.sh
|
|
||||||
while true; do
|
while true; do
|
||||||
# 获取模版名称
|
# 获取模版名称
|
||||||
if [ -z "$(grep "provider_temp_${coretype}" "$CRASHDIR"/configs/ShellCrash.cfg)" ]; then
|
if [ -z "$(grep "provider_temp_${CORE_TYPE}" "$CRASHDIR"/configs/ShellCrash.cfg)" ]; then
|
||||||
provider_temp_des=$(sed -n "1 p" "$CRASHDIR"/configs/${coretype}_providers.list | awk '{print $1}')
|
provider_temp_des=$(sed -n "1 p" "$CRASHDIR"/configs/${CORE_TYPE}_providers.list | awk '{print $1}')
|
||||||
else
|
else
|
||||||
provider_temp_file=$(grep "provider_temp_${coretype}" "$CRASHDIR"/configs/ShellCrash.cfg | awk -F '=' '{print $2}')
|
provider_temp_file=$(grep "provider_temp_${CORE_TYPE}" "$CRASHDIR"/configs/ShellCrash.cfg | awk -F '=' '{print $2}')
|
||||||
provider_temp_des=$(grep "$provider_temp_file" "$CRASHDIR"/configs/${coretype}_providers.list | awk '{print $1}')
|
provider_temp_des=$(grep "$provider_temp_file" "$CRASHDIR"/configs/${CORE_TYPE}_providers.list | awk '{print $1}')
|
||||||
[ -z "$provider_temp_des" ] && provider_temp_des=$provider_temp_file
|
[ -z "$provider_temp_des" ] && provider_temp_des=$provider_temp_file
|
||||||
fi
|
fi
|
||||||
|
echo "-----------------------------------------------"
|
||||||
|
echo -e "\033[33msingboxr与mihomo内核的providers配置文件不互通!\033[0m"
|
||||||
echo "-----------------------------------------------"
|
echo "-----------------------------------------------"
|
||||||
echo -e " 1 \033[32m生成\033[0m包含全部节点/订阅的配置文件"
|
echo -e " 1 \033[32m生成\033[0m包含全部节点/订阅的配置文件"
|
||||||
echo -e " 2 选择\033[33m规则模版\033[0m \033[32m$provider_temp_des\033[0m"
|
echo -e " 2 选择\033[33m规则模版\033[0m \033[32m$provider_temp_des\033[0m"
|
||||||
@@ -232,13 +35,9 @@ providers() {
|
|||||||
;;
|
;;
|
||||||
1)
|
1)
|
||||||
echo "-----------------------------------------------"
|
echo "-----------------------------------------------"
|
||||||
if [ -s "$CRASHDIR"/configs/providers.cfg ]; then
|
if [ -s "$CRASHDIR"/configs/providers.cfg ] || [ -s "$CRASHDIR"/configs/providers_uri.cfg ]; then
|
||||||
echo -e "\033[33msingboxr与mihomo内核的providers配置文件不互通!\033[0m"
|
. "$CRASHDIR/menus/providers_$CORE_TYPE.sh"
|
||||||
echo "-----------------------------------------------"
|
gen_providers
|
||||||
read -p "确认生成${coretype}配置文件?(1/0) > " res
|
|
||||||
[ "$res" = "1" ] && {
|
|
||||||
gen_${coretype}_providers
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
echo -e "\033[31m你还未添加链接或本地配置文件,请先添加!\033[0m"
|
echo -e "\033[31m你还未添加链接或本地配置文件,请先添加!\033[0m"
|
||||||
sleep 1
|
sleep 1
|
||||||
@@ -249,7 +48,7 @@ providers() {
|
|||||||
echo -e "当前规则模版为:\033[32m$provider_temp_des\033[0m"
|
echo -e "当前规则模版为:\033[32m$provider_temp_des\033[0m"
|
||||||
echo -e "\033[33m请选择在线模版:\033[0m"
|
echo -e "\033[33m请选择在线模版:\033[0m"
|
||||||
echo "-----------------------------------------------"
|
echo "-----------------------------------------------"
|
||||||
cat "$CRASHDIR"/configs/${coretype}_providers.list | awk '{print " "NR" "$1}'
|
cat "$CRASHDIR/configs/$CORE_TYPE_providers.list" | awk '{print " "NR" "$1}'
|
||||||
echo "-----------------------------------------------"
|
echo "-----------------------------------------------"
|
||||||
echo -e " a 使用\033[36m本地模版\033[0m"
|
echo -e " a 使用\033[36m本地模版\033[0m"
|
||||||
echo "-----------------------------------------------"
|
echo "-----------------------------------------------"
|
||||||
@@ -260,7 +59,7 @@ providers() {
|
|||||||
read -p "请输入模版的路径(绝对路径) > " dir
|
read -p "请输入模版的路径(绝对路径) > " dir
|
||||||
if [ -s $dir ]; then
|
if [ -s $dir ]; then
|
||||||
provider_temp_file=$dir
|
provider_temp_file=$dir
|
||||||
setconfig provider_temp_${coretype} $provider_temp_file
|
setconfig provider_temp_"$CORE_TYPE" "$provider_temp_file"
|
||||||
echo -e "\033[32m设置成功!\033[0m"
|
echo -e "\033[32m设置成功!\033[0m"
|
||||||
else
|
else
|
||||||
echo -e "\033[31m输入错误,找不到对应模版文件!\033[0m"
|
echo -e "\033[31m输入错误,找不到对应模版文件!\033[0m"
|
||||||
@@ -268,12 +67,12 @@ providers() {
|
|||||||
sleep 1
|
sleep 1
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
provider_temp_file=$(sed -n "$num p" "$CRASHDIR"/configs/${coretype}_providers.list 2>/dev/null | awk '{print $2}')
|
provider_temp_file=$(sed -n "$num p" "$CRASHDIR"/configs/${CORE_TYPE}_providers.list 2>/dev/null | awk '{print $2}')
|
||||||
if [ -z "$provider_temp_file" ]; then
|
if [ -z "$provider_temp_file" ]; then
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
sleep 1
|
||||||
else
|
else
|
||||||
setconfig provider_temp_${coretype} $provider_temp_file
|
setconfig provider_temp_"$CORE_TYPE" "$provider_temp_file"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -281,7 +80,7 @@ providers() {
|
|||||||
3)
|
3)
|
||||||
echo -e "\033[33m将清空 $CRASHDIR/providers 目录下所有内容\033[0m"
|
echo -e "\033[33m将清空 $CRASHDIR/providers 目录下所有内容\033[0m"
|
||||||
read -p "是否继续?(1/0) > " res
|
read -p "是否继续?(1/0) > " res
|
||||||
[ "$res" = "1" ] && rm -rf "$CRASHDIR"/providers
|
[ "$res" = "1" ] && rm -rf "$CRASHDIR"/providers && common_success
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
|
|||||||
123
scripts/menus/providers_clash.sh
Normal file
123
scripts/menus/providers_clash.sh
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) Juewuy
|
||||||
|
|
||||||
|
[ -n "$__IS_PROVIDERS_CLASH" ] && return
|
||||||
|
__IS_PROVIDERS_CLASH=1
|
||||||
|
|
||||||
|
. "$CRASHDIR"/libs/web_get_bin.sh
|
||||||
|
|
||||||
|
#生成clash的providers配置文件
|
||||||
|
gen_providers(){
|
||||||
|
if [ -z "$(grep "provider_temp_${CORE_TYPE}" "$CRASHDIR"/configs/ShellCrash.cfg)" ];then
|
||||||
|
provider_temp_file="$(sed -n "1 p" "$CRASHDIR"/configs/${CORE_TYPE}_providers.list | awk '{print $2}')"
|
||||||
|
else
|
||||||
|
provider_temp_file=$(grep "provider_temp_${CORE_TYPE}" "$CRASHDIR"/configs/ShellCrash.cfg | awk -F '=' '{print $2}')
|
||||||
|
fi
|
||||||
|
echo "-----------------------------------------------"
|
||||||
|
if [ -s "$provider_temp_file" ];then
|
||||||
|
ln -sf "$provider_temp_file" "$TMPDIR"/provider_temp_file
|
||||||
|
else
|
||||||
|
echo -e "\033[33m正在获取在线模版!\033[0m"
|
||||||
|
get_bin "$TMPDIR"/provider_temp_file "rules/${CORE_TYPE}_providers/$provider_temp_file"
|
||||||
|
[ -z "$(grep -o 'rules' "$TMPDIR"/provider_temp_file)" ] && {
|
||||||
|
echo -e "\033[31m下载失败,请尝试更换安装源!\033[0m"
|
||||||
|
. "$CRASHDIR"/menus/9_upgrade.sh && setserver
|
||||||
|
setproviders
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
#生成proxy_providers模块
|
||||||
|
mkdir -p "$TMPDIR"/providers
|
||||||
|
#预创建文件并写入对应文件头
|
||||||
|
echo 'proxy-providers:' > "$TMPDIR"/providers/providers.yaml
|
||||||
|
#切割模版文件
|
||||||
|
sed -n '/^proxy-groups:/,/^[a-z]/ { /^rule/d; p; }' "$TMPDIR"/provider_temp_file > "$TMPDIR"/providers/proxy-groups.yaml
|
||||||
|
sed -n '/^rule/,$p' "$TMPDIR"/provider_temp_file > "$TMPDIR"/providers/rules.yaml
|
||||||
|
rm -rf "$TMPDIR"/provider_temp_file
|
||||||
|
#基于单订阅生成providers模块
|
||||||
|
if [ -n "$1" ];then
|
||||||
|
gen_providers_txt $@
|
||||||
|
providers_tags=$1
|
||||||
|
else
|
||||||
|
#基于全部订阅/本地文件生成
|
||||||
|
[ -s "$CRASHDIR"/configs/providers.cfg ] && {
|
||||||
|
providers_tags=''
|
||||||
|
while read line;do
|
||||||
|
gen_providers_txt $line
|
||||||
|
providers_tags=$(echo "$providers_tags, $tag" | sed 's/^, //')
|
||||||
|
done < "$CRASHDIR"/configs/providers.cfg
|
||||||
|
}
|
||||||
|
#基于全部节点分享链接生成
|
||||||
|
[ -s "$CRASHDIR"/configs/providers_uri.cfg ] && {
|
||||||
|
mkdir -p "$CRASHDIR"/providers
|
||||||
|
awk '{ print ($1=="vmess" ? $2 : $2 "#" $1) }' "$CRASHDIR"/configs/providers_uri.cfg > "$CRASHDIR"/providers/uri_group
|
||||||
|
gen_providers_txt "Uri_group" "./providers/uri_group" "3" "12"
|
||||||
|
providers_tags=$(echo "$providers_tags, Uri_group" | sed 's/^, //')
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
#修饰模版文件并合并
|
||||||
|
sed -i "s/{providers_tags}/$providers_tags/g" "$TMPDIR"/providers/proxy-groups.yaml
|
||||||
|
cut -c 1- "$TMPDIR"/providers/providers.yaml "$TMPDIR"/providers/proxy-groups.yaml "$TMPDIR"/providers/rules.yaml > "$TMPDIR"/config.yaml
|
||||||
|
rm -rf "$TMPDIR"/providers
|
||||||
|
#调用内核测试
|
||||||
|
. "$CRASHDIR"/starts/check_core.sh && check_core && "$TMPDIR"/CrashCore -t -d "$BINDIR" -f "$TMPDIR"/config.yaml
|
||||||
|
if [ "$?" = 0 ];then
|
||||||
|
echo -e "\033[32m配置文件生成成功!\033[0m"
|
||||||
|
mkdir -p "$CRASHDIR"/yamls
|
||||||
|
mv -f "$TMPDIR"/config.yaml "$CRASHDIR"/yamls/config.yaml
|
||||||
|
read -p "是否立即启动/重启服务?(1/0) > " res
|
||||||
|
[ "$res" = 1 ] && {
|
||||||
|
start_core && . "$CRASHDIR"/libs/set_cron.sh && cronset '更新订阅'
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
else
|
||||||
|
rm -rf "$TMPDIR"/CrashCore
|
||||||
|
rm -rf "$TMPDIR"/config.yaml
|
||||||
|
echo -e "\033[31m生成配置文件出错,请仔细检查输入!\033[0m"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
gen_providers_txt(){
|
||||||
|
if [ -n "$(echo $2|grep -E '^./')" ];then
|
||||||
|
type=file
|
||||||
|
path=$2
|
||||||
|
download_url=
|
||||||
|
else
|
||||||
|
type=http
|
||||||
|
path="./providers/$1.yaml"
|
||||||
|
download_url=$2
|
||||||
|
fi
|
||||||
|
tag=$1
|
||||||
|
interval=${3:-3}
|
||||||
|
interval2=${4:-12}
|
||||||
|
ua=${5:-clash.meta}
|
||||||
|
exclude=${6#\#}
|
||||||
|
include=${7#\#}
|
||||||
|
|
||||||
|
cat >> "$TMPDIR"/providers/providers.yaml <<EOF
|
||||||
|
${1}:
|
||||||
|
type: $type
|
||||||
|
url: "$download_url"
|
||||||
|
path: "$path"
|
||||||
|
interval: $((interval2 * 3600))
|
||||||
|
health-check:
|
||||||
|
enable: true
|
||||||
|
lazy: true
|
||||||
|
url: "https://www.gstatic.com/generate_204"
|
||||||
|
interval: $((interval * 60))
|
||||||
|
EOF
|
||||||
|
[ "$crashcore" = 'meta' ] && {
|
||||||
|
[ "$skip_cert" != "OFF" ] && skip_cert_verify='skip-cert-verify: true'
|
||||||
|
cat >> "$TMPDIR"/providers/providers.yaml <<EOF
|
||||||
|
header:
|
||||||
|
User-Agent: ["$ua"]
|
||||||
|
override:
|
||||||
|
udp: true
|
||||||
|
$skip_cert_verify
|
||||||
|
filter: "$include"
|
||||||
|
exclude-filter: "$exclude"
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
#写入提供者
|
||||||
|
echo ' - {name: '"$tag"', type: url-test, tolerance: 100, lazy: true, use: ['"$tag"']}' >> "$TMPDIR"/providers/proxy-groups.yaml
|
||||||
|
}
|
||||||
|
|
||||||
129
scripts/menus/providers_singbox.sh
Normal file
129
scripts/menus/providers_singbox.sh
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) Juewuy
|
||||||
|
|
||||||
|
[ -n "$__IS_PROVIDERS_SINGBOX" ] && return
|
||||||
|
__IS_PROVIDERS_SINGBOX=1
|
||||||
|
|
||||||
|
. "$CRASHDIR"/libs/web_get_bin.sh
|
||||||
|
|
||||||
|
#生成singbox的providers配置文件
|
||||||
|
gen_providers(){
|
||||||
|
if [ -z "$(grep "provider_temp_${CORE_TYPE}" "$CRASHDIR"/configs/ShellCrash.cfg)" ];then
|
||||||
|
provider_temp_file="$(sed -n "1 p" "$CRASHDIR"/configs/${CORE_TYPE}_providers.list | awk '{print $2}')"
|
||||||
|
else
|
||||||
|
provider_temp_file=$(grep "provider_temp_${CORE_TYPE}" "$CRASHDIR"/configs/ShellCrash.cfg | awk -F '=' '{print $2}')
|
||||||
|
fi
|
||||||
|
echo "-----------------------------------------------"
|
||||||
|
if [ -s "$provider_temp_file" ];then
|
||||||
|
ln -sf "$provider_temp_file" "$TMPDIR"/provider_temp_file
|
||||||
|
else
|
||||||
|
echo -e "\033[33m正在获取在线模版!\033[0m"
|
||||||
|
get_bin "$TMPDIR"/provider_temp_file "rules/${CORE_TYPE}_providers/$provider_temp_file"
|
||||||
|
[ -z "$(grep -o 'route' "$TMPDIR"/provider_temp_file)" ] && {
|
||||||
|
echo -e "\033[31m下载失败,请尝试更换安装源!\033[0m"
|
||||||
|
. "$CRASHDIR"/menus/9_upgrade.sh && setserver
|
||||||
|
setproviders
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
#生成outbound_providers模块
|
||||||
|
mkdir -p "$TMPDIR"/providers
|
||||||
|
#预创建文件并写入对应文件头
|
||||||
|
cat > "$TMPDIR"/providers/providers.json <<EOF
|
||||||
|
{
|
||||||
|
"providers": [
|
||||||
|
EOF
|
||||||
|
cat > "$TMPDIR"/providers/outbounds_add.json <<EOF
|
||||||
|
{
|
||||||
|
"outbounds": [
|
||||||
|
EOF
|
||||||
|
#基于单订阅生成providers模块
|
||||||
|
if [ -n "$1" ];then
|
||||||
|
gen_providers_txt $@
|
||||||
|
providers_tags=\"$1\"
|
||||||
|
else
|
||||||
|
#基于全部订阅/本地文件生成
|
||||||
|
[ -s "$CRASHDIR"/configs/providers.cfg ] && {
|
||||||
|
providers_tags=''
|
||||||
|
while read line;do
|
||||||
|
gen_providers_txt $line
|
||||||
|
providers_tags=$(echo "$providers_tags, \"$tag\"" | sed 's/^, //')
|
||||||
|
done < "$CRASHDIR"/configs/providers.cfg
|
||||||
|
}
|
||||||
|
#基于全部节点分享链接生成
|
||||||
|
[ -s "$CRASHDIR"/configs/providers_uri.cfg ] && {
|
||||||
|
mkdir -p "$CRASHDIR"/providers
|
||||||
|
awk '{ print ($1=="vmess" ? $2 : $2 "#" $1) }' "$CRASHDIR"/configs/providers_uri.cfg > "$CRASHDIR"/providers/uri_group
|
||||||
|
gen_providers_txt "Uri_group" "./providers/uri_group" "3" "12"
|
||||||
|
providers_tags=$(echo "$providers_tags, \"Uri_group\"" | sed 's/^, //')
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
#修复文件格式
|
||||||
|
sed -i '$s/},/}]}/' "$TMPDIR"/providers/outbounds_add.json
|
||||||
|
sed -i '$s/},/}]}/' "$TMPDIR"/providers/providers.json
|
||||||
|
#使用模版生成outbounds和rules模块
|
||||||
|
cat "$TMPDIR"/provider_temp_file | sed "s/{providers_tags}/$providers_tags/g" | sed "s/\"providers_tags\"/$providers_tags/g" > "$TMPDIR"/providers/outbounds.json
|
||||||
|
rm -rf "$TMPDIR"/provider_temp_file
|
||||||
|
#调用内核测试
|
||||||
|
. "$CRASHDIR"/starts/check_core.sh && check_core && "$TMPDIR"/CrashCore merge "$TMPDIR"/config.json -C "$TMPDIR"/providers
|
||||||
|
if [ "$?" = 0 ];then
|
||||||
|
echo -e "\033[32m配置文件生成成功!如果启动超时建议更新里手动安装Singbox-srs数据库常用包!\033[0m"
|
||||||
|
mkdir -p "$CRASHDIR"/jsons
|
||||||
|
mv -f "$TMPDIR"/config.json "$CRASHDIR"/jsons/config.json
|
||||||
|
rm -rf "$TMPDIR"/providers
|
||||||
|
read -p "是否立即启动/重启服务?(1/0) > " res
|
||||||
|
[ "$res" = 1 ] && {
|
||||||
|
start_core && . "$CRASHDIR"/libs/set_cron.sh && cronset '更新订阅'
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
else
|
||||||
|
echo -e "\033[31m生成配置文件出错,请仔细检查输入!\033[0m"
|
||||||
|
rm -rf "$TMPDIR"/CrashCore
|
||||||
|
#rm -rf "$TMPDIR"/providers
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
gen_providers_txt(){
|
||||||
|
tag=$1
|
||||||
|
interval=${3:-3}
|
||||||
|
interval2=${4:-12}
|
||||||
|
ua=${5:-clash.meta}
|
||||||
|
exclude=${6#\#}
|
||||||
|
include=${7#\#}
|
||||||
|
if [ -n "$(echo $2|grep -E '^./')" ];then
|
||||||
|
cat >> "$TMPDIR"/providers/providers.json <<EOF
|
||||||
|
{
|
||||||
|
"tag": "$tag",
|
||||||
|
"type": "local",
|
||||||
|
"path": "$2",
|
||||||
|
EOF
|
||||||
|
else
|
||||||
|
cat >> "$TMPDIR"/providers/providers.json <<EOF
|
||||||
|
{
|
||||||
|
"tag": "$tag",
|
||||||
|
"type": "remote",
|
||||||
|
"url": "$2",
|
||||||
|
"path": "./providers/$tag.yaml",
|
||||||
|
"user_agent": "$ua",
|
||||||
|
"update_interval": "${interval2}h",
|
||||||
|
"exclude": "$exclude",
|
||||||
|
"include": "$include",
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
#通用部分生成
|
||||||
|
[ "$skip_cert" != "OFF" ] && override_tls='true' || override_tls='false'
|
||||||
|
cat >> "$TMPDIR"/providers/providers.json <<EOF
|
||||||
|
"health_check": {
|
||||||
|
"enabled": true,
|
||||||
|
"url": "https://www.gstatic.com/generate_204",
|
||||||
|
"interval": "${interval}m",
|
||||||
|
"timeout": "3s"
|
||||||
|
},
|
||||||
|
"override_tls": {
|
||||||
|
"enabled": true,
|
||||||
|
"insecure": $override_tls
|
||||||
|
}
|
||||||
|
},
|
||||||
|
EOF
|
||||||
|
#写入提供者
|
||||||
|
echo '{ "tag": "'"$tag"'", "type": "urltest", "tolerance": 100, "providers": ["'"$tag"'"], "include": ".*" },' >> "$TMPDIR"/providers/outbounds_add.json
|
||||||
|
}
|
||||||
@@ -11,12 +11,12 @@ __IS_MODULE_SUBCONVERTER=1
|
|||||||
subconverter() {
|
subconverter() {
|
||||||
while true; do
|
while true; do
|
||||||
separator_line "-"
|
separator_line "-"
|
||||||
content_line " 1 \033[36m开始生成配置文件\033[0m"
|
content_line "1) \033[36m开始生成配置文件\033[0m"
|
||||||
content_line " 2 设置\033[31m排除节点正则\033[0m \033[47;30m$exclude\033[0m"
|
content_line "2) 设置\033[31m排除节点正则\033[0m \033[47;30m$exclude\033[0m"
|
||||||
content_line " 3 设置\033[32m包含节点正则\033[0m \033[47;30m$include\033[0m"
|
content_line "3) 设置\033[32m包含节点正则\033[0m \033[47;30m$include\033[0m"
|
||||||
content_line " 4 选择\033[33m在线规则模版\033[0m"
|
content_line "4) 选择\033[33m在线规则模版\033[0m"
|
||||||
content_line " 5 选择\033[0mSubconverter服务器\033[0m"
|
content_line "5) 选择\033[0mSubconverter服务器\033[0m"
|
||||||
content_line " 6 自定义浏览器UA \033[32m$user_agent\033[0m"
|
content_line "6) 自定义浏览器UA \033[32m$user_agent\033[0m"
|
||||||
common_back
|
common_back
|
||||||
read -r -p "请输入对应数字 > " num
|
read -r -p "请输入对应数字 > " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
@@ -124,8 +124,7 @@ gen_link_server() { #选择Subconverter服务器
|
|||||||
content_line "\033[32m感谢以下作者的无私奉献!!!\033[0m"
|
content_line "\033[32m感谢以下作者的无私奉献!!!\033[0m"
|
||||||
echo 当前使用后端为:$(grep -aE '^3|^4' "$CRASHDIR"/configs/servers.list | sed -n ""$server_link"p" | awk '{print $3}')
|
echo 当前使用后端为:$(grep -aE '^3|^4' "$CRASHDIR"/configs/servers.list | sed -n ""$server_link"p" | awk '{print $3}')
|
||||||
grep -aE '^3|^4' "$CRASHDIR"/configs/servers.list | awk '{print " "NR" "$3" "$2}'
|
grep -aE '^3|^4' "$CRASHDIR"/configs/servers.list | awk '{print " "NR" "$3" "$2}'
|
||||||
separator_line "-"
|
common_back
|
||||||
echo 0 返回上级菜单
|
|
||||||
read -r -p "请输入对应数字 > " num
|
read -r -p "请输入对应数字 > " num
|
||||||
totalnum=$(grep -acE '^3|^4' "$CRASHDIR"/configs/servers.list )
|
totalnum=$(grep -acE '^3|^4' "$CRASHDIR"/configs/servers.list )
|
||||||
if [ -z "$num" ] || [ "$num" -gt "$totalnum" ];then
|
if [ -z "$num" ] || [ "$num" -gt "$totalnum" ];then
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
content_line() {
|
content_line() {
|
||||||
printf '%b' "$1\n"
|
printf '%b' " $1\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
sub_content_line() {
|
sub_content_line() {
|
||||||
|
|||||||
@@ -97,6 +97,10 @@ fi
|
|||||||
[ ! -s "$BINDIR"/ui/index.html ] && makehtml #如没有面板则创建跳转界面
|
[ ! -s "$BINDIR"/ui/index.html ] && makehtml #如没有面板则创建跳转界面
|
||||||
catpac #生成pac文件
|
catpac #生成pac文件
|
||||||
#内核及内核配置文件检查
|
#内核及内核配置文件检查
|
||||||
|
[ "$CRASHDIR" != "$BINDIR" ] && {
|
||||||
|
mkdir -p "$BINDIR"/providers
|
||||||
|
ln -sf "$CRASHDIR"/providers/* "$BINDIR"/providers/
|
||||||
|
}
|
||||||
if echo "$crashcore" | grep -q 'singbox'; then
|
if echo "$crashcore" | grep -q 'singbox'; then
|
||||||
. "$CRASHDIR"/starts/singbox_check.sh && singbox_check
|
. "$CRASHDIR"/starts/singbox_check.sh && singbox_check
|
||||||
[ -d "$TMPDIR"/jsons ] && rm -rf "$TMPDIR"/jsons/* || mkdir -p "$TMPDIR"/jsons #准备目录
|
[ -d "$TMPDIR"/jsons ] && rm -rf "$TMPDIR"/jsons/* || mkdir -p "$TMPDIR"/jsons #准备目录
|
||||||
|
|||||||
Reference in New Issue
Block a user