mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-07-30 22:11:26 +08:00
156 lines
5.3 KiB
Bash
Executable File
156 lines
5.3 KiB
Bash
Executable File
#!/bin/bash /etc/rc.common
|
|
. /lib/functions.sh
|
|
|
|
lang=$(uci get luci.main.lang 2>/dev/null)
|
|
load="/tmp/config.yaml"
|
|
CONFIG_YAML_PATH=$(uci get clash.config.use_config 2>/dev/null)
|
|
|
|
|
|
if [ -f $CONFIG_YAML_PATH ] && [ "$(ls -l $CONFIG_YAML_PATH|awk '{print int($5)}')" -ne 0 ];then
|
|
cp $CONFIG_YAML_PATH $load 2>/dev/null
|
|
fi
|
|
|
|
if [ ! -f $load ] || [ "$(ls -l $load|awk '{print int($5)}')" -eq 0 ]; then
|
|
exit 0
|
|
fi
|
|
|
|
CFG_FILE="/etc/config/clash"
|
|
REAL_LOG="/usr/share/clash/clash_real.txt"
|
|
|
|
rm -rf /tmp/Proxy_Group /tmp/group_*.yaml /tmp/yaml_group.yaml 2>/dev/null
|
|
|
|
|
|
if [ $lang == "zh_cn" ];then
|
|
echo "开始更新策略组配置..." >$REAL_LOG
|
|
elif [ $lang == "en" ] || [ $lang == "auto" ];then
|
|
echo "Start updating policy group config" >$REAL_LOG
|
|
fi
|
|
|
|
sed -i 's/^Proxy Group:/proxy-groups:/g' "$load"
|
|
sed -i 's/^proxy-provider:/proxy-providers:/g' "$load"
|
|
sed -i 's/^Proxy:/proxies:/g' "$load"
|
|
sed -i 's/^Rule:/rules:/g' "$load"
|
|
sed -i 's/^rule-provider:/rule-providers:/g' "$load"
|
|
|
|
|
|
group_len=$(sed -n '/^ \{0,\}proxy-groups:/=' "$load" 2>/dev/null)
|
|
provider_len=$(sed -n '/^ \{0,\}proxy-providers:/=' "$load" 2>/dev/null)
|
|
if [ "$provider_len" -ge "$group_len" ]; then
|
|
awk '/proxies:/,/proxy-providers:/{print}' "$load" 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed 's/\t/ /g' 2>/dev/null |grep name: |awk -F 'name:' '{print $2}' |sed 's/,.*//' |sed 's/^ \{0,\}//' 2>/dev/null |sed 's/ \{0,\}$//' 2>/dev/null |sed 's/ \{0,\}\}\{0,\}$//g' 2>/dev/null >/tmp/Proxy_Group 2>&1
|
|
sed -i "s/proxy-providers://g" /tmp/Proxy_Group 2>&1
|
|
else
|
|
awk '/proxies:/,/rules:/{print}' "$load" 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed 's/\t/ /g' 2>/dev/null |grep name: |awk -F 'name:' '{print $2}' |sed 's/,.*//' |sed 's/^ \{0,\}//' 2>/dev/null |sed 's/ \{0,\}$//' 2>/dev/null |sed 's/ \{0,\}\}\{0,\}$//g' 2>/dev/null >/tmp/Proxy_Group 2>&1
|
|
fi
|
|
|
|
|
|
if [ "$?" -eq "0" ]; then
|
|
echo 'DIRECT' >>/tmp/Proxy_Group
|
|
echo 'REJECT' >>/tmp/Proxy_Group
|
|
else
|
|
|
|
if [ $lang == "en" ] || [ $lang == "auto" ];then
|
|
echo "Read error, configuration file exception!" >/tmp/Proxy_Group
|
|
elif [ $lang == "zh_cn" ];then
|
|
echo '读取错误,配置文件异常!' >/tmp/Proxy_Group
|
|
fi
|
|
fi
|
|
|
|
|
|
|
|
group_len=$(sed -n '/^ \{0,\}proxy-groups:/=' "$load" 2>/dev/null)
|
|
provider_len=$(sed -n '/^ \{0,\}proxy-providers:/=' "$load" 2>/dev/null)
|
|
ruleprovider_len=$(sed -n '/^ \{0,\}rule-providers:/=' "$load" 2>/dev/null)
|
|
if [ "$provider_len" -ge "$group_len" ]; then
|
|
awk '/proxy-groups:/,/proxy-providers:/{print}' "$load" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_group.yaml 2>&1
|
|
sed -i "s/proxy-providers://g" /tmp/yaml_group.yaml 2>&1
|
|
elif [ "$ruleprovider_len" -ge "$group_len" ]; then
|
|
awk '/proxy-groups:/,/rule-providers:/{print}' "$load" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_group.yaml 2>&1
|
|
sed -i "s/rule-providers://g" /tmp/yaml_group.yaml 2>&1
|
|
else
|
|
awk '/proxy-groups:/,/Rule:/{print}' "$load" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_group.yaml 2>&1
|
|
fi
|
|
|
|
|
|
|
|
#######READ GROUPS START
|
|
|
|
|
|
if [ -f /tmp/yaml_group.yaml ];then
|
|
while [[ "$( grep -c "config conf_groups" $CFG_FILE )" -ne 0 ]]
|
|
do
|
|
uci delete clash.@conf_groups[0] && uci commit clash >/dev/null 2>&1
|
|
done
|
|
|
|
|
|
|
|
count=1
|
|
file_count=1
|
|
match_group_file="/tmp/Proxy_Group"
|
|
group_file="/tmp/yaml_group.yaml"
|
|
line=$(sed -n '/name:/=' $group_file)
|
|
num=$(grep -c "name:" $group_file)
|
|
|
|
cfg_get()
|
|
{
|
|
echo "$(grep "$1" "$2" 2>/dev/null |awk -v tag=$1 'BEGIN{FS=tag} {print $2}' 2>/dev/null |sed 's/,.*//' 2>/dev/null |sed 's/^ \{0,\}//g' 2>/dev/null |sed 's/ \{0,\}$//g' 2>/dev/null |sed 's/ \{0,\}\}\{0,\}$//g' 2>/dev/null)"
|
|
}
|
|
|
|
|
|
|
|
for n in $line
|
|
do
|
|
single_group="/tmp/group_$file_count.yaml"
|
|
|
|
[ "$count" -eq 1 ] && {
|
|
startLine="$n"
|
|
}
|
|
|
|
count=$(expr "$count" + 1)
|
|
if [ "$count" -gt "$num" ]; then
|
|
endLine=$(sed -n '$=' $group_file)
|
|
else
|
|
endLine=$(expr $(echo "$line" | sed -n "${count}p") - 1)
|
|
fi
|
|
|
|
sed -n "${startLine},${endLine}p" $group_file >$single_group
|
|
startLine=$(expr "$endLine" + 1)
|
|
|
|
#type
|
|
group_type="$(cfg_get "type:" "$single_group")"
|
|
#name
|
|
group_name="$(cfg_get "name:" "$single_group")"
|
|
#test_url
|
|
|
|
if [ $lang == "en" ] || [ $lang == "auto" ];then
|
|
echo "Now Reading 【$group_type】-【$group_name】 Policy Group..." >$REAL_LOG
|
|
elif [ $lang == "zh_cn" ];then
|
|
echo "正在读取【$group_type】-【$group_name】策略组配置..." >$REAL_LOG
|
|
fi
|
|
|
|
name=clash
|
|
uci_name_tmp=$(uci add $name conf_groups)
|
|
uci_set="uci -q set $name.$uci_name_tmp."
|
|
uci_add="uci -q add_list $name.$uci_name_tmp."
|
|
${uci_set}name="$group_name"
|
|
${uci_set}type="$group_type"
|
|
|
|
|
|
file_count=$(( $file_count + 1))
|
|
|
|
done
|
|
|
|
uci commit clash
|
|
|
|
if [ $lang == "en" ] || [ $lang == "auto" ];then
|
|
echo "Reading Policy Group Completed" >$REAL_LOG
|
|
sleep 2
|
|
echo "Clash for OpenWRT" >$REAL_LOG
|
|
elif [ $lang == "zh_cn" ];then
|
|
echo "读取策略组配置完成" >$REAL_LOG
|
|
sleep 2
|
|
echo "Clash for OpenWRT" >$REAL_LOG
|
|
fi
|
|
|
|
rm -rf /tmp/Proxy_Group /tmp/group_*.yaml /tmp/yaml_group.yaml $load 2>/dev/null
|
|
fi
|
|
#######READ GROUPS END |