Files
ShellCrash/scripts/menus/6_core_config.sh

330 lines
12 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/sh
# Copyright (C) Juewuy
[ -n "$__IS_MODULE_6_CORECONFIG_LOADED" ] && return
__IS_MODULE_6_CORECONFIG_LOADED=1
if echo "$crashcore" | grep -q 'singbox'; then
CONFIG_PATH="$CRASHDIR"/yamls/config.json
else
CONFIG_PATH="$CRASHDIR"/jsons/config.yaml
fi
# 配置文件主界面
set_core_config() {
while true; do
format_box "\033[30;47m配置文件管理\033[0m"
[ -s "$CRASHDIR"/configs/providers.cfg ] || [ -s "$CRASHDIR"/configs/providers_uri.cfg ] && {
echo -e "\033[36m输入数字可管理对应提供者\033[0m"
cat "$CRASHDIR"/configs/providers.cfg "$CRASHDIR"/configs/providers_uri.cfg 2>/dev/null |
awk '{print " " NR ") " $1 "\t" substr($2,1,30) "..."}'
separator_line "-"
}
content_line "a) \033[32m添加提供者\033[0m(支持订阅/节点/本地文件)"
content_line "b) \033[36m本地生成配置文件\033[0m(基于providers,推荐!)"
content_line "c) \033[33m在线生成配置文件\033[0m(Subconverter)"
content_line "d) \033[31m清空提供者列表\033[0m"
content_line "e) \033[36m自定义配置文件\033[0m"
content_line "f) \033[33m还原配置文件\033[0m"
common_back
read -r -p "$COMMON_INPUT_L > " num
case "$num" in
"" | 0)
break
;;
[1-9] | [1-9][0-9])
line=$(cat "$CRASHDIR"/configs/providers.cfg "$CRASHDIR"/configs/providers_uri.cfg 2>/dev/null | sed -n "$num p")
setproviders
;;
a)
line=''
setproviders
;;
b)
if [ -s "$CRASHDIR"/configs/providers.cfg ] || [ -s "$CRASHDIR"/configs/providers_uri.cfg ]; then
if [ "$crashcore" = meta ] || [ "$crashcore" = singboxr ]; then
. "$CRASHDIR"/menus/providers.sh
providers
else
error_report "\033[33m仅限Mihomo/singboxr内核使用,请更换内核!\033[0m"
fi
else
error_report "请先添加提供者!"
fi
;;
c)
if [ -s "$CRASHDIR"/configs/providers.cfg ] || [ -s "$CRASHDIR"/configs/providers_uri.cfg ]; then
. "$CRASHDIR"/menus/subconverter.sh
subconverter
else
error_report "请先添加提供者!"
fi
;;
d)
separator_line "="
content_line "\033[33m警告这将删除所有提供者且无法还原\033[0m"
separator_line "-"
read -r -p "确认清空提供者列表?(1/0) > " res
[ "$res" = 1 ] && {
rm -f "$CRASHDIR"/configs/providers.cfg
rm -f "$CRASHDIR"/configs/providers_uri.cfg
common_success
}
;;
e)
checkcfg=$(cat $CFG_PATH)
override
if [ -n "$PID" ]; then
checkcfg_new=$(cat $CFG_PATH)
[ "$checkcfg" != "$checkcfg_new" ] && checkrestart
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
break
;;
esac
done
}
setproviders() {
case "$(echo "$line" | cut -d ' ' -f 2)" in
http* | ./providers*)
set -- $line
name=$1
link=$2
interval=$3
interval2=$4
ua=$5
exclude=$6
include=$7
;;
*)
set -- $line
name=$1
link_uri=$2
;;
esac
[ -z "$interval" ] && interval=3
[ -z "$interval2" ] && interval2=12
[ -z "$ua" ] && ua='clash.meta'
while true; do
link_info=$(echo "$link$link_uri" | cut -c 1-30)
format_box "\033[36m支持添加订阅链接/分享链接/本地文件作为提供者\033[0m"
content_line "1) 设置\033[36m名称或代号\033[0m \033[32m$name\033[0m"
content_line "2) 设置\033[32m链接或路径\033[0m \033[36m$link_info...\033[0m"
[ -n "$link" ] && {
separator_line '-'
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 "5) 设置\033[31m排除节点正则\033[0m\t\033[47;30m$exclude\033[0m"
content_line "6) 设置\033[32m包含节点正则\033[0m\t\033[47;30m$include\033[0m"
echo "$link" | grep -q '^http' &&
content_line "7) 设置\033[33m虚拟浏览器UA\033[0m\t\033[47;30m$ua\033[0m"
}
separator_line "-"
content_line "a) \033[32m添加此提供者\033[0m"
[ -n "$link" ] &&
content_line "b) \033[32m本地生成\033[0m仅包含此提供者的配置文件"
echo "$link$link_uri" | grep -q '://' &&
content_line "c) \033[33m在线生成\033[0m仅包含此提供者的配置文件"
[ -n "$link" ] &&
content_line "e) 直接使用此配置文件(不经过转换)"
content_line "d) \033[31m删除此提供者\033[0m"
common_back
read -r -p "请输入对应数字> " num
case "$num" in
"" | 0)
break
;;
1)
separator_line "="
content_line "注意:名称或代号不可重复,且不支持纯数字!"
separator_line "-"
read -p "请输入具体名称或代号 > " text
text=$(echo $text | sed 's/ //g') #去空格
if [ -n "$text" ] && [ -z "$(echo "$text" | grep -E '^[0-9]+$')" ] && ! grep -q "$text" "$CRASHDIR"/configs/providers.cfg; then
name="$text"
else
error_input
fi
;;
2)
separator_line "="
content_line "订阅链接-支持https/http开头的clash配置文件订阅链接"
content_line "分享链接-支持ss|vmess|vless|trojan|tuic|anytls|shadowtls|hysteria(2)..."
content_line "本地文件-必须放在此目录下:\033[32m$CRASHDIR/providers\033[0m"
separator_line "-"
read -p "请输入具体链接或文件名 > " text
text=$(echo "$text" | sed 's/ //g') #去空格
if echo "$text" | grep -q '^http'; then
text=$(echo "$text" | sed 's/ *(.*)//g; s/#.*//g') #处理注释及超链接
link="$text"
elif [ -n "$(echo $text | grep -E '^ss|vmess|vless|trojan|tuic|anytls|shadowtls|hysteria(2)')" ]; then
link_uri=$(echo "$text" | sed 's/#.*//g') # 删除注释
[ -z "$name" ] && name=$(echo "$text" | grep -o '#.*$' | cut -c2-)
elif [ -f "$CRASHDIR/providers/$text" ]; then
link="./providers/$text"
else
error_input
fi
;;
3)
read -p "请输入健康检查间隔(单位:分钟) > " num
if [ -n "$num" ]; then
interval="$num"
else
errornum
fi
;;
4)
read -p "请输入自动更新间隔(单位:小时) > " num
if [ -n "$num" ]; then
interval2="$num"
else
errornum
fi
;;
5)
read -p "请输入需要排除的节点关键字(支持正则) > " text
if [ -n "$text" ]; then
exclude="$text"
else
error_input
fi
;;
6)
read -p "请输入需要筛选使用的节点关键字(支持正则) > " text
if [ -n "$text" ]; then
include="$text"
else
error_input
fi
;;
7)
read -p "请输入浏览器UA > " text
if [ -n "$text" ]; then
ua="$text"
else
error_input
fi
;;
a)
addproviders && common_success
break
;;
b)
if echo "$link" | grep -q '^http'; then
addproviders
. "$CRASHDIR"/menus/providers.sh
gen_${coretype}_providers "$name" "$link" "$interval" "$interval2" "$exclude" "$include"
else
content_line "\033[31m$请先完成必填选项!\033[0m"
fi
;;
c)
if [ -n "$name" ] && [ -n "$link$link_uri" ]; then
addproviders
Url="$link$link_uri"
Https=''
setconfig Url "'$Url'"
setconfig Https
# 获取在线文件
jump_core_config
else
content_line "\033[31m请先完成必填选项\033[0m"
fi
;;
d)
if [ -n "$name" ] && [ -n "$link" ]; then
sed -i "/^$name /d" "$CRASHDIR"/configs/providers.cfg
content_line "\033[32m$COMMON_SUCCESS\033[0m"
elif [ -n "$name" ] && [ -n "$link_uri" ]; then
sed -i "/^$name /d" "$CRASHDIR"/configs/providers_uri.cfg
content_line "\033[32m$COMMON_SUCCESS\033[0m"
fi
break
;;
e)
if [ -n "$link" ]; then
content_line "注意:\033[31m此功能不兼容“跳过证书验证”功能\033[0m"
content_line "\033[31m请确认你完全理解自己在做什么\033[0m"
read -p "我确认遇到问题可以自行解决(1/0) > " res
[ "$res" = "1" ] && {
if [ -s "$CRASHDIR/$link" ]; then
[ -n "$name" ] && addproviders
ln -sf "$CRASHDIR/$link" "$CONFIG_PATH"
elif [ -n "$link" ]; then
[ -n "$name" ] && addproviders
Https="$link"
Url=''
setconfig Https "'$Https'"
setconfig Url
# 获取在线文件
jump_core_config
fi
}
else
content_line "\033[31m$请先完成必填选项!\033[0m"
fi
;;
*)
error_letter
break
;;
esac
done
}
addproviders() {
[ -n "$name" ] && {
[ -s "$CRASHDIR"/configs/providers.cfg ] && sed -i "/^$name /d" "$CRASHDIR"/configs/providers.cfg
[ -s "$CRASHDIR"/configs/providers_uri.cfg ] && sed -i "/^$name /d" "$CRASHDIR"/configs/providers_uri.cfg
}
if [ -n "$name" ] && [ -n "$link" ]; then
echo "$name $link $interval $interval2 $ua $exclude $include" >>"$CRASHDIR"/configs/providers.cfg
return 0
elif [ -n "$name" ] && [ -n "$link_uri" ]; then
echo "$name $link_uri" >>"$CRASHDIR"/configs/providers_uri.cfg
return 0
else
error_report "\033[31m请先完成必填选项\033[0m"
return 1
fi
}
# 调用工具在线获取配置文件
jump_core_config() {
. "$CRASHDIR"/starts/core_config.sh && get_core_config
if [ "$?" = 0 ]; then
if [ "$inuserguide" != 1 ]; then
read -p "是否启动服务以使配置文件生效?(1/0) > " res
[ "$res" = 1 ] && start_core || main_menu
exit
fi
fi
}