Merge Mainline
This commit is contained in:
commit
5d9a7686c4
@ -1,7 +1,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-openclash
|
||||
PKG_VERSION:=0.38.1
|
||||
PKG_VERSION:=0.38.4
|
||||
PKG_RELEASE:=beta
|
||||
PKG_MAINTAINER:=vernesong <https://github.com/vernesong/OpenClash>
|
||||
|
||||
@ -33,6 +33,7 @@ define Build/Prepare
|
||||
chmod -R 0755 $(PKG_BUILD_DIR)/files/usr/share/openclash/
|
||||
mkdir -p $(PKG_BUILD_DIR)/files/etc/openclash/config >/dev/null 2>&1
|
||||
mkdir -p $(PKG_BUILD_DIR)/files/etc/openclash/proxy_provider >/dev/null 2>&1
|
||||
mkdir -p $(PKG_BUILD_DIR)/files/etc/openclash/rule_provider >/dev/null 2>&1
|
||||
mkdir -p $(PKG_BUILD_DIR)/files/etc/openclash/backup >/dev/null 2>&1
|
||||
mkdir -p $(PKG_BUILD_DIR)/files/etc/openclash/core >/dev/null 2>&1
|
||||
mkdir -p $(PKG_BUILD_DIR)/files/usr/share/openclash/backup >/dev/null 2>&1
|
||||
@ -57,7 +58,7 @@ if [ -f "/etc/config/openclash" ]; then
|
||||
cp "/etc/config/openclash_custom_rules_2.list" "/tmp/openclash_custom_rules_2.list.bak" >/dev/null 2>&1
|
||||
cp "/etc/config/openclash_custom_hosts.list" "/tmp/openclash_custom_hosts.list.bak" >/dev/null 2>&1
|
||||
cp "/etc/config/openclash_custom_fake_filter.list" "/tmp/openclash_custom_fake_filter.list.bak" >/dev/null 2>&1
|
||||
cp "/etc/openclash/history" "/tmp/openclash_history.bak" >/dev/null 2>&1
|
||||
cp -r "/etc/openclash/history" "/tmp/openclash_history" >/dev/null 2>&1
|
||||
fi
|
||||
if [ -f "/etc/openclash/custom/openclash_custom_rules.list" ]; then
|
||||
cp "/etc/openclash/custom/openclash_custom_rules.list" "/tmp/openclash_custom_rules.list.bak" >/dev/null 2>&1
|
||||
@ -81,8 +82,10 @@ uci set firewall.openclash.reload=1 >/dev/null 2>&1
|
||||
uci commit firewall >/dev/null 2>&1
|
||||
mkdir -p /etc/openclash/config >/dev/null 2>&1
|
||||
mkdir -p /etc/openclash/proxy_provider >/dev/null 2>&1
|
||||
mkdir -p /etc/openclash/rule_provider >/dev/null 2>&1
|
||||
mkdir -p /etc/openclash/backup >/dev/null 2>&1
|
||||
mkdir -p /etc/openclash/core >/dev/null 2>&1
|
||||
mkdir -p /etc/openclash/history >/dev/null 2>&1
|
||||
mkdir -p /usr/share/openclash/backup >/dev/null 2>&1
|
||||
|
||||
cp "/etc/config/openclash" "/usr/share/openclash/backup/openclash" >/dev/null 2>&1
|
||||
@ -97,7 +100,10 @@ if [ -f "/tmp/openclash.bak" ]; then
|
||||
mv "/tmp/openclash_custom_rules_2.list.bak" "/etc/openclash/custom/openclash_custom_rules_2.list" >/dev/null 2>&1
|
||||
mv "/tmp/openclash_custom_hosts.list.bak" "/etc/openclash/custom/openclash_custom_hosts.list" >/dev/null 2>&1
|
||||
mv "/tmp/openclash_custom_fake_filter.list.bak" "/etc/openclash/custom/openclash_custom_fake_filter.list" >/dev/null 2>&1
|
||||
mv "/tmp/openclash_history.bak" "/etc/openclash/history" >/dev/null 2>&1
|
||||
if [ -d "/tmp/openclash_history/" ]; then
|
||||
rm -rf "/etc/openclash/history" >/dev/null 2>&1
|
||||
mv "/tmp/openclash_history" "/etc/openclash/history" >/dev/null 2>&1
|
||||
fi
|
||||
fi
|
||||
if [ -f "/tmp/config.yaml" ]; then
|
||||
mv "/tmp/config.yaml" "/etc/openclash/config/config.yaml" >/dev/null 2>&1
|
||||
@ -111,6 +117,10 @@ if [ -d "/tmp/openclash_proxy_provider/" ]; then
|
||||
rm -rf "/etc/openclash/proxy_provider" >/dev/null 2>&1
|
||||
mv "/tmp/openclash_proxy_provider" "/etc/openclash/proxy_provider" >/dev/null 2>&1
|
||||
fi
|
||||
if [ -d "/tmp/openclash_rule_provider/" ]; then
|
||||
rm -rf "/etc/openclash/rule_provider" >/dev/null 2>&1
|
||||
mv "/tmp/openclash_rule_provider" "/etc/openclash/rule_provider" >/dev/null 2>&1
|
||||
fi
|
||||
if [ -d "/tmp/openclash_game_rules/" ]; then
|
||||
rm -rf "/etc/openclash/game_rules" >/dev/null 2>&1
|
||||
mv "/tmp/openclash_game_rules" "/etc/openclash/game_rules" >/dev/null 2>&1
|
||||
@ -132,6 +142,7 @@ cat > "/lib/upgrade/keep.d/luci-app-openclash" <<-EOF
|
||||
/etc/openclash/config/
|
||||
/etc/openclash/game_rules/
|
||||
/etc/openclash/proxy_provider/
|
||||
/etc/openclash/rule_provider/
|
||||
EOF
|
||||
uci set openclash.config.enable=0 >/dev/null 2>&1
|
||||
uci commit openclash >/dev/null 2>&1
|
||||
@ -142,12 +153,15 @@ endef
|
||||
|
||||
define Package/$(PKG_NAME)/prerm
|
||||
#!/bin/sh
|
||||
uci set openclash.config.enable=0 >/dev/null 2>&1
|
||||
uci commit openclash >/dev/null 2>&1
|
||||
mv "/etc/openclash/core" "/tmp/openclash_core" >/dev/null 2>&1
|
||||
mv "/etc/openclash/config.yaml" "/tmp/config.yaml" >/dev/null 2>&1
|
||||
mv "/etc/openclash/config" "/tmp/openclash_config" >/dev/null 2>&1
|
||||
mv "/etc/openclash/proxy_provider" "/tmp/openclash_proxy_provider" >/dev/null 2>&1
|
||||
mv "/etc/openclash/rule_provider" "/tmp/openclash_rule_provider" >/dev/null 2>&1
|
||||
mv "/etc/openclash/game_rules" "/tmp/openclash_game_rules" >/dev/null 2>&1
|
||||
mv "/etc/openclash/history" "/tmp/openclash_history.bak" >/dev/null 2>&1
|
||||
mv "/etc/openclash/history" "/tmp/openclash_history" >/dev/null 2>&1
|
||||
cp "/etc/config/openclash" "/tmp/openclash.bak" >/dev/null 2>&1
|
||||
cp "/etc/config/openclash_custom_rules.list" "/tmp/openclash_custom_rules.list.bak" >/dev/null 2>&1
|
||||
cp "/etc/config/openclash_custom_hosts.list" "/tmp/openclash_custom_hosts.list.bak" >/dev/null 2>&1
|
||||
@ -164,6 +178,7 @@ if [ -f "/tmp/openclash_update.sh" ]; then
|
||||
rm -rf /etc/openclash/config >/dev/null 2>&1
|
||||
rm -rf /etc/openclash/backup >/dev/null 2>&1
|
||||
rm -rf /etc/openclash/proxy_provider >/dev/null 2>&1
|
||||
rm -rf /etc/openclash/rule_provider >/dev/null 2>&1
|
||||
rm -rf /etc/openclash/game_rules >/dev/null 2>&1
|
||||
rm -rf /etc/openclash/history >/dev/null 2>&1
|
||||
else
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
#!/bin/bash /etc/rc.common
|
||||
# Copyright (c) 2019 vernesong
|
||||
|
||||
START=99
|
||||
@ -14,6 +14,8 @@ START_LOG="/tmp/openclash_start.log"
|
||||
BACKUP_FILE="/etc/openclash/backup/$(uci get openclash.config.config_path 2>/dev/null |awk -F '/' '{print $5}' 2>/dev/null)"
|
||||
START_BACKUP="/tmp/config.sbak"
|
||||
CHANGE_FILE="/tmp/yaml_change.yaml"
|
||||
SCRIPT_FILE="/tmp/yaml_script.yaml"
|
||||
RULE_PROVIDER_FILE="/tmp/yaml_rule_provider.yaml"
|
||||
RULE_FILE="/tmp/yaml_rules.yaml"
|
||||
DNS_FILE="/tmp/yaml_dns.yaml"
|
||||
PROXY_FILE="/tmp/yaml_proxy.yaml"
|
||||
@ -84,6 +86,50 @@ revert_dns() {
|
||||
rm -rf /tmp/dnsmasq.d/dnsmasq_openclash.conf >/dev/null 2>&1
|
||||
}
|
||||
|
||||
kill_clash()
|
||||
{
|
||||
clash_pids=$(pidof clash|sed 's/$//g')
|
||||
for clash_pid in $clash_pids; do
|
||||
kill -9 "$clash_pid" 2>/dev/null
|
||||
done
|
||||
sleep 1
|
||||
}
|
||||
|
||||
field_cut()
|
||||
{
|
||||
local i lines end_len
|
||||
proxy_len=$(sed -n '/^Proxy:/=' "$3" 2>/dev/null |sed -n 1p)
|
||||
provider_len=$(sed -n '/^proxy-providers:/=' "$3" 2>/dev/null)
|
||||
group_len=$(sed -n '/^proxy-groups:/=' "$3" 2>/dev/null)
|
||||
rule_len=$(sed -n '/^rules:/=' "$3" 2>/dev/null)
|
||||
rule_provider_len=$(sed -n '/^rule-providers:/=' "$3" 2>/dev/null)
|
||||
script_len=$(sed -n '/^script:/=' "$3" 2>/dev/null)
|
||||
lines="$proxy_len $provider_len $group_len $rule_len $rule_provider_len $script_len"
|
||||
|
||||
for i in $lines
|
||||
do
|
||||
if [ -z "$1" ]; then
|
||||
break
|
||||
fi
|
||||
|
||||
if [ "$1" -ge "$i" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "$end_len" -gt "$i" ] || [ -z "$end_len" ]; then
|
||||
end_len="$i"
|
||||
fi
|
||||
done 2>/dev/null
|
||||
|
||||
if [ -n "$1" ] && [ -z "$end_len" ]; then
|
||||
end_len=$(sed -n '$=' "$3")
|
||||
elif [ -n "$end_len" ]; then
|
||||
end_len=$(expr "$end_len" - 1)
|
||||
fi
|
||||
sed -n "${1},${end_len}p" "$3" > "$2" 2>/dev/null
|
||||
sed -i "${1},${end_len}d" "$3" 2>/dev/null
|
||||
}
|
||||
|
||||
yml_check()
|
||||
{
|
||||
#格式替换
|
||||
@ -107,20 +153,24 @@ yml_check()
|
||||
fi
|
||||
|
||||
#位置检查
|
||||
proxy_len=$(sed -n '/^Proxy:/=' "$3" 2>/dev/null)
|
||||
provider_len=$(sed -n '/^proxy-provider:/=' "$3" 2>/dev/null)
|
||||
group_len=$(sed -n '/^Proxy Group:/=' "$3" 2>/dev/null)
|
||||
proxy_len=$(sed -n '/^Proxy:/=' "$3" 2>/dev/null |sed -n 1p)
|
||||
provider_len=$(sed -n '/^proxy-providers:/=' "$3" 2>/dev/null)
|
||||
group_len=$(sed -n '/^proxy-groups:/=' "$3" 2>/dev/null)
|
||||
dns_len=$(sed -n '/^dns:/=' "$3" 2>/dev/null)
|
||||
rule_len=$(sed -n '/^Rule:/=' "$3" 2>/dev/null)
|
||||
rule_len=$(sed -n '/^rules:/=' "$3" 2>/dev/null)
|
||||
|
||||
if [ "$dns_len" -ge "$proxy_len" ] || [ "$dns_len" -ge "$rule_len" ] || [ "$dns_len" -ge "$group_len" ]; then
|
||||
kill_clash
|
||||
stop
|
||||
echo "错误: 不支持的配置文件, General 设置部分应位于开头,请根据模板修改后重试!" > $START_LOG
|
||||
echo "${LOGTIME} Unsupported Config, Please Check The General Setting's location And Try-again!" >> $LOG_FILE
|
||||
mv "$START_BACKUP" "$CONFIG_FILE"
|
||||
exit 0
|
||||
fi 2>/dev/null
|
||||
|
||||
if [ "$proxy_len" -ge "$rule_len" ] || [ "$provider_len" -ge "$rule_len" ]; then
|
||||
if [ "$proxy_len" -ge "$rule_len" ]; then
|
||||
kill_clash
|
||||
stop
|
||||
echo "错误: 不支持的配置文件,服务器节点设置部分应位于规则之前,请根据模板修改后重试!" > $START_LOG
|
||||
echo "${LOGTIME} Unsupported Config, Please Check The Proxy Setting's location And Try-again!" >> $LOG_FILE
|
||||
mv "$START_BACKUP" "$CONFIG_FILE"
|
||||
@ -128,59 +178,48 @@ yml_check()
|
||||
fi 2>/dev/null
|
||||
|
||||
if [ "$group_len" -ge "$rule_len" ] || [ "$proxy_len" -ge "$group_len" ]; then
|
||||
kill_clash
|
||||
stop
|
||||
echo "错误: 不支持的配置文件,策略组设置部分应位于规则之前、节点之后,请根据模板修改后重试!" > $START_LOG
|
||||
echo "${LOGTIME} Unsupported Config, Please Check The Group Setting's location And Try-again!" >> $LOG_FILE
|
||||
mv "$START_BACKUP" "$CONFIG_FILE"
|
||||
exit 0
|
||||
fi 2>/dev/null
|
||||
|
||||
#处理provider位置
|
||||
if [ ! -z "$provider_len" ]; then
|
||||
if [ "$provider_len" -ge "$proxy_len" ] && [ "$provider_len" -le "$group_len" ]; then
|
||||
awk '/^proxy-provider:/,/^Proxy Group:/{print}' "$3" | sed '/^Proxy Group:/d' >/tmp/backprovider.yaml 2>/dev/null
|
||||
sed -i '/^Proxy Group:/i\proxy-provider-tag' "$3" 2>/dev/null
|
||||
sed -i '/^proxy-provider:/,/proxy-provider-tag/d' "$3" 2>/dev/null
|
||||
sed -i '/^Proxy:/i\proxy-provider:' "$3" 2>/dev/null
|
||||
sed -i 's/^proxy-provider://g' /tmp/backprovider.yaml 2>/dev/null
|
||||
sed -i '/^ *$/d' /tmp/backprovider.yaml 2>/dev/null
|
||||
sed -i '/proxy-provider:/r/tmp/backprovider.yaml' "$3" 2>/dev/null
|
||||
rm -rf /tmp/backprovider.yaml 2>/dev/null
|
||||
elif [ "$provider_len" -ge "$group_len" ] && [ "$provider_len" -le "$rule_len" ]; then
|
||||
awk '/^proxy-provider:/,/^Rule:/{print}' "$3" | sed '/^Rule:/d' >/tmp/backprovider.yaml 2>/dev/null
|
||||
sed -i '/^Rule:/i\proxy-provider-tag' "$3" 2>/dev/null
|
||||
sed -i '/^proxy-provider:/,/proxy-provider-tag/d' "$3" 2>/dev/null
|
||||
if [ ! -z "$proxy_len" ]; then
|
||||
sed -i '/^Proxy:/i\proxy-provider:' "$3" 2>/dev/null
|
||||
else
|
||||
sed -i '/^Proxy Group:/i\proxy-provider:' "$3" 2>/dev/null
|
||||
fi
|
||||
sed -i 's/^proxy-provider://g' /tmp/backprovider.yaml 2>/dev/null
|
||||
sed -i '/^ *$/d' /tmp/backprovider.yaml 2>/dev/null
|
||||
sed -i '/proxy-provider:/r/tmp/backprovider.yaml' "$3" 2>/dev/null
|
||||
rm -rf /tmp/backprovider.yaml 2>/dev/null
|
||||
elif [ "$provider_len" -ge "$rule_len" ]; then
|
||||
sed -n '/^ \{0,\}proxy-provider:/,$p' "$3" >/tmp/backprovider.yaml 2>/dev/null
|
||||
sed -i '/^ \{0,\}proxy-provider:/,$d' "$3" 2>/dev/null
|
||||
if [ ! -z "$proxy_len" ]; then
|
||||
sed -i '/^Proxy:/i\proxy-provider:' "$3" 2>/dev/null
|
||||
else
|
||||
sed -i '/^Proxy Group:/i\proxy-provider:' "$3" 2>/dev/null
|
||||
fi
|
||||
sed -i 's/^proxy-provider://g' /tmp/backprovider.yaml 2>/dev/null
|
||||
sed -i '/^ *$/d' /tmp/backprovider.yaml 2>/dev/null
|
||||
sed -i '/proxy-provider:/r/tmp/backprovider.yaml' "$3" 2>/dev/null
|
||||
rm -rf /tmp/backprovider.yaml 2>/dev/null
|
||||
fi 2>/dev/null
|
||||
fi
|
||||
#处理proxy_provider位置
|
||||
if [ "$provider_len" -ge "$proxy_len" ] || [ "$provider_len" -ge "$group_len" ]; then
|
||||
field_cut "$provider_len" "$PROXY_PROVIDER_FILE" "$3"
|
||||
if [ -n "$proxy_len" ]; then
|
||||
sed -i '/^Proxy:/i\proxy-provider-tag' "$3" 2>/dev/null
|
||||
sed -i '/proxy-provider-tag/r/tmp/yaml_proxy_provider.yaml' "$3" 2>/dev/null
|
||||
sed -i '/proxy-provider-tag/d' "$3" 2>/dev/null
|
||||
elif [ -n "$group_len" ]; then
|
||||
sed -i '/^proxy-groups:/i\proxy-provider-tag' "$3" 2>/dev/null
|
||||
sed -i '/proxy-provider-tag/r/tmp/yaml_proxy_provider.yaml' "$3" 2>/dev/null
|
||||
sed -i '/proxy-provider-tag/d' "$3" 2>/dev/null
|
||||
fi
|
||||
fi 2>/dev/null
|
||||
|
||||
if [ ! -z "$provider_len" ]; then
|
||||
#处理rule_provider位置
|
||||
rule_provider_len=$(sed -n '/^rule-providers:/=' "$3" 2>/dev/null)
|
||||
if [ -n "$rule_provider_len" ]; then
|
||||
field_cut "$rule_provider_len" "$RULE_PROVIDER_FILE" "$3"
|
||||
fi 2>/dev/null
|
||||
|
||||
#处理script位置
|
||||
script_len=$(sed -n '/^script:/=' "$3" 2>/dev/null)
|
||||
if [ -n "$script_len" ]; then
|
||||
field_cut "$script_len" "$SCRIPT_FILE" "$3"
|
||||
fi 2>/dev/null
|
||||
|
||||
if [ -n "$provider_len" ]; then
|
||||
proxy_provider_mode=1
|
||||
fi
|
||||
|
||||
#自定义DNS还原
|
||||
if [ "$(grep -c '##Custom DNS##' "$3")" -gt 0 ] && [ "$2" = 0 ] && [ -f "$4" ]; then
|
||||
if [ "$proxy_provider_mode" -eq 1 ]; then
|
||||
awk '/^ {0,}nameserver:/,/proxy-provider:/{print}' "$4" | sed '/^proxy-provider:/d' >/tmp/backdns.config 2>/dev/null
|
||||
awk '/^ {0,}nameserver:/,/proxy-providers:/{print}' "$4" | sed '/^proxy-providers:/d' >/tmp/backdns.config 2>/dev/null
|
||||
else
|
||||
awk '/^ {0,}nameserver:/,/Proxy:/{print}' "$4" | sed '/^Proxy:/d' >/tmp/backdns.config 2>/dev/null
|
||||
fi
|
||||
@ -192,7 +231,7 @@ yml_check()
|
||||
|
||||
yml_dns_check
|
||||
|
||||
if [ ! -z "$(grep "^ \{1,\}port:" "$3")" ] || [ ! -z "$(grep "^ \{1,\}mode:" "$3")" ] || [ ! -z "$(grep "^ \{1,\}log-level:" "$3")" ]; then
|
||||
if [ -n "$(grep "^ \{1,\}port:" "$3")" ] || [ -n "$(grep "^ \{1,\}mode:" "$3")" ] || [ -n "$(grep "^ \{1,\}log-level:" "$3")" ]; then
|
||||
cp "$3" /tmp/config.check 2>/dev/null
|
||||
sed -i '/^dns:/,$d' /tmp/config.check 2>/dev/null
|
||||
sed -i 's/^[ \t]*//' /tmp/config.check 2>/dev/null
|
||||
@ -203,10 +242,10 @@ yml_check()
|
||||
#添加标识
|
||||
sed -i '/OpenClash-General/d' "$3" 2>/dev/null
|
||||
if [ "$proxy_provider_mode" -eq 1 ]; then
|
||||
sed -i '/^proxy-provider:/i\#===================== OpenClash-General-Settings =====================#' "$3" 2>/dev/null
|
||||
sed -i '/^proxy-providers:/i\#===================== OpenClash-General-Settings =====================#' "$3" 2>/dev/null
|
||||
else
|
||||
sed -i '/^Proxy:/i\#===================== OpenClash-General-Settings =====================#' "$3" 2>/dev/null
|
||||
fi
|
||||
fi 2>/dev/null
|
||||
}
|
||||
|
||||
#检查DNS设置
|
||||
@ -215,18 +254,18 @@ yml_dns_check()
|
||||
|
||||
if [ -z "$(grep '^dns:' "$CONFIG_FILE")" ]; then
|
||||
if [ "$proxy_provider_mode" -eq 1 ]; then
|
||||
sed -i '/^proxy-provider:/i\dns:' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^proxy-providers:/i\dns:' "$CONFIG_FILE" 2>/dev/null
|
||||
else
|
||||
sed -i '/^Proxy:/i\dns:' "$CONFIG_FILE" 2>/dev/null
|
||||
fi
|
||||
fi 2>/dev/null
|
||||
fi
|
||||
|
||||
if [ -z "$(grep '^ \{0,\}nameserver:' "$CONFIG_FILE")" ]; then
|
||||
if [ "$proxy_provider_mode" -eq 1 ]; then
|
||||
sed -i '/^proxy-provider:/i\ nameserver:' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^proxy-providers:/i\ nameserver:' "$CONFIG_FILE" 2>/dev/null
|
||||
else
|
||||
sed -i '/^Proxy:/i\ nameserver:' "$CONFIG_FILE" 2>/dev/null
|
||||
fi
|
||||
fi 2>/dev/null
|
||||
sed -i "/^ \{0,\}nameserver:/a\ - tls://8.8.8.8:853" "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i "/^ \{0,\}nameserver:/a\ fallback:" "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i "/^ \{0,\}nameserver:/a\ - 114.114.114.114" "$CONFIG_FILE" 2>/dev/null
|
||||
@ -237,7 +276,7 @@ yml_dns_check()
|
||||
dns_port=7874
|
||||
fi
|
||||
|
||||
if [ ! -z "$(grep "^ \{0,\}listen:" "$CONFIG_FILE")" ]; then
|
||||
if [ -n "$(grep "^ \{0,\}listen:" "$CONFIG_FILE")" ]; then
|
||||
if [ "$ipv6_enable" != "1" ]; then
|
||||
sed -i "/^ \{0,\}listen:/c\ listen: 127.0.0.1:${dns_port}" "$CONFIG_FILE" 2>/dev/null
|
||||
else
|
||||
@ -255,66 +294,85 @@ yml_dns_check()
|
||||
|
||||
}
|
||||
|
||||
#修改代理集路径
|
||||
#修改集路径
|
||||
yml_provider_path()
|
||||
{
|
||||
sed -i "s/\'//g" "$1" 2>/dev/null
|
||||
sed -i 's/\"//g' "$1" 2>/dev/null
|
||||
proxy_provider_path_line=$(sed -n '/^ \{0,\}path:/=' "$1" 2>/dev/null)
|
||||
if [ ! -z "$proxy_provider_path_line" ]; then
|
||||
for n in $proxy_provider_path_line
|
||||
provider_path_line=$(sed -n '/^ \{0,\}path:/=' "$1" 2>/dev/null)
|
||||
if [ -n "$provider_path_line" ]; then
|
||||
for n in $provider_path_line
|
||||
do
|
||||
provider_path=$(sed -n "${n}p" "$1" |awk -F 'path:' '{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)
|
||||
if [ -z "$(echo "$provider_path" |grep "proxy_provider")" ]; then
|
||||
if [ -z "$(echo "$provider_path" |grep "$2")" ]; then
|
||||
provider_name=$(echo "$provider_path" |awk -F '/' '{print $NF}')
|
||||
sed -i "s#${provider_path}#./proxy_provider/${provider_name}#" "$1" 2>/dev/null
|
||||
sed -i "s#${provider_path}#./${2}/${provider_name}#" "$1" 2>/dev/null
|
||||
fi
|
||||
done
|
||||
fi 2>/dev/null
|
||||
}
|
||||
|
||||
#检查代理集文件防止启动失败
|
||||
yml_proxy_provider_check()
|
||||
#检查集文件防止启动失败
|
||||
yml_provider_check()
|
||||
{
|
||||
if [ ! -z "$proxy_provider_path_line" ]; then
|
||||
while ( [ ! -z "$(pidof clash)" ] && [ "$proxy_provider_path_exist" != 1 ] )
|
||||
provider_path_line=$(sed -n '/^ \{0,\}path:/=' "$1" 2>/dev/null)
|
||||
local provider_path_exist
|
||||
if [ -n "$provider_path_line" ]; then
|
||||
while ( [ -n "$(pidof clash)" ] && [ "$provider_path_exist" != 1 ] )
|
||||
do
|
||||
if [ "$proxy_provider_mode" = 1 ]; then
|
||||
proxy_provider_path_exist=1
|
||||
for n in $proxy_provider_path_line
|
||||
do
|
||||
provider_path=$(sed -n "${n}p" "$1" |awk -F 'path:' '{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)
|
||||
if [ "$(echo ${provider_path:0:1})" = "." ]; then
|
||||
provider_path_check="/etc/openclash/$(echo ${provider_path:2})"
|
||||
if [ -f "$provider_path_check" ]; then
|
||||
if [ -z "$(grep "'proxies:':" "$provider_path_check")" ] && [ -z "$(grep '"proxies:":' "$provider_path_check")" ] && [ -z "$(grep 'proxies:' "$provider_path_check")" ]; then
|
||||
proxy_provider_path_exist=0
|
||||
fi
|
||||
else
|
||||
proxy_provider_path_exist=0
|
||||
fi
|
||||
else
|
||||
provider_path_check="$provider_path"
|
||||
if [ -f "$provider_path_check" ]; then
|
||||
if [ -z "$(grep "'proxies:':" "$provider_path_check")" ] && [ -z "$(grep '"proxies:":' "$provider_path_check")" ] && [ -z "$(grep 'proxies:' "$provider_path_check")" ]; then
|
||||
proxy_provider_path_exist=0
|
||||
fi
|
||||
else
|
||||
proxy_provider_path_exist=0
|
||||
provider_path_exist=1
|
||||
for n in $provider_path_line
|
||||
do
|
||||
provider_path=$(sed -n "${n}p" "$1" |awk -F 'path:' '{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)
|
||||
if [ "$(echo ${provider_path:0:1})" = "." ]; then
|
||||
provider_path_check="/etc/openclash/$(echo ${provider_path:2})"
|
||||
if [ -f "$provider_path_check" ] && [ "$2" = "proxy_provider" ]; then
|
||||
if [ -z "$(grep "'proxies:':" "$provider_path_check")" ] && [ -z "$(grep '"proxies:":' "$provider_path_check")" ] && [ -z "$(grep 'proxies:' "$provider_path_check")" ]; then
|
||||
provider_path_exist=0
|
||||
fi
|
||||
elif [ "$2" = "proxy_provider" ]; then
|
||||
provider_path_exist=0
|
||||
fi
|
||||
done
|
||||
else
|
||||
proxy_provider_path_exist=1
|
||||
fi
|
||||
if [ -f "$provider_path_check" ] && [ "$2" = "rule_provider" ]; then
|
||||
if [ -z "$(grep "'payload:':" "$provider_path_check")" ] && [ -z "$(grep '"payload:":' "$provider_path_check")" ] && [ -z "$(grep 'payload:' "$provider_path_check")" ]; then
|
||||
provider_path_exist=0
|
||||
fi
|
||||
elif [ "$2" = "rule_provider" ]; then
|
||||
provider_path_exist=0
|
||||
fi
|
||||
else
|
||||
provider_path_check="$provider_path"
|
||||
if [ -f "$provider_path_check" ] && [ "$2" = "proxy_provider" ]; then
|
||||
if [ -z "$(grep "'proxies:':" "$provider_path_check")" ] && [ -z "$(grep '"proxies:":' "$provider_path_check")" ] && [ -z "$(grep 'proxies:' "$provider_path_check")" ]; then
|
||||
provider_path_exist=0
|
||||
fi
|
||||
elif [ "$2" = "proxy_provider" ]; then
|
||||
provider_path_exist=0
|
||||
fi
|
||||
if [ -f "$provider_path_check" ] && [ "$2" = "rule_provider" ]; then
|
||||
if [ -z "$(grep "'payload:':" "$provider_path_check")" ] && [ -z "$(grep '"payload:":' "$provider_path_check")" ] && [ -z "$(grep 'payload:' "$provider_path_check")" ]; then
|
||||
provider_path_exist=0
|
||||
fi
|
||||
elif [ "$2" = "rule_provider" ]; then
|
||||
provider_path_exist=0
|
||||
fi
|
||||
fi
|
||||
done
|
||||
done
|
||||
fi
|
||||
|
||||
if [ -z "$(pidof clash)" ] && [ "$proxy_provider_mode" = 1 ]; then
|
||||
echo "错误: OpenClash 启动失败,请到日志页面查看详细错误信息!" >$START_LOG
|
||||
echo "${LOGTIME} OpenClash Can Not Start, Please Check The Error Info And Try Again" >> $LOG_FILE
|
||||
if [ -z "$(pidof clash)" ] && [ "$provider_path_exist" = 0 ]; then
|
||||
kill_clash
|
||||
stop
|
||||
if [ "$2" = "proxy_provider" ]; then
|
||||
echo "错误: 代理集文件下载失败,请到日志页面查看详细错误信息!" >$START_LOG
|
||||
echo "${LOGTIME} Faild to Download Proxy-Provider File, Please Check The Error Info And Try Again" >> $LOG_FILE
|
||||
else
|
||||
echo "错误: 规则集文件下载失败,请到日志页面查看详细错误信息!" >$START_LOG
|
||||
echo "${LOGTIME} Faild to Download Rule-Provider File, Please Check The Error Info And Try Again" >> $LOG_FILE
|
||||
fi
|
||||
sleep 10
|
||||
stop && echo "" >$START_LOG
|
||||
echo "" >$START_LOG
|
||||
exit 0
|
||||
fi
|
||||
|
||||
@ -324,27 +382,27 @@ fi
|
||||
yml_cut()
|
||||
{
|
||||
cp "$4" "$1"
|
||||
sed -i '/^Rule:/,$d' "$1" 2>/dev/null
|
||||
sed -i '/^rules:/,$d' "$1" 2>/dev/null
|
||||
sed -n '/^ \{0,\}nameserver:/,$p' "$1" >"$3" 2>/dev/null
|
||||
if [ "$proxy_provider_mode" -eq 1 ]; then
|
||||
sed -n '/^ \{0,\}Proxy Group:/,$p' "$3" >"$7" 2>/dev/null
|
||||
sed -n '/^ \{0,\}proxy-groups:/,$p' "$3" >"$7" 2>/dev/null
|
||||
sed -n '/^ \{0,\}Proxy:/,$p' "$3" >"$5" 2>/dev/null
|
||||
sed -n '/^ \{0,\}proxy-provider:/,$p' "$3" >"$6" 2>/dev/null
|
||||
sed -i '/^ \{0,\}Proxy Group:/,$d' "$5" 2>/dev/null
|
||||
sed -n '/^ \{0,\}proxy-providers:/,$p' "$3" >"$6" 2>/dev/null
|
||||
sed -i '/^ \{0,\}proxy-groups:/,$d' "$5" 2>/dev/null
|
||||
sed -i '/^ \{0,\}Proxy:/,$d' "$6" 2>/dev/null
|
||||
sed -i '/^ \{0,\}Proxy Group:/,$d' "$6" 2>/dev/null
|
||||
sed -i '/^ \{0,\}proxy-groups:/,$d' "$6" 2>/dev/null
|
||||
else
|
||||
sed -n '/^ \{0,\}Proxy Group:/,$p' "$3" >"$7" 2>/dev/null
|
||||
sed -n '/^ \{0,\}proxy-groups:/,$p' "$3" >"$7" 2>/dev/null
|
||||
sed -n '/^ \{0,\}Proxy:/,$p' "$3" >"$5" 2>/dev/null
|
||||
sed -i '/^ \{0,\}Proxy Group:/,$d' "$5" 2>/dev/null
|
||||
fi
|
||||
sed -i '/^ \{0,\}proxy-groups:/,$d' "$5" 2>/dev/null
|
||||
fi 2>/dev/null
|
||||
sed -i '/^ \{0,\}nameserver:/,$d' "$1" 2>/dev/null
|
||||
if [ "$proxy_provider_mode" -eq 1 ]; then
|
||||
sed -i '/^ \{0,\}proxy-provider:/,$d' "$3" 2>/dev/null
|
||||
sed -i '/^ \{0,\}proxy-providers:/,$d' "$3" 2>/dev/null
|
||||
else
|
||||
sed -i '/^ \{0,\}Proxy:/,$d' "$3" 2>/dev/null
|
||||
fi
|
||||
sed -n '/^Rule:/,$p' "$4" >"$2" 2>/dev/null
|
||||
fi 2>/dev/null
|
||||
sed -n '/^rules:/,$p' "$4" >"$2" 2>/dev/null
|
||||
}
|
||||
|
||||
#获取自定义DNS设置
|
||||
@ -378,15 +436,15 @@ yml_dns_get()
|
||||
dns_type="- https://"
|
||||
fi
|
||||
|
||||
if [ ! -z "$port" ] && [ ! -z "$ip" ]; then
|
||||
if [ -n "$port" ] && [ -n "$ip" ]; then
|
||||
dns_address="$ip:$port"
|
||||
elif [ -z "$port" ] && [ ! -z "$ip" ]; then
|
||||
elif [ -z "$port" ] && [ -n "$ip" ]; then
|
||||
dns_address="$ip"
|
||||
else
|
||||
return
|
||||
fi
|
||||
|
||||
if [ ! -z "$group" ]; then
|
||||
if [ -n "$group" ]; then
|
||||
if [ "$group" = "nameserver" ]; then
|
||||
echo " $dns_type$dns_address" >>/etc/openclash/config.namedns
|
||||
else
|
||||
@ -421,7 +479,7 @@ yml_dns_custom()
|
||||
fi
|
||||
|
||||
#fallback-filter
|
||||
if [ ! -z "$(grep '^ \{0,\}fallback:' $2)" ]; then
|
||||
if [ -n "$(grep '^ \{0,\}fallback:' $2)" ]; then
|
||||
if [ -z "$(grep '^ \{0,\}fallback-filter:' $2)" ]; then
|
||||
awk '/^ {0,}fallback:/,/OpenClash-General-Settings/{print}' "$2" |sed '1d' |sed '$d' >/tmp/fallback.cache 2>/dev/null
|
||||
sed -i '/cfw-bypass:/,$d' /tmp/fallback.cache 2>/dev/null
|
||||
@ -454,11 +512,11 @@ yml_dns_custom()
|
||||
fi
|
||||
#删除fallback-filter
|
||||
else
|
||||
if [ ! -z "$(grep '^ \{0,\}fallback-filter:' $2)" ]; then
|
||||
if [ -n "$(grep '^ \{0,\}fallback-filter:' $2)" ]; then
|
||||
sed -i '/fallback-filter:/,$d' "$2" 2>/dev/null
|
||||
echo "#===================== OpenClash-General-Settings =====================#" >>"$2"
|
||||
fi
|
||||
if [ ! -z "$(grep "^ \{0,1\}- " $2)" ]; then
|
||||
if [ -n "$(grep "^ \{0,1\}- " $2)" ]; then
|
||||
#添加参数空格
|
||||
sed -i "s/^ \{0,\}- / - /" "$2" 2>/dev/null
|
||||
fi
|
||||
@ -488,7 +546,7 @@ yml_auth_get()
|
||||
#添加认证信息
|
||||
yml_auth_custom()
|
||||
{
|
||||
if [ ! -z "$(grep "^authentication:" "$1")" ]; then
|
||||
if [ -n "$(grep "^authentication:" "$1")" ]; then
|
||||
sed -i '/^dns:/i\#authentication' "$1" 2>/dev/null
|
||||
sed -i '/^authentication:/,/^#authentication/d' "$1" 2>/dev/null
|
||||
fi
|
||||
@ -529,7 +587,7 @@ yml_game_rule_get()
|
||||
return
|
||||
fi
|
||||
|
||||
if [ ! -z "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then
|
||||
if [ -n "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
@ -551,7 +609,7 @@ yml_game_group_get()
|
||||
return
|
||||
fi
|
||||
|
||||
if [ ! -z "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then
|
||||
if [ -n "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
@ -568,15 +626,15 @@ yml_game_custom()
|
||||
rm -rf $GAME_RULE_FILE 2>/dev/null
|
||||
config_load "openclash"
|
||||
config_foreach yml_game_rule_get "game_config"
|
||||
if [ ! -z "$(grep "OpenClash-Game-Rules" "$RULE_FILE")" ]; then
|
||||
if [ -n "$(grep "OpenClash-Game-Rules" "$RULE_FILE")" ]; then
|
||||
sed -i '/OpenClash-Game-Rules/,/OpenClash-Game-Rules-End/d' "$RULE_FILE" 2>/dev/null
|
||||
fi
|
||||
sed -i '/OpenClash-Game-Rules/d' "$RULE_FILE" 2>/dev/null
|
||||
sed -i '/OpenClash-Game-Rules-End/d' "$RULE_FILE" 2>/dev/null
|
||||
[ "$set_rule_file" = 1 ] && {
|
||||
if [ ! -z "$(grep "^ \{0,\}- GEOIP" "$RULE_FILE")" ]; then
|
||||
if [ -n "$(grep "^ \{0,\}- GEOIP" "$RULE_FILE")" ]; then
|
||||
sed -i '1,/^ \{0,\}- GEOIP,/{/^ \{0,\}- GEOIP,/s/^ \{0,\}- GEOIP,/#===================== OpenClash-Game-Rules =====================#\n&/}' "$RULE_FILE" 2>/dev/null
|
||||
elif [ ! -z "$(grep "^ \{0,\}- MATCH," "$RULE_FILE")" ]; then
|
||||
elif [ -n "$(grep "^ \{0,\}- MATCH," "$RULE_FILE")" ]; then
|
||||
sed -i '1,/^ \{0,\}- MATCH,/{/^ \{0,\}- MATCH,/s/^ \{0,\}- MATCH,/#===================== OpenClash-Game-Rules =====================#\n&/}' "$RULE_FILE" 2>/dev/null
|
||||
else
|
||||
echo "#===================== OpenClash-Game-Rules =====================#" >> "$RULE_FILE" 2>/dev/null
|
||||
@ -586,25 +644,25 @@ sed -i '/OpenClash-Game-Rules-End/d' "$RULE_FILE" 2>/dev/null
|
||||
}
|
||||
|
||||
#合并文件
|
||||
cat "$CHANGE_FILE" "$DNS_FILE" "$PROXY_PROVIDER_FILE" "$PROXY_FILE" "$GROUP_FILE" "$RULE_FILE" > "$CONFIG_FILE" 2>/dev/null
|
||||
cat "$CHANGE_FILE" "$DNS_FILE" "$PROXY_PROVIDER_FILE" "$PROXY_FILE" "$GROUP_FILE" "$RULE_PROVIDER_FILE" "$SCRIPT_FILE" "$RULE_FILE" > "$CONFIG_FILE" 2>/dev/null
|
||||
|
||||
#处理游戏节点与策略组
|
||||
config_load "openclash"
|
||||
config_foreach yml_game_group_get "game_config"
|
||||
sed -i '/^ \{0,\}Proxy Group:/r/tmp/yaml_groups.yaml' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}proxy-groups:/r/tmp/yaml_groups.yaml' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}Proxy:/d' /tmp/yaml_servers.yaml 2>/dev/null
|
||||
sed -i '/^ \{0,\}proxy-provider:/d' /tmp/yaml_provider.yaml 2>/dev/null
|
||||
sed -i '/^ \{0,\}proxy-providers:/d' /tmp/yaml_provider.yaml 2>/dev/null
|
||||
if [ -z "$(grep "^ \{0,\}Proxy:" "$CONFIG_FILE" 2>/dev/null)" ] && [ -f "/tmp/yaml_servers.yaml" ]; then
|
||||
sed -i '/^ \{0,\}Proxy Group:/i\Proxy:' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}proxy-groups:/i\Proxy:' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}Proxy:/r/tmp/yaml_servers.yaml' "$CONFIG_FILE" 2>/dev/null
|
||||
elif [ -f "/tmp/yaml_servers.yaml" ]; then
|
||||
sed -i '/^ \{0,\}Proxy:/r/tmp/yaml_servers.yaml' "$CONFIG_FILE" 2>/dev/null
|
||||
fi
|
||||
if [ -z "$(grep "^ \{0,\}proxy-provider:" "$CONFIG_FILE" 2>/dev/null)" ] && [ -f "/tmp/yaml_provider.yaml" ]; then
|
||||
sed -i '/OpenClash-General-Settings/a\proxy-provider:' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}proxy-provider:/r/tmp/yaml_provider.yaml' "$CONFIG_FILE" 2>/dev/null
|
||||
if [ -z "$(grep "^ \{0,\}proxy-providers:" "$CONFIG_FILE" 2>/dev/null)" ] && [ -f "/tmp/yaml_provider.yaml" ]; then
|
||||
sed -i '/OpenClash-General-Settings/a\proxy-providers:' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}proxy-providers:/r/tmp/yaml_provider.yaml' "$CONFIG_FILE" 2>/dev/null
|
||||
elif [ -f "/tmp/yaml_servers.yaml" ]; then
|
||||
sed -i '/^ \{0,\}proxy-provider:r/tmp/yaml_provider.yaml' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}proxy-providers:r/tmp/yaml_provider.yaml' "$CONFIG_FILE" 2>/dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
@ -623,7 +681,7 @@ config_choose()
|
||||
{
|
||||
if [ -z "$CONFIG_FILE" ] || [ ! -f "$CONFIG_FILE" ]; then
|
||||
CONFIG_NAME=$(ls -lt /etc/openclash/config/ | grep -E '.yaml|.yml' | head -n 1 |awk '{print $9}')
|
||||
if [ ! -z "$CONFIG_NAME" ]; then
|
||||
if [ -n "$CONFIG_NAME" ]; then
|
||||
uci set openclash.config.config_path="/etc/openclash/config/$CONFIG_NAME"
|
||||
uci commit openclash
|
||||
CONFIG_FILE="/etc/openclash/config/$CONFIG_NAME"
|
||||
@ -650,6 +708,7 @@ CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null)
|
||||
do_run_mode()
|
||||
{
|
||||
en_mode=$(uci get openclash.config.en_mode 2>/dev/null)
|
||||
proxy_mode=$(uci get openclash.config.proxy_mode 2>/dev/null)
|
||||
|
||||
if [ ! -h "/etc/openclash/clash" ] && [ -s "/etc/openclash/clash" ] && [ ! -s "/etc/openclash/core/clash" ]; then
|
||||
mv "/etc/openclash/clash" "/etc/openclash/core/clash" 2>/dev/null
|
||||
@ -685,6 +744,11 @@ do_run_mode()
|
||||
core_type="Game"
|
||||
fi
|
||||
|
||||
if [ "$proxy_mode" = "Script" ] || [ -n "$(grep "^ \{0,\}rule-providers:" "$CONFIG_FILE" 2>/dev/null)" ]; then
|
||||
ln -s /etc/openclash/core/clash_tun /etc/openclash/clash 2>/dev/null
|
||||
core_type="Tun"
|
||||
fi
|
||||
|
||||
if [ ! -f "/etc/openclash/clash" ] && [ -f "/etc/openclash/core/clash" ]; then
|
||||
ln -s /etc/openclash/core/clash /etc/openclash/clash 2>/dev/null
|
||||
fi
|
||||
@ -732,11 +796,11 @@ EOF
|
||||
|
||||
#lan_ac
|
||||
if [ "$operation_mode" = "redir-host" ] && [ "$en_mode" = "redir-host" ]; then
|
||||
if [ "$lan_ac_mode" = "0" ] && [ ! -z "$(uci get openclash.config.lan_ac_black_ips 2>/dev/null)" ]; then
|
||||
if [ "$lan_ac_mode" = "0" ] && [ -n "$(uci get openclash.config.lan_ac_black_ips 2>/dev/null)" ]; then
|
||||
ipset create lan_ac_black_ips hash:net
|
||||
config_load "openclash"
|
||||
config_list_foreach "config" "lan_ac_black_ips" lan_ac "lan_ac_black_ips"
|
||||
elif [ "$lan_ac_mode" = "1" ] && [ ! -z "$(uci get openclash.config.lan_ac_white_ips 2>/dev/null)" ]; then
|
||||
elif [ "$lan_ac_mode" = "1" ] && [ -n "$(uci get openclash.config.lan_ac_white_ips 2>/dev/null)" ]; then
|
||||
ipset create lan_ac_white_ips hash:net
|
||||
config_load "openclash"
|
||||
config_list_foreach "config" "lan_ac_white_ips" lan_ac "lan_ac_white_ips"
|
||||
@ -754,7 +818,7 @@ fi
|
||||
ipset add localnetwork 240.0.0.0/4
|
||||
ipset add localnetwork 172.16.0.0/12
|
||||
|
||||
if [ ! -z "$wan_ip4" ]; then
|
||||
if [ -n "$wan_ip4" ]; then
|
||||
for wan_ip4s in $wan_ip4; do
|
||||
ipset add localnetwork "$wan_ip4s" 2>/dev/null
|
||||
done
|
||||
@ -795,7 +859,7 @@ if [ -z "$en_mode_tun" ]; then
|
||||
if [ "$ipv6_enable" -eq 1 ]; then
|
||||
#tcp
|
||||
ip6tables -t nat -N openclash
|
||||
if [ ! -z "$lan_ip6" ]; then
|
||||
if [ -n "$lan_ip6" ]; then
|
||||
for lan_ip6s in $lan_ip6; do
|
||||
ip6tables -t nat -A openclash -d "$lan_ip6s" -j RETURN 2>/dev/null
|
||||
done
|
||||
@ -806,7 +870,7 @@ if [ -z "$en_mode_tun" ]; then
|
||||
#udp
|
||||
#if [ "$enable_udp_proxy" -eq 1 ]; then
|
||||
# ip6tables -t mangle -N openclash
|
||||
# if [ ! -z "$lan_ip6" ]; then
|
||||
# if [ -n "$lan_ip6" ]; then
|
||||
# for lan_ip6s in $lan_ip6; do
|
||||
# if [ "$enable_udp_proxy" -eq 1 ]; then
|
||||
# ip6tables -t mangle -A openclash -d "$lan_ip6s" -j RETURN 2>/dev/null
|
||||
@ -816,7 +880,7 @@ if [ -z "$en_mode_tun" ]; then
|
||||
# ip6tables -t mangle -A openclash -p udp -j TPROXY --on-port "$proxy_port" --tproxy-mark "$PROXY_FWMARK"
|
||||
# ip6tables -t mangle -A PREROUTING -p udp -j openclash
|
||||
#fi
|
||||
fi
|
||||
fi 2>/dev/null
|
||||
else
|
||||
#TUN模式
|
||||
#启动TUN
|
||||
@ -826,7 +890,7 @@ else
|
||||
ip route replace default dev clash0 table "$PROXY_ROUTE_TABLE"
|
||||
elif [ "$en_mode_tun" = "1" ]; then
|
||||
TUN_WAIT=0
|
||||
while ( [ ! -z "$(pidof clash)" ] && [ -z "$(ip route list |grep utun)" ] && [ "$TUN_WAIT" -le 3 ] )
|
||||
while ( [ -n "$(pidof clash)" ] && [ -z "$(ip route list |grep utun)" ] && [ "$TUN_WAIT" -le 3 ] )
|
||||
do
|
||||
TUN_WAIT=$(expr "$TUN_WAIT" + 1)
|
||||
sleep 2
|
||||
@ -864,15 +928,6 @@ revert_firewall()
|
||||
|
||||
iptables -t nat -D PREROUTING -p tcp --dport 53 -j ACCEPT >/dev/null 2>&1
|
||||
|
||||
iptables -t mangle -F openclash >/dev/null 2>&1
|
||||
iptables -t mangle -X openclash >/dev/null 2>&1
|
||||
|
||||
iptables -t nat -F openclash >/dev/null 2>&1
|
||||
iptables -t nat -X openclash >/dev/null 2>&1
|
||||
|
||||
iptables -t nat -F openclash_output >/dev/null 2>&1
|
||||
iptables -t nat -X openclash_output >/dev/null 2>&1
|
||||
|
||||
out_lines=$(iptables -nvL OUTPUT -t nat |sed 1,2d |sed -n '/openclash/=' 2>/dev/null |sort -rn)
|
||||
for out_line in $out_lines; do
|
||||
iptables -t nat -D OUTPUT "$out_line" >/dev/null 2>&1
|
||||
@ -898,6 +953,12 @@ revert_firewall()
|
||||
#ip6tables -t mangle -D PREROUTING -p udp -j openclash >/dev/null 2>&1
|
||||
#ip6tables -t mangle -X openclash >/dev/null 2>&1
|
||||
|
||||
iptables -t nat -F openclash >/dev/null 2>&1
|
||||
iptables -t nat -X openclash >/dev/null 2>&1
|
||||
|
||||
iptables -t nat -F openclash_output >/dev/null 2>&1
|
||||
iptables -t nat -X openclash_output >/dev/null 2>&1
|
||||
|
||||
ip6tables -t nat -F openclash >/dev/null 2>&1
|
||||
ip6tables -t nat -D PREROUTING -p tcp -j openclash >/dev/null 2>&1
|
||||
ip6tables -t nat -X openclash >/dev/null 2>&1
|
||||
@ -915,6 +976,7 @@ revert_firewall()
|
||||
iptables -t mangle -D PREROUTING -m set ! --match-set localnetwork dst -j MARK --set-mark "$PROXY_FWMARK" >/dev/null 2>&1
|
||||
iptables -t mangle -F openclash >/dev/null 2>&1
|
||||
iptables -t mangle -X openclash >/dev/null 2>&1
|
||||
|
||||
#ip6tables -t mangle -D PREROUTING -j MARK --set-mark "$PROXY_FWMARK" >/dev/null 2>&1
|
||||
|
||||
ipset destroy localnetwork >/dev/null 2>&1
|
||||
@ -939,12 +1001,12 @@ get_config()
|
||||
lan_ip6=$(ifconfig | grep 'inet6 addr' | awk '{print $3}' 2>/dev/null)
|
||||
disable_masq_cache=$(uci get openclash.config.disable_masq_cache 2>/dev/null)
|
||||
log_level=$(uci get openclash.config.log_level 2>/dev/null)
|
||||
proxy_mode=$(uci get openclash.config.proxy_mode 2>/dev/null)
|
||||
intranet_allowed=$(uci get openclash.config.intranet_allowed 2>/dev/null)
|
||||
enable_udp_proxy=$(uci get openclash.config.enable_udp_proxy 2>/dev/null)
|
||||
operation_mode=$(uci get openclash.config.operation_mode 2>/dev/null)
|
||||
lan_ac_mode=$(uci get openclash.config.lan_ac_mode 2>/dev/null)
|
||||
enable_rule_proxy=$(uci get openclash.config.enable_rule_proxy 2>/dev/null)
|
||||
stack_type=$(uci get openclash.config.stack_type 2>/dev/null)
|
||||
}
|
||||
|
||||
start()
|
||||
@ -961,6 +1023,8 @@ if [ "$enable" -eq 1 ] && [ -f "$CONFIG_FILE" ]; then
|
||||
#检查是否存在核心文件
|
||||
do_run_mode
|
||||
[ ! -f "$CLASH" ] && {
|
||||
kill_clash
|
||||
stop
|
||||
echo "内核文件不存在,开始下载..." >$START_LOG
|
||||
nohup /usr/share/openclash/openclash_core.sh "$core_type" &
|
||||
exit 0
|
||||
@ -970,14 +1034,15 @@ if [ "$enable" -eq 1 ] && [ -f "$CONFIG_FILE" ]; then
|
||||
get_config
|
||||
echo "第二步: 配置文件检查..." >$START_LOG
|
||||
yml_check "$en_mode" "$enable_custom_dns" "$CONFIG_FILE" "$BACKUP_FILE" "$START_BACKUP"
|
||||
grep "^ \{0,\}Proxy Group:" "$CONFIG_FILE" >/dev/null 2>&1 && grep "^ \{0,\}Rule:" "$CONFIG_FILE" >/dev/null 2>&1
|
||||
grep "^ \{0,\}proxy-groups:" "$CONFIG_FILE" >/dev/null 2>&1 && grep "^ \{0,\}rules:" "$CONFIG_FILE" >/dev/null 2>&1
|
||||
if [ "$?" -eq "0" ]; then
|
||||
grep "^ \{0,\}Proxy:" "$CONFIG_FILE" >/dev/null 2>&1 || grep "^ \{0,\}proxy-provider:" "$CONFIG_FILE" >/dev/null 2>&1
|
||||
grep "^ \{0,\}Proxy:" "$CONFIG_FILE" >/dev/null 2>&1 || grep "^ \{0,\}proxy-providers:" "$CONFIG_FILE" >/dev/null 2>&1
|
||||
if [ "$?" -ne "0" ]; then
|
||||
nohup "$CLASH" -d "$CLASH_CONFIG" -f "$CONFIG_FILE" >> $LOG_FILE 2>&1 &
|
||||
kill_clash
|
||||
stop
|
||||
echo "错误: 配置文件完整性检查不通过,已自动还原配置文件,请根据日志信息对照模板格式检查修改配置文件!" >$START_LOG
|
||||
mv "$START_BACKUP" "$CONFIG_FILE"
|
||||
stop
|
||||
sleep 5
|
||||
echo "" >$START_LOG
|
||||
else
|
||||
@ -987,13 +1052,16 @@ if [ "$enable" -eq 1 ] && [ -f "$CONFIG_FILE" ]; then
|
||||
yml_auth_custom "$CONFIG_FILE"
|
||||
yml_cut "$CHANGE_FILE" "$RULE_FILE" "$DNS_FILE" "$CONFIG_FILE" "$PROXY_FILE" "$PROXY_PROVIDER_FILE" "$GROUP_FILE"
|
||||
yml_dns_custom "$enable_custom_dns" "$DNS_FILE"
|
||||
yml_provider_path "$PROXY_PROVIDER_FILE"
|
||||
sh /usr/share/openclash/yml_change.sh >/dev/null 2>&1 "$LOGTIME" "$en_mode" "$enable_custom_dns" "$da_password" "$cn_port" "$proxy_port" "$CHANGE_FILE" "$ipv6_enable" "$http_port" "$socks_port" "$lan_ip" "$log_level" "$proxy_mode" "$intranet_allowed" "$en_mode_tun" &
|
||||
yml_provider_path "$PROXY_PROVIDER_FILE" "proxy_provider"
|
||||
yml_provider_path "$RULE_PROVIDER_FILE" "rule_provider"
|
||||
sh /usr/share/openclash/yml_change.sh >/dev/null 2>&1 "$LOGTIME" "$en_mode" "$enable_custom_dns" "$da_password" "$cn_port" "$proxy_port" "$CHANGE_FILE" "$ipv6_enable" "$http_port" "$socks_port" "$lan_ip" "$log_level" "$proxy_mode" "$intranet_allowed" "$en_mode_tun" "$stack_type" &
|
||||
sh /usr/share/openclash/yml_rules_change.sh >/dev/null 2>&1 "$LOGTIME" "$rule_source" "$enable_custom_clash_rules" "$RULE_FILE" "$set_rule_file" "$en_mode" "$enable_rule_proxy" "$BACKUP_FILE" &
|
||||
wait
|
||||
yml_game_custom
|
||||
echo "第四步: DNS设置检查..." >$START_LOG
|
||||
if [ ! -z "$(sed -n '/^ \{0,\}nameserver:/{n;p}' "$CONFIG_FILE" |grep '^ \{0,\}fallback:')" ] || [ ! -z "$(sed -n '/^ \{0,\}nameserver:/{n;p}' "$CONFIG_FILE" |grep 'OpenClash-General')" ]; then
|
||||
if [ -n "$(sed -n '/^ \{0,\}nameserver:/{n;p}' "$CONFIG_FILE" |grep '^ \{0,\}fallback:')" ] || [ -n "$(sed -n '/^ \{0,\}nameserver:/{n;p}' "$CONFIG_FILE" |grep 'OpenClash-General')" ]; then
|
||||
kill_clash
|
||||
stop
|
||||
echo "错误: 配置文件DNS选项下的Nameserver必须设置服务器,已自动还原配置文件,请重新设置!" >$START_LOG
|
||||
echo "${LOGTIME} Nameserver Must Be Set, Please Change Your Configrations In Config.yaml" >>$LOG_FILE
|
||||
mv "$START_BACKUP" "$CONFIG_FILE"
|
||||
@ -1001,20 +1069,22 @@ if [ "$enable" -eq 1 ] && [ -f "$CONFIG_FILE" ]; then
|
||||
echo "" >$START_LOG
|
||||
else
|
||||
echo "第五步: 启动主程序..." >$START_LOG
|
||||
sed -i "s/^ \{0,\}Proxy:/proxies:/g" "$CONFIG_FILE" 2>/dev/null
|
||||
ulimit -SHn 65535 2>/dev/null
|
||||
config_reload=$(uci get openclash.config.config_reload 2>/dev/null)
|
||||
if [ -n "$(pidof clash)" ] && [ "$en_mode_tun" != "1" ] && [ "$config_reload" != "0" ]; then
|
||||
if [ -n "$(pidof clash)" ] && [ "$core_type" != "Tun" ] && [ "$config_reload" != "0" ]; then
|
||||
curl -s --connect-timeout 5 -m 5 -H 'Content-Type: application/json' -H "Authorization: Bearer ${da_password}" -XPUT http://"$lan_ip":"$cn_port"/configs -d "{\"path\": \"$CONFIG_FILE\"}" 2>/dev/null
|
||||
else
|
||||
kill -9 "$(pidof clash|sed 's/$//g')" 2>/dev/null
|
||||
kill_clash
|
||||
nohup "$CLASH" -d "$CLASH_CONFIG" -f "$CONFIG_FILE" >> $LOG_FILE 2>&1 &
|
||||
fi
|
||||
uci set openclash.config.config_reload=1
|
||||
uci commit openclash
|
||||
|
||||
#检测proxy_provider配置文件状态
|
||||
echo "第六步: 等待主程序下载代理集..." >$START_LOG
|
||||
yml_proxy_provider_check "$PROXY_PROVIDER_FILE"
|
||||
echo "第六步: 等待主程序下载外部文件..." >$START_LOG
|
||||
yml_provider_check "$PROXY_PROVIDER_FILE" "proxy_provider"
|
||||
yml_provider_check "$RULE_PROVIDER_FILE" "rule_provider"
|
||||
|
||||
echo "第七步: 设置控制面板..." >$START_LOG
|
||||
ln -s /usr/share/openclash/yacd /www/luci-static/openclash 2>/dev/null
|
||||
@ -1046,8 +1116,8 @@ if [ "$enable" -eq 1 ] && [ -f "$CONFIG_FILE" ]; then
|
||||
echo "错误: OpenClash 启动失败,尝试还原第三方规则并重新启动 Clash 主程序..." >$START_LOG
|
||||
echo "${LOGTIME} OpenClash Can Not Start, Try Use Backup Rules Start Again" >> $LOG_FILE
|
||||
mv "$START_BACKUP" /etc/openclash/configrules.bak
|
||||
sed -i -n '/^Rule:/,$p' /etc/openclash/configrules.bak
|
||||
sed -i '/^Rule:/,$d' "$CONFIG_FILE"
|
||||
sed -i -n '/^rules:/,$p' /etc/openclash/configrules.bak
|
||||
sed -i '/^rules:/,$d' "$CONFIG_FILE"
|
||||
cat /etc/openclash/configrules.bak >> "$CONFIG_FILE"
|
||||
rm -rf /etc/openclash/configrules.bak
|
||||
nohup "$CLASH" -d "$CLASH_CONFIG" -f "$CONFIG_FILE" >> $LOG_FILE 2>&1 &
|
||||
@ -1070,27 +1140,30 @@ if [ "$enable" -eq 1 ] && [ -f "$CONFIG_FILE" ]; then
|
||||
echo "OpenClash Already Start"
|
||||
echo "" >$START_LOG
|
||||
else
|
||||
kill_clash
|
||||
stop
|
||||
echo "错误: OpenClash 启动失败,请到日志页面查看详细错误信息!" >$START_LOG
|
||||
echo "${LOGTIME} OpenClash Can Not Start, Please Check The Error Info And Try Again" >> $LOG_FILE
|
||||
sleep 10
|
||||
echo "" >$START_LOG
|
||||
stop && echo "" >$START_LOG
|
||||
fi
|
||||
else
|
||||
kill_clash
|
||||
stop
|
||||
echo "错误: OpenClash 启动失败,请到日志页面查看详细错误信息!" >$START_LOG
|
||||
echo "${LOGTIME} OpenClash Can Not Start, Please Check The Error Info And Try Again" >> $LOG_FILE
|
||||
sleep 10
|
||||
echo "" >$START_LOG
|
||||
stop && echo "" >$START_LOG
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
else
|
||||
nohup "$CLASH" -d "$CLASH_CONFIG" -f "$CONFIG_FILE" >> $LOG_FILE 2>&1 &
|
||||
kill_clash
|
||||
stop
|
||||
echo "错误: 配置文件完整性检查不通过,已自动还原配置文件,请根据日志信息对照模板格式检查修改配置文件!" >$START_LOG
|
||||
mv "$START_BACKUP" "$CONFIG_FILE"
|
||||
stop
|
||||
sleep 5
|
||||
echo "" >$START_LOG
|
||||
fi
|
||||
@ -1098,11 +1171,15 @@ if [ "$enable" -eq 1 ] && [ -f "$CONFIG_FILE" ]; then
|
||||
rm -rf /tmp/yaml_* 2>/dev/null
|
||||
else
|
||||
subscribe_url=$(uci get openclash.config.subscribe_url 2>/dev/null)
|
||||
if [ ! -f "$CONFIG_FILE" ] && [ ! -z "$subscribe_url" ]; then
|
||||
if [ ! -f "$CONFIG_FILE" ] && [ -n "$subscribe_url" ]; then
|
||||
kill_clash
|
||||
stop
|
||||
echo "OpenClash 配置文件不存在,开始下载..." >$START_LOG
|
||||
nohup /usr/share/openclash/openclash.sh &
|
||||
exit 0
|
||||
elif [ ! -f "$CONFIG_FILE" ]; then
|
||||
kill_clash
|
||||
stop
|
||||
echo "错误: OpenClash 缺少配置文件,请上传或更新配置文件!" >$START_LOG
|
||||
echo "${LOGTIME} Config Not Found" >> $LOG_FILE
|
||||
sleep 5
|
||||
@ -1121,9 +1198,8 @@ stop()
|
||||
|
||||
echo "OpenClash 开始关闭..." >$START_LOG
|
||||
echo "第一步: 备份当前节点状态..." >$START_LOG
|
||||
/usr/share/openclash/openclash_history_get.sh &
|
||||
wait
|
||||
|
||||
/usr/share/openclash/openclash_history_get.sh 2>/dev/null
|
||||
|
||||
echo "第二步: 删除 OpenClash 防火墙规则..." >$START_LOG
|
||||
revert_firewall
|
||||
|
||||
@ -1135,7 +1211,7 @@ stop()
|
||||
|
||||
echo "第四步: 关闭 Clash 主程序..." >$START_LOG
|
||||
if [ "$enable" -eq 0 ]; then
|
||||
kill -9 "$(pidof clash|sed 's/$//g')" 2>/dev/null
|
||||
kill_clash
|
||||
fi
|
||||
|
||||
echo "第五步: 重启 Dnsmasq 程序..." >$START_LOG
|
||||
@ -1157,7 +1233,8 @@ stop()
|
||||
echo "OpenClash 关闭成功!" >$START_LOG
|
||||
sleep 5
|
||||
fi
|
||||
|
||||
|
||||
rm -rf /tmp/yaml_* 2>/dev/null
|
||||
rm -rf $START_LOG 2>/dev/null
|
||||
del_cron
|
||||
echo "OpenClash Already Stop"
|
||||
|
||||
Binary file not shown.
@ -72,7 +72,7 @@ dns: # 如订阅配置无包括此项的所有DNS设置,OpenClash将自动添
|
||||
# 以上设置您可直接覆盖到配置文件,无需更改
|
||||
# Openclash 不会对下方服务器设置进行任何更改,请确保设置正确
|
||||
|
||||
#proxy-provider: # 代理集设置,此部分与Proxy两者不能同时删除
|
||||
#proxy-providers: # 代理集设置,此部分与Proxy两者不能同时删除
|
||||
# pro:
|
||||
# type: http
|
||||
# path: ./proxy_provider/pro.yaml
|
||||
@ -90,7 +90,7 @@ dns: # 如订阅配置无包括此项的所有DNS设置,OpenClash将自动添
|
||||
# url: http://www.gstatic.com/generate_204
|
||||
# interval: 300
|
||||
|
||||
Proxy: # 节点设置,此部分与proxy-provider两者不能同时删除
|
||||
proxies: # 节点设置,此部分与proxy-provider两者不能同时删除
|
||||
|
||||
# shadowsocks
|
||||
# The supported ciphers(encrypt methods):
|
||||
@ -215,7 +215,7 @@ Proxy: # 节点设置,此部分与proxy-provider两者不能同时删除
|
||||
|
||||
# Openclash 不会对下方策略组设置进行任何更改,请确保设置正确
|
||||
|
||||
Proxy Group: # 此参数必须保留,不能删除
|
||||
proxy-groups: # 此参数必须保留,不能删除
|
||||
|
||||
# relay chains the proxies. proxies shall not contain a proxy-group. No UDP support.
|
||||
# Traffic: clash <-> http <-> vmess <-> ss1 <-> ss2 <-> Internet
|
||||
@ -275,7 +275,30 @@ Proxy Group: # 此参数必须保留,不能删除
|
||||
- Proxy
|
||||
- DIRECT
|
||||
|
||||
Rule: # 此参数必须保留,不能删除
|
||||
# https://lancellc.gitbook.io/clash/clash-config-file/rule-provider
|
||||
#rule-providers:
|
||||
# name: # name of the provider
|
||||
# type: http # type of the provider, it can be a HTTP or a File
|
||||
# behavior: ipcidr # or domain
|
||||
# path: # where is the file, ./ relative to clash home
|
||||
# url: # only available when type is HTTP, where to download a file. You don't need to create a new file in local space.
|
||||
# interval: # auto-update interval, only available when type is HTTP
|
||||
|
||||
# https://lancellc.gitbook.io/clash/clash-config-file/script
|
||||
#script:
|
||||
# code: |
|
||||
# def main(ctx, metadata):
|
||||
# ip = metadata["dst_ip"] = ctx.resolve_ip(metadata["host"])
|
||||
# if ip == "":
|
||||
# return "DIRECT"
|
||||
#
|
||||
# code = ctx.geoip(ip)
|
||||
# if code == "LAN" or code == "CN":
|
||||
# return "DIRECT"
|
||||
#
|
||||
# return "Proxy" # default policy for requests which are not matched by any other script
|
||||
|
||||
rules: # 此参数必须保留,不能删除
|
||||
# 如果您将一直使用第三方规则,下方可以留空。
|
||||
- DOMAIN-SUFFIX,google.com,auto
|
||||
- DOMAIN-KEYWORD,google,auto
|
||||
@ -287,6 +310,8 @@ Rule: # 此参数必须保留,不能删除
|
||||
- GEOIP,CN,DIRECT
|
||||
- DST-PORT,80,DIRECT
|
||||
- SRC-PORT,7777,DIRECT
|
||||
# or use rule with provider
|
||||
- RULE-SET,name,Proxy
|
||||
# FINAL would remove after prerelease
|
||||
# you also can use `FINAL,Proxy` or `FINAL,,Proxy` now
|
||||
- MATCH,auto
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@ -142,11 +142,11 @@ end
|
||||
end
|
||||
|
||||
local function corelv()
|
||||
local new = luci.sys.call(string.format("sh /usr/share/openclash/clash_version.sh"))
|
||||
luci.sys.call("sh /usr/share/openclash/clash_version.sh")
|
||||
local core_lv = luci.sys.exec("sed -n 1p /tmp/clash_last_version 2>/dev/null")
|
||||
local core_tun_lv = luci.sys.exec("sed -n 2p /tmp/clash_last_version 2>/dev/null")
|
||||
local core_game_lv = luci.sys.exec("sed -n 3p /tmp/clash_last_version 2>/dev/null")
|
||||
return core_lv .. "," .. core_tun_lv .. "," .. core_game_lv .. "," .. new
|
||||
return core_lv .. "," .. core_tun_lv .. "," .. core_game_lv
|
||||
end
|
||||
|
||||
local function opcv()
|
||||
|
||||
@ -90,8 +90,10 @@ clash = "/etc/openclash/clash"
|
||||
dir = "/etc/openclash/config/"
|
||||
bakck_dir="/etc/openclash/backup"
|
||||
proxy_pro_dir="/etc/openclash/proxy_provider/"
|
||||
rule_pro_dir="/etc/openclash/rule_provider/"
|
||||
create_bakck_dir=fs.mkdir(bakck_dir)
|
||||
create_proxy_pro_dir=fs.mkdir(proxy_pro_dir)
|
||||
create_rule_pro_dir=fs.mkdir(rule_pro_dir)
|
||||
|
||||
|
||||
HTTP.setfilehandler(
|
||||
@ -104,6 +106,8 @@ HTTP.setfilehandler(
|
||||
if meta and chunk then fd = nixio.open(dir .. meta.file, "w") end
|
||||
elseif fp == "proxy-provider" then
|
||||
if meta and chunk then fd = nixio.open(proxy_pro_dir .. meta.file, "w") end
|
||||
elseif fp == "rule-provider" then
|
||||
if meta and chunk then fd = nixio.open(rule_pro_dir .. meta.file, "w") end
|
||||
end
|
||||
|
||||
if not fd then
|
||||
@ -117,21 +121,23 @@ HTTP.setfilehandler(
|
||||
if eof and fd then
|
||||
fd:close()
|
||||
fd = nil
|
||||
if IsYamlFile(meta.file) and fp ~= "proxy-provider" then
|
||||
if IsYamlFile(meta.file) and fp == "config" then
|
||||
local yamlbackup="/etc/openclash/backup/" .. meta.file
|
||||
local c=fs.copy(dir .. meta.file,yamlbackup)
|
||||
end
|
||||
if IsYmlFile(meta.file) and fp ~= "proxy-provider" then
|
||||
if IsYmlFile(meta.file) and fp == "config" then
|
||||
local ymlname=string.lower(string.sub(meta.file,0,-5))
|
||||
local ymlbackup="/etc/openclash/backup/".. ymlname .. ".yaml"
|
||||
local c=fs.rename(dir .. meta.file,"/etc/openclash/config/".. ymlname .. ".yaml")
|
||||
local c=fs.copy("/etc/openclash/config/".. ymlname .. ".yaml",ymlbackup)
|
||||
end
|
||||
if fp ~= "proxy-provider" then
|
||||
if fp == "config" then
|
||||
um.value = translate("File saved to") .. ' "/etc/openclash/config/"'
|
||||
CHIF = "1"
|
||||
else
|
||||
elseif fp == "proxy-provider" then
|
||||
um.value = translate("File saved to") .. ' "/etc/openclash/proxy_provider/"'
|
||||
elseif fp == "rule-provider" then
|
||||
um.value = translate("File saved to") .. ' "/etc/openclash/rule_provider/"'
|
||||
end
|
||||
fs.unlink("/tmp/Proxy_Group")
|
||||
end
|
||||
@ -251,6 +257,7 @@ end
|
||||
btnrm.write=function(a,t)
|
||||
fs.unlink("/tmp/Proxy_Group")
|
||||
fs.unlink("/etc/openclash/backup/"..luci.openclash.basename(e[t].name))
|
||||
fs.unlink("/etc/openclash/history/"..luci.openclash.basename(e[t].name))
|
||||
local a=fs.unlink("/etc/openclash/config/"..luci.openclash.basename(e[t].name))
|
||||
if a then table.remove(e,t)end
|
||||
return a
|
||||
|
||||
@ -65,11 +65,20 @@ o:value("0", translate("Disable"))
|
||||
o:value("1", translate("Enable"))
|
||||
o.default = "1"
|
||||
|
||||
o = s:taboption("op_mode", ListValue, "stack_type", font_red..bold_on..translate("Select Stack Type")..bold_off..font_off)
|
||||
o.description = translate("Select Stack Type For Tun Mode, According To The Running Speed on Your Machine")
|
||||
o:depends("en_mode", "redir-host-tun")
|
||||
o:depends("en_mode", "fake-ip-tun")
|
||||
o:value("system", translate("System "))
|
||||
o:value("gvisor", translate("Gvisor"))
|
||||
o.default = "system"
|
||||
|
||||
o = s:taboption("op_mode", ListValue, "proxy_mode", font_red..bold_on..translate("Proxy Mode")..bold_off..font_off)
|
||||
o.description = translate("Select Proxy Mode")
|
||||
o:value("Rule", translate("Rule Proxy Mode"))
|
||||
o:value("Global", translate("Global Proxy Mode"))
|
||||
o:value("Direct", translate("Direct Proxy Mode"))
|
||||
o:value("Script", translate("Script Proxy Mode (Tun Core Only)"))
|
||||
o.default = "Rule"
|
||||
|
||||
o = s:taboption("op_mode", Button, translate("Switch Operation Mode"))
|
||||
@ -156,7 +165,7 @@ o:value("1", translate("Enable"))
|
||||
o.default = 0
|
||||
|
||||
o = s:taboption("dns", ListValue, "ipv6_enable", translate("Enable ipv6 Resolve"))
|
||||
o.description = font_red..bold_on..translate("Force Enable to Resolve ipv6 DNS Requests")..bold_off..font_off
|
||||
o.description = font_red..bold_on..translate("Enable Clash to Resolve ipv6 DNS Requests")..bold_off..font_off
|
||||
o:value("0", translate("Disable"))
|
||||
o:value("1", translate("Enable"))
|
||||
o:depends("en_mode", "redir-host")
|
||||
|
||||
@ -137,7 +137,7 @@
|
||||
|
||||
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "currentversion")%>', status.currentversion, function(x, status) {
|
||||
if ( x && x.status == 200 ) {
|
||||
clashversion.innerHTML = '<img id="currenntver" src="'+status.currentversion+'" alt="currentversion" width="181px" onload="return clashversion_check()" onclick="return go_update()">';
|
||||
clashversion.innerHTML = '<img id="currenntver" src="'+status.currentversion+'" alt="currentversion" width="200px" onload="return clashversion_check()" onclick="return go_update()">';
|
||||
}
|
||||
});
|
||||
|
||||
@ -157,7 +157,7 @@
|
||||
{
|
||||
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "currentversion")%>', status.currentversion, function(x, status) {
|
||||
if ( x && x.status == 200 ) {
|
||||
clashversion.innerHTML = '<img id="currenntver" src="'+status.currentversion+'" alt="currentversion" width="181px" onclick="return go_update()">';
|
||||
clashversion.innerHTML = '<img id="currenntver" src="'+status.currentversion+'" alt="currentversion" width="200px" onclick="return go_update()">';
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -128,26 +128,28 @@
|
||||
var corelvis = arr_core[0];
|
||||
var coretunlvis = arr_core[1];
|
||||
var coregamelvis = arr_core[2];
|
||||
var new_ch = arr_core[3];
|
||||
if ( new_ch == "2" || new_ch == "4" ) {
|
||||
if (corelvis != status.corecv && corelvis != "" && corelvis != "\n") {
|
||||
core_lv.innerHTML = "<b><font color=green>"+corelvis+"<%:<New>%></font></b>";
|
||||
}
|
||||
else if (corelvis != "" && corelvis != "\n" ) {
|
||||
else if (corelvis != "" && corelvis != "\n" && corelvis == status.corecv) {
|
||||
core_lv.innerHTML = "<b><font color=green>"+corelvis+"</font></b>";
|
||||
}
|
||||
else {
|
||||
core_lv.innerHTML = "<b><font color=red><%:Unknown%></font></b>";
|
||||
}
|
||||
if ( new_ch == "3" || new_ch == "4" ) {
|
||||
if (coretunlvis != status.coretuncv && coretunlvis != "" && coretunlvis != "\n") {
|
||||
core_tun_lv.innerHTML = "<b><font color=green>"+coretunlvis+"<%:<New>%></font></b>";
|
||||
}
|
||||
else if (coretunlvis != "" && coretunlvis != "\n" ) {
|
||||
else if (coretunlvis != "" && coretunlvis != "\n" && coretunlvis == status.coretuncv) {
|
||||
core_tun_lv.innerHTML = "<b><font color=green>"+coretunlvis+"</font></b>";
|
||||
}
|
||||
else {
|
||||
core_tun_lv.innerHTML = "<b><font color=red><%:Unknown%></font></b>";
|
||||
}
|
||||
if (coregamelvis != "" && coregamelvis != "\n" ) {
|
||||
if (coregamelvis != status.coregamecv && coregamelvis != "" && coregamelvis != "\n") {
|
||||
core_game_lv.innerHTML = "<b><font color=green>"+coregamelvis+"<%:<New>%></font></b>";
|
||||
}
|
||||
else if (coregamelvis != "" && coregamelvis != "\n" && coregamelvis == status.coregamecv) {
|
||||
core_game_lv.innerHTML = "<b><font color=green>"+coregamelvis+"</font></b>";
|
||||
}
|
||||
else {
|
||||
@ -259,7 +261,7 @@
|
||||
var arr_core = corelv.split(",");
|
||||
var coretunlvis = arr_core[1];
|
||||
if ( status.corever != "0\n" && coretunlvis != "\n" && coretunlvis != "" ) {
|
||||
url3='https://github.com/Dreamacro/clash/releases/download/TUN/clash-'+status.corever+'-'+coretunlvis+'.gz';
|
||||
url3='https://github.com/vernesong/OpenClash/releases/download/TUN-Premium/clash-'+status.corever+'-'+coretunlvis+'.gz';
|
||||
winOpen(url3);
|
||||
}
|
||||
else if ( status.corever == "0\n" ) {
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
<select name="file_type" style="width:auto">
|
||||
<option value="config" selected="selected"><%:Config File%></option>
|
||||
<option value="proxy-provider"><%:Proxy Provider File%></option>
|
||||
<option value="rule-provider"><%:Rule Provider File%></option>
|
||||
</select>
|
||||
<input class="cbi-input-file" style="width: 30%" type="file" id="ulfile" name="ulfile" />
|
||||
<input type="submit" class="cbi-button cbi-input-reload" name="upload" value="<%:Upload%>" />
|
||||
|
||||
@ -6,10 +6,6 @@ status=$(ps|grep -c /usr/share/openclash/clash_version.sh)
|
||||
|
||||
CKTIME=$(date "+%Y-%m-%d-%H")
|
||||
LAST_OPVER="/tmp/clash_last_version"
|
||||
LAST_VER=$(sed -n 1p "$LAST_OPVER" 2>/dev/null |awk -F '-' '{print $1$2}' 2>/dev/null |awk -F 'v' '{print $2}' 2>/dev/null |awk -F '.' '{print $1"."$2$3}' 2>/dev/null)
|
||||
CLASH_VER=$(/etc/openclash/core/clash -v 2>/dev/null |awk -F ' ' '{print $2}' 2>/dev/null |awk -F '-' '{print $1$2}' 2>/dev/null |awk -F 'v' '{print $2}' 2>/dev/null |awk -F '.' '{print $1"."$2$3}' 2>/dev/null)
|
||||
LAST_TUN_VER=$(sed -n 2p "$LAST_OPVER" 2>/dev/null |awk -F '-' '{print $1$2}' 2>/dev/null |awk -F 'v' '{print $2}' 2>/dev/null |awk -F '.' '{print $1"."$2$3}' 2>/dev/null)
|
||||
CLASH_TUN_VER=$(/etc/openclash/core/clash_tun -v 2>/dev/null |awk -F ' ' '{print $2}' 2>/dev/null |awk -F '-' '{print $1$2}' 2>/dev/null |awk -F 'v' '{print $2}' 2>/dev/null |awk -F '.' '{print $1"."$2$3}' 2>/dev/null)
|
||||
HTTP_PORT=$(uci get openclash.config.http_port 2>/dev/null)
|
||||
PROXY_ADDR=$(uci get network.lan.ipaddr 2>/dev/null |awk -F '/' '{print $1}' 2>/dev/null)
|
||||
|
||||
@ -25,18 +21,8 @@ if [ "$CKTIME" != "$(grep "CheckTime" $LAST_OPVER 2>/dev/null |awk -F ':' '{prin
|
||||
curl -sL --connect-timeout 10 --retry 2 "$VERSION_URL" -o $LAST_OPVER >/dev/null 2>&1
|
||||
fi
|
||||
if [ "$?" -eq "0" ] && [ -s "$LAST_OPVER" ]; then
|
||||
LAST_VER=$(sed -n 1p "$LAST_OPVER" 2>/dev/null |awk -F '-' '{print $1$2}' 2>/dev/null |awk -F 'v' '{print $2}' 2>/dev/null |awk -F '.' '{print $1"."$2$3}' 2>/dev/null)
|
||||
LAST_TUN_VER=$(sed -n 2p "$LAST_OPVER" 2>/dev/null |awk -F '-' '{print $1$2}' 2>/dev/null |awk -F 'v' '{print $2}' 2>/dev/null |awk -F '.' '{print $1"."$2$3}' 2>/dev/null)
|
||||
echo "CheckTime:$CKTIME" >>$LAST_OPVER
|
||||
else
|
||||
rm -rf $LAST_OPVER
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$(expr "$LAST_VER" \> "$CLASH_VER")" -eq 1 ] && [ "$(expr "$LAST_TUN_VER" \> "$CLASH_TUN_VER")" -eq 1 ]; then
|
||||
return 4
|
||||
elif [ "$(expr "$LAST_VER" \> "$CLASH_VER")" -eq 1 ]; then
|
||||
return 2
|
||||
elif [ "$(expr "$LAST_TUN_VER" \> "$CLASH_TUN_VER")" -eq 1 ]; then
|
||||
return 3
|
||||
fi 2>/dev/null
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
#!/bin/bash /etc/rc.common
|
||||
status=$(ps|grep -c /usr/share/openclash/openclash.sh)
|
||||
[ "$status" -gt "3" ] && exit 0
|
||||
status=$(ps|grep -c /etc/init.d/openclash)
|
||||
[ "$status" -gt "1" ] && sleep 5
|
||||
|
||||
START_LOG="/tmp/openclash_start.log"
|
||||
LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")
|
||||
@ -203,9 +205,9 @@ sub_info_get()
|
||||
|
||||
if [ "$?" -eq 0 ] && [ -s "$CFG_FILE" ]; then
|
||||
config_encode
|
||||
grep "^ \{0,\}Proxy Group:" "$CFG_FILE" >/dev/null 2>&1 && grep "^ \{0,\}Rule:" "$CFG_FILE" >/dev/null 2>&1
|
||||
grep "^ \{0,\}proxy-groups:" "$CFG_FILE" >/dev/null 2>&1 && grep "^ \{0,\}rules:" "$CFG_FILE" >/dev/null 2>&1
|
||||
if [ "$?" -eq 0 ]; then
|
||||
grep "^ \{0,\}Proxy:" "$CFG_FILE" >/dev/null 2>&1 || grep "^ \{0,\}proxy-provider:" "$CFG_FILE" >/dev/null 2>&1
|
||||
grep "^ \{0,\}Proxy:" "$CFG_FILE" >/dev/null 2>&1 || grep "^ \{0,\}proxy-providers:" "$CFG_FILE" >/dev/null 2>&1
|
||||
if [ "$?" -eq 0 ]; then
|
||||
config_su_check
|
||||
else
|
||||
|
||||
@ -50,7 +50,7 @@ if [ "$CORE_CV" != "$CORE_LV" ] || [ -z "$CORE_CV" ]; then
|
||||
case $CORE_TYPE in
|
||||
"Tun")
|
||||
echo "正在下载【Tun】版本内核,如下载失败请尝试手动下载并上传..." >$START_LOG
|
||||
curl -sL -m 30 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT -U "$PROXY_AUTH" https://github.com/Dreamacro/clash/releases/download/TUN/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash.gz >/dev/null 2>&1
|
||||
curl -sL -m 30 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT -U "$PROXY_AUTH" https://github.com/vernesong/OpenClash/releases/download/TUN-Premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash.gz >/dev/null 2>&1
|
||||
;;
|
||||
"Game")
|
||||
echo "正在下载【Game】版本内核,如下载失败请尝试手动下载并上传..." >$START_LOG
|
||||
|
||||
@ -262,10 +262,10 @@ if [ -n "$(grep OpenClash-General-Settings "$CONFIG_FILE")" ]; then
|
||||
else
|
||||
/usr/share/openclash/yml_field_name_ch.sh "$CONFIG_FILE" 2>/dev/null
|
||||
proxy_len=$(sed -n '/^Proxy:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
provider_len=$(sed -n '/^proxy-provider:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
group_len=$(sed -n '/^Proxy Group:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
provider_len=$(sed -n '/^proxy-providers:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
group_len=$(sed -n '/^proxy-groups:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
dns_len=$(sed -n '/^dns:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
rule_len=$(sed -n '/^Rule:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
rule_len=$(sed -n '/^rules:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
if [ "$dns_len" -ge "$proxy_len" ] || [ "$dns_len" -ge "$rule_len" ] || [ "$dns_len" -ge "$group_len" ]; then
|
||||
echo "错误: 不支持的配置文件, General 设置部分应位于开头,请根据模板修改后重试!" >> "$DEBUG_LOG"
|
||||
fi 2>/dev/null
|
||||
@ -281,11 +281,11 @@ else
|
||||
if [ "$proxy_len" -le "$provider_len" ]; then
|
||||
sed '/^ \{0,\}Proxy:/,$d' "$CONFIG_FILE" >> "$DEBUG_LOG" 2>/dev/null
|
||||
elif [ "$proxy_len" -ge "$provider_len" ]; then
|
||||
sed '/^ \{0,\}proxy-provider:/,$d' "$CONFIG_FILE" >> "$DEBUG_LOG" 2>/dev/null
|
||||
sed '/^ \{0,\}proxy-providers:/,$d' "$CONFIG_FILE" >> "$DEBUG_LOG" 2>/dev/null
|
||||
elif [ -n "$proxy_len" ] && [ -z "$provider_len" ]; then
|
||||
sed '/^ \{0,\}Proxy:/,$d' "$CONFIG_FILE" >> "$DEBUG_LOG" 2>/dev/null
|
||||
elif [ -z "$proxy_len" ] && [ -n "$provider_len" ]; then
|
||||
sed '/^ \{0,\}proxy-provider:/,$d' "$CONFIG_FILE" >> "$DEBUG_LOG" 2>/dev/null
|
||||
sed '/^ \{0,\}proxy-providers:/,$d' "$CONFIG_FILE" >> "$DEBUG_LOG" 2>/dev/null
|
||||
fi 2>/dev/null
|
||||
fi
|
||||
|
||||
|
||||
@ -3,15 +3,20 @@
|
||||
CURL_GROUP_CACHE="/tmp/openclash_history_gorup.json"
|
||||
CURL_NOW_CACHE="/tmp/openclash_history_now.json"
|
||||
CURL_CACHE="/tmp/openclash_history_curl.json"
|
||||
HISTORY_PATH="/etc/openclash/history"
|
||||
CONFIG_FILE=$(ps -w|grep /etc/openclash/clash 2>/dev/null |grep -v grep |awk -F '-f ' '{print $2}' 2>/dev/null)
|
||||
CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null)
|
||||
HISTORY_PATH="/etc/openclash/history/$CONFIG_NAME"
|
||||
SECRET=$(uci get openclash.config.dashboard_password 2>/dev/null)
|
||||
LAN_IP=$(uci get network.lan.ipaddr 2>/dev/null |awk -F '/' '{print $1}' 2>/dev/null)
|
||||
PORT=$(uci get openclash.config.cn_port 2>/dev/null)
|
||||
|
||||
curl -m 5 --retry 2 -w %{http_code}"\n" -H "Authorization: Bearer ${SECRET}" -H "Content-Type:application/json" -X GET http://"$LAN_IP":"$PORT"/proxies > "$CURL_CACHE" 2>/dev/null
|
||||
if [ "$(sed -n '$p' "$CURL_CACHE" 2>/dev/null)" = "200" ]; then
|
||||
cat "$CURL_CACHE" |jsonfilter -e '@["proxies"][@.type="Selector"]["name"]' > "$CURL_GROUP_CACHE" 2>/dev/null
|
||||
cat "$CURL_CACHE" |jsonfilter -e '@["proxies"][@.type="Selector"]["now"]' > "$CURL_NOW_CACHE" 2>/dev/null
|
||||
awk 'NR==FNR{a[i]=$0;i++}NR>FNR{print a[j]"#*#"$0;j++}' "$CURL_GROUP_CACHE" "$CURL_NOW_CACHE" > "$HISTORY_PATH" 2>/dev/null
|
||||
if pidof clash >/dev/null; then
|
||||
curl -m 5 --retry 2 -w %{http_code}"\n" -H "Authorization: Bearer ${SECRET}" -H "Content-Type:application/json" -X GET http://"$LAN_IP":"$PORT"/proxies > "$CURL_CACHE" 2>/dev/null
|
||||
if [ "$(sed -n '$p' "$CURL_CACHE" 2>/dev/null)" = "200" ]; then
|
||||
mkdir -p /etc/openclash/history 2>/dev/null
|
||||
cat "$CURL_CACHE" |jsonfilter -e '@["proxies"][@.type="Selector"]["name"]' > "$CURL_GROUP_CACHE" 2>/dev/null
|
||||
cat "$CURL_CACHE" |jsonfilter -e '@["proxies"][@.type="Selector"]["now"]' > "$CURL_NOW_CACHE" 2>/dev/null
|
||||
awk 'NR==FNR{a[i]=$0;i++}NR>FNR{print a[j]"#*#"$0;j++}' "$CURL_GROUP_CACHE" "$CURL_NOW_CACHE" > "$HISTORY_PATH" 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
rm -rf /tmp/openclash_history_* 2>/dev/null
|
||||
@ -1,6 +1,8 @@
|
||||
#!/bin/bash
|
||||
|
||||
HISTORY_PATH="/etc/openclash/history"
|
||||
CONFIG_FILE=$(uci get openclash.config.config_path 2>/dev/null)
|
||||
CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null)
|
||||
HISTORY_PATH="/etc/openclash/history/$CONFIG_NAME"
|
||||
SECRET=$(uci get openclash.config.dashboard_password 2>/dev/null)
|
||||
LAN_IP=$(uci get network.lan.ipaddr 2>/dev/null |awk -F '/' '{print $1}' 2>/dev/null)
|
||||
PORT=$(uci get openclash.config.cn_port 2>/dev/null)
|
||||
@ -19,24 +21,32 @@ GROUP_STATE() {
|
||||
echo "$(curl -m 5 -w %{http_code}"\n" -H "Authorization: Bearer ${SECRET}" -H "Content-Type:application/json" -X GET http://"$LAN_IP":"$PORT"/proxies/"$1" 2>/dev/null |sed -n '$p' 2>/dev/null)"
|
||||
}
|
||||
|
||||
restore_history() {
|
||||
GROUP_NAME=$(urlencode "$GROUP_NAME")
|
||||
NOW_NAME=$(echo $line |awk -F '#*#' '{print $3}')
|
||||
GROUP_STATE=$(GROUP_STATE "$GROUP_NAME")
|
||||
GROUP_STATE_NUM=0
|
||||
while ( [ ! -z "$(pidof clash)" ] && [ "$GROUP_STATE" != "200" ] && [ "$GROUP_STATE_NUM" -le 1 ] )
|
||||
do
|
||||
sleep 3
|
||||
GROUP_STATE_NUM=$(expr "$GROUP_STATE_NUM" + 1)
|
||||
GROUP_STATE=$(GROUP_STATE "$GROUP_NAME")
|
||||
done
|
||||
curl -m 5 --retry 2 -H "Authorization: Bearer ${SECRET}" -H "Content-Type:application/json" -X PUT -d '{"name":"'"$NOW_NAME"'"}' http://"$LAN_IP":"$PORT"/proxies/"$GROUP_NAME" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
if [ -s "$HISTORY_PATH" ]; then
|
||||
cat $HISTORY_PATH |while read line
|
||||
do
|
||||
GROUP_NAME=$(echo $line |awk -F '#*#' '{print $1}')
|
||||
if [ -z "$(echo $line |grep "#*#")" ] || [ -z "$(grep "^$GROUP_NAME$" /tmp/Proxy_Group)" ]; then
|
||||
continue
|
||||
if [ "$GROUP_NAME" != "GLOBAL" ]; then
|
||||
if [ -z "$(echo $line |grep "#*#")" ] || [ -z "$(grep "^$GROUP_NAME$" /tmp/Proxy_Group)" ]; then
|
||||
continue
|
||||
else
|
||||
restore_history
|
||||
fi
|
||||
else
|
||||
GROUP_NAME=$(urlencode "$GROUP_NAME")
|
||||
NOW_NAME=$(echo $line |awk -F '#*#' '{print $3}')
|
||||
GROUP_STATE=$(GROUP_STATE "$GROUP_NAME")
|
||||
GROUP_STATE_NUM=0
|
||||
while ( [ ! -z "$(pidof clash)" ] && [ "$GROUP_STATE" != "200" ] && [ "$GROUP_STATE_NUM" -le 1 ] )
|
||||
do
|
||||
sleep 3
|
||||
GROUP_STATE_NUM=$(expr "$GROUP_STATE_NUM" + 1)
|
||||
GROUP_STATE=$(GROUP_STATE "$GROUP_NAME")
|
||||
done
|
||||
curl -m 5 --retry 2 -H "Authorization: Bearer ${SECRET}" -H "Content-Type:application/json" -X PUT -d '{"name":"'"$NOW_NAME"'"}' http://"$LAN_IP":"$PORT"/proxies/"$GROUP_NAME" >/dev/null 2>&1
|
||||
restore_history
|
||||
fi
|
||||
done >/dev/null 2>&1
|
||||
fi
|
||||
@ -1,4 +1,7 @@
|
||||
#!/bin/sh
|
||||
status=$(ps|grep -c /etc/init.d/openclash)
|
||||
[ "$status" -gt "1" ] && sleep 5
|
||||
|
||||
START_LOG="/tmp/openclash_start.log"
|
||||
LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")
|
||||
LOG_FILE="/tmp/openclash.log"
|
||||
|
||||
@ -1,4 +1,7 @@
|
||||
#!/bin/sh
|
||||
status=$(ps|grep -c /etc/init.d/openclash)
|
||||
[ "$status" -gt "1" ] && sleep 5
|
||||
|
||||
START_LOG="/tmp/openclash_start.log"
|
||||
LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")
|
||||
LOG_FILE="/tmp/openclash.log"
|
||||
@ -17,31 +20,31 @@
|
||||
else
|
||||
curl -sL --connect-timeout 10 --retry 2 https://raw.githubusercontent.com/lhie1/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
fi
|
||||
sed -i '1i Rule:' /tmp/rules.yaml
|
||||
sed -i '1i rules:' /tmp/rules.yaml
|
||||
elif [ "$RUlE_SOURCE" = "ConnersHua" ]; then
|
||||
if pidof clash >/dev/null; then
|
||||
curl -sL --connect-timeout 10 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT -U "$PROXY_AUTH" https://raw.githubusercontent.com/ConnersHua/Profiles/master/Clash/Pro.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
else
|
||||
curl -sL --connect-timeout 10 --retry 2 https://raw.githubusercontent.com/ConnersHua/Profiles/master/Clash/Pro.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
fi
|
||||
sed -i "/^rules:/c\^Rule:" /tmp/rules.yaml 2>/dev/null && sed -i -n '/^Rule:/,$p' /tmp/rules.yaml 2>/dev/null
|
||||
sed -i "/^Rule:/c\^rules:" /tmp/rules.yaml 2>/dev/null && sed -i -n '/^rules:/,$p' /tmp/rules.yaml 2>/dev/null
|
||||
elif [ "$RUlE_SOURCE" = "ConnersHua_return" ]; then
|
||||
if pidof clash >/dev/null; then
|
||||
curl -sL --connect-timeout 10 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT -U "$PROXY_AUTH" https://raw.githubusercontent.com/ConnersHua/Profiles/master/Clash/BacktoCN.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
else
|
||||
curl -sL --connect-timeout 10 --retry 2 https://raw.githubusercontent.com/ConnersHua/Profiles/master/Clash/BacktoCN.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
fi
|
||||
sed -i "/^rules:/c\^Rule:" /tmp/rules.yaml 2>/dev/null && sed -i -n '/^Rule:/,$p' /tmp/rules.yaml 2>/dev/null
|
||||
sed -i "/^Rule:/c\^rules:" /tmp/rules.yaml 2>/dev/null && sed -i -n '/^rules:/,$p' /tmp/rules.yaml 2>/dev/null
|
||||
fi
|
||||
if [ "$?" -eq "0" ] && [ "$RUlE_SOURCE" != 0 ] && [ -s "/tmp/rules.yaml" ]; then
|
||||
echo "下载成功,开始预处理规则文件..." >$START_LOG
|
||||
sed -i "/^Rule:/a\##source:${RUlE_SOURCE}" /tmp/rules.yaml >/dev/null 2>&1
|
||||
sed -i "/^rules:/a\##source:${RUlE_SOURCE}" /tmp/rules.yaml >/dev/null 2>&1
|
||||
echo "检查下载的规则文件是否有更新..." >$START_LOG
|
||||
cmp -s /etc/openclash/"$RUlE_SOURCE".yaml /tmp/rules.yaml
|
||||
if [ "$?" -ne "0" ]; then
|
||||
echo "检测到下载的规则文件有更新,开始替换..." >$START_LOG
|
||||
mv /tmp/rules.yaml /etc/openclash/"$RUlE_SOURCE".yaml >/dev/null 2>&1
|
||||
sed -i '/^Rule:/a\##updated' /etc/openclash/"$RUlE_SOURCE".yaml >/dev/null 2>&1
|
||||
sed -i '/^rules:/a\##updated' /etc/openclash/"$RUlE_SOURCE".yaml >/dev/null 2>&1
|
||||
echo "替换成功,重新加载 OpenClash 应用新规则..." >$START_LOG
|
||||
/etc/init.d/openclash restart 2>/dev/null
|
||||
echo "${LOGTIME} Other Rules 【$RUlE_SOURCE】 Update Successful" >>$LOG_FILE
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
<!doctype html><html lang="en"><head><meta charset="UTF-8"><link rel="shortcut icon" href="yacd.ico"><link rel="icon" type="image/png" sizes="64x64" href="yacd-64.png"><link rel="icon" type="image/png" sizes="128x128" href="yacd-128.png"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="application-name" content="yacd"><meta name="description" content="Yet Another Clash Dashboard"><meta name="theme-color" content="#202020"><title>yacd - Yet Another Clash Dashboard</title><link href="https://fonts.googleapis.com/css2?family=Merriweather+Sans:wght@400;700&family=Roboto+Mono&display=swap" rel="stylesheet"><meta property="og:image" content="https://user-images.githubusercontent.com/1166872/47304841-536f3d80-d65a-11e8-8908-1917127dafc5.png"><meta property="og:site_name" content="yacd"><meta property="og:type" content="object"><meta property="og:title" content="yacd"><meta property="og:url" content="http://yacd.haishan.me"><meta property="og:description" content="Yet Another Clash Dashboard"><script defer="defer" src="runtime.4c1edc8c2d6902d92cc4.js"></script><script defer="defer" src="core-js~app.b0709810482830abfa61.js"></script><script defer="defer" src="react~app.45d91d3dcd725ceea7ca.js"></script><script defer="defer" src="app.081203a887c789b3caf4.js"></script><link href="app.dd24893376573afd8b22.css" rel="stylesheet"></head><body><div id="app"></div></body></html>
|
||||
<!doctype html><html lang="en"><head><meta charset="UTF-8"><link rel="shortcut icon" href="yacd.ico"><link rel="icon" type="image/png" sizes="64x64" href="yacd-64.png"><link rel="icon" type="image/png" sizes="128x128" href="yacd-128.png"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="application-name" content="yacd"><meta name="description" content="Yet Another Clash Dashboard"><meta name="theme-color" content="#202020"><title>yacd - Yet Another Clash Dashboard</title><link href="https://fonts.googleapis.com/css2?family=Merriweather+Sans:wght@400;700&family=Roboto+Mono&display=swap" rel="stylesheet"><meta property="og:image" content="https://user-images.githubusercontent.com/1166872/47304841-536f3d80-d65a-11e8-8908-1917127dafc5.png"><meta property="og:site_name" content="yacd"><meta property="og:type" content="object"><meta property="og:title" content="yacd"><meta property="og:url" content="http://yacd.haishan.me"><meta property="og:description" content="Yet Another Clash Dashboard"><script defer="defer" src="runtime.19a1a1c098f3d2fbd54e.js"></script><script defer="defer" src="core-js~app.b214178cdb71012cd622.js"></script><script defer="defer" src="react~app.e2d573992419eb24e61b.js"></script><script defer="defer" src="app.1de83e4934f843dc8d9b.js"></script><link href="app.6c8a97d4cbae5f4b8f38.css" rel="stylesheet"></head><body><div id="app"></div></body></html>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,9 @@
|
||||
._37wt2_a2Gx{display:flex;align-items:center}._37wt2_a2Gx .L80zPM0Rx0{display:inline-flex;-ms-transform:rotate(0deg);transform:rotate(0deg);transition:transform .3s}._37wt2_a2Gx .L80zPM0Rx0._36RO7_wtuv{-ms-transform:rotate(180deg);transform:rotate(180deg)}._37wt2_a2Gx .L80zPM0Rx0:focus{outline:var(--color-focus-blue) solid 1px}._2XKN3NArpV{margin-left:5px}._1s98xvUoBx{font-family:var(--font-normal);font-size:.75em;margin-left:3px;padding:2px 7px;display:inline-flex;justify-content:center;align-items:center;background-color:var(--bg-near-transparent);border-radius:30px}
|
||||
._2V-RqIAl7n{border-radius:20px;color:#eee;font-size:.6em}@media screen and (min-width:30em){._2V-RqIAl7n{font-size:1em}}
|
||||
.NpfXwxWAxo{position:relative;padding:5px;border-radius:8px;overflow:hidden;max-width:280px;background-color:var(--color-bg-proxy)}@media screen and (min-width:30em){.NpfXwxWAxo{min-width:200px;border-radius:10px;padding:10px}}.NpfXwxWAxo._2zD7drviYH{background-color:var(--color-focus-blue);color:#ddd}.NpfXwxWAxo._2bylJNYYdN{opacity:.5}._1rVl-Kdmss{font-family:var(--font-mono);font-size:.6em}@media screen and (min-width:30em){._1rVl-Kdmss{font-size:1em}}.aS2noEcBcP{display:flex;align-items:center;justify-content:space-between}._3kdi5nima5{width:100%;overflow:hidden;text-overflow:ellipsis;margin-bottom:5px;font-size:.85em}@media screen and (min-width:30em){._3kdi5nima5{font-size:1.1em}}._3NpxWygDxO{width:12px;height:12px;border-radius:8px}._3NpxWygDxO ._2zD7drviYH{outline:1px solid pink}
|
||||
._3PCSxT0l14{margin-bottom:12px}._1yYRIyvlRd{display:flex;flex-wrap:wrap;margin-top:8px}._1OcDlvlM5R{margin-right:5px;margin-bottom:5px;transition:transform .2s ease-in-out}@media screen and (min-width:30em){._1OcDlvlM5R{margin-right:10px;margin-bottom:10px}}._1OcDlvlM5R._3oAxPKtZFv{cursor:pointer}._1OcDlvlM5R._3oAxPKtZFv:hover{-ms-transform:translateY(-2px);transform:translateY(-2px)}
|
||||
._2OKIZuCJtW{background-color:rgba(0,0,0,.6)}._1y6NeshM4O{position:absolute;background-color:var(--bg-modal);color:var(--color-text);line-height:1.4;opacity:.6;transition:all .3s ease;-ms-transform:translate(-50%,-50%) scale(1.2);transform:translate(-50%,-50%) scale(1.2);box-shadow:0 4px 4px rgba(0,0,0,.12),0 16px 32px rgba(0,0,0,.24)}._25KARE4UsT{opacity:1;-ms-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}
|
||||
.t6lsDKNXTK{height:30px;width:100%;padding-left:8px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--color-background);color:var(--color-text);padding-right:20px;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='8' height='24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 7l3 4H1l3-4zM4 17l-3-4h6l-3 4z' fill='%23999'/%3E%3C/svg%3E");border-radius:4px;border-image:initial;border:1px solid var(--select-border-color);transition:all .1s ease 0s;background-position:calc(100% - 8px) 50%;background-repeat:no-repeat}.t6lsDKNXTK:focus,.t6lsDKNXTK:hover{border-color:#343434;outline:none!important;color:var(--color-text-highlight);background-image:var(--select-bg-hover)}.t6lsDKNXTK option{background-color:var(--color-background)}
|
||||
._1h4Qixiwxj{max-width:85vw;width:400px;display:flex;justify-content:space-between;align-items:center;font-size:13px;padding:13px 0}hr{height:1px;background-color:var(--color-separator);border:none;outline:none;margin:1rem 0}
|
||||
._3GVE9k27aM{margin-bottom:12px}._3GVE9k27aM small{color:#777}._1PV2l5z2zN{padding:10px 15px}@media screen and (min-width:30em){._1PV2l5z2zN{padding:10px 40px}}._1b5XrAhEUm{display:flex}._1b5XrAhEUm button{margin:0 5px}._1b5XrAhEUm button:first-child{margin-left:0}._2t6Q6BkZ73{display:flex;justify-content:center;align-items:center;cursor:pointer}
|
||||
._39uWX_-wQq{position:-webkit-sticky;position:sticky;top:0;z-index:1;background:var(--color-background);display:flex;justify-content:flex-end;padding:5px 5px 2px 0}._1myfcMimT9{padding:10px 15px}@media screen and (min-width:30em){._1myfcMimT9{padding:10px 40px}}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{BVyM:function(e,t,a){"use strict";a.r(t);var r=a("ODXe"),n=a("q1tI"),i=a.n(n),o=a("iR1w"),c=a("OAQO"),l=a("9cvt"),u=a("WfPo"),s=a("OADI"),f=a("DKqX"),p=a("17x9"),d=a.n(p),m=a("xrux"),v=a.n(m),b={_default:"#59caf9",DIRECT:"#f5bc41",REJECT:"#cb3166"};function y(e){var t=e.type,a=e.payload,r=e.proxy,n=e.id,o=function(e){var t=e.proxy,a=b._default;return b[t]&&(a=b[t]),{color:a}}({proxy:r});return i.a.createElement("div",{className:v.a.rule},i.a.createElement("div",{className:v.a.left},n),i.a.createElement("div",null,i.a.createElement("div",{className:v.a.b},a),i.a.createElement("div",{className:v.a.a},i.a.createElement("div",{className:v.a.type},t),i.a.createElement("div",{style:o},r))))}y.propTypes={id:d.a.number,type:d.a.string,payload:d.a.string,proxy:d.a.string};var O=y,E=a("II4a"),h=a("EwbC"),w=Object(u.a)((function(e){return{searchText:Object(h.d)(e),updateSearchText:h.f}}))(E.a),g=a("Kv4h"),x=i.a.memo,j=i.a.useEffect,k=i.a.useMemo,C=i.a.useCallback;function N(e,t){return t[e].id}var I=x((function(e){var t=e.index,a=e.style,r=e.data[t];return i.a.createElement("div",{style:a},i.a.createElement(O,r))}),o.b);t.default=Object(u.a)((function(e){return{apiConfig:Object(s.b)(e),rules:Object(h.c)(e)}}))((function(e){var t=e.dispatch,a=e.apiConfig,n=e.rules,u=C((function(){t(Object(h.a)(a))}),[a,t]);j((function(){t(Object(h.b)(a))}),[t,a]);var s=Object(g.a)(),p=Object(r.a)(s,2),d=p[0],m=p[1],v=k((function(){return i.a.createElement(c.a,{width:16})}),[]);return i.a.createElement("div",null,i.a.createElement(f.a,{title:"Rules"}),i.a.createElement(w,null),i.a.createElement("div",{ref:d,style:{paddingBottom:30}},i.a.createElement(o.a,{height:m-30,width:"100%",itemCount:n.length,itemSize:80,itemData:n,itemKey:N},I)),i.a.createElement(l.b,{icon:v,text:"Refresh",onClick:u,position:l.c}))}))},OAQO:function(e,t,a){"use strict";var r=a("q1tI"),n=a.n(r),i=a("17x9"),o=a.n(i);function c(){return(c=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var r in a)Object.prototype.hasOwnProperty.call(a,r)&&(e[r]=a[r])}return e}).apply(this,arguments)}function l(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},i=Object.keys(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var u=Object(r.forwardRef)((function(e,t){var a=e.color,r=void 0===a?"currentColor":a,i=e.size,o=void 0===i?24:i,u=l(e,["color","size"]);return n.a.createElement("svg",c({ref:t,xmlns:"http://www.w3.org/2000/svg",width:o,height:o,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},u),n.a.createElement("polyline",{points:"23 4 23 10 17 10"}),n.a.createElement("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"}))}));u.propTypes={color:o.a.string,size:o.a.oneOfType([o.a.string,o.a.number])},u.displayName="RotateCw",t.a=u},xrux:function(e,t,a){e.exports={rule:"_3eSLieOhVX",left:"_2n1pW09UvV",a:"t1XJIwvW7A",b:"_1fNf8kj0HA",type:"_3yJmN0tON0"}}}]);
|
||||
@ -1 +0,0 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{BVyM:function(e,t,a){"use strict";a.r(t);var r=a("ODXe"),n=a("q1tI"),i=a.n(n),c=a("5Wrh"),o=a("iR1w"),l=a("OAQO"),u=a("WfPo"),s=a("OADI"),f=a("DKqX"),p=a("17x9"),m=a.n(p),d=a("xrux"),v=a.n(d),b={_default:"#59caf9",DIRECT:"#f5bc41",REJECT:"#cb3166"};function y(e){var t=e.type,a=e.payload,r=e.proxy,n=e.id,c=function(e){var t=e.proxy,a=b._default;return b[t]&&(a=b[t]),{color:a}}({proxy:r});return i.a.createElement("div",{className:v.a.rule},i.a.createElement("div",{className:v.a.left},n),i.a.createElement("div",null,i.a.createElement("div",{className:v.a.b},a),i.a.createElement("div",{className:v.a.a},i.a.createElement("div",{className:v.a.type},t),i.a.createElement("div",{style:c},r))))}y.propTypes={id:m.a.number,type:m.a.string,payload:m.a.string,proxy:m.a.string};var O=y,E=a("II4a"),h=a("EwbC"),w=Object(u.a)((function(e){return{searchText:Object(h.d)(e),updateSearchText:h.f}}))(E.a),g=a("Kv4h"),x=i.a.memo,j=i.a.useEffect,k=i.a.useMemo,C=i.a.useCallback;function N(e,t){return t[e].id}var I=x((function(e){var t=e.index,a=e.style,r=e.data[t];return i.a.createElement("div",{style:a},i.a.createElement(O,r))}),o.b);t.default=Object(u.a)((function(e){return{apiConfig:Object(s.b)(e),rules:Object(h.c)(e)}}))((function(e){var t=e.dispatch,a=e.apiConfig,n=e.rules,u=C((function(){t(Object(h.a)(a))}),[a,t]);j((function(){t(Object(h.b)(a))}),[t,a]);var s=Object(g.a)(),p=Object(r.a)(s,2),m=p[0],d=p[1],v=k((function(){return i.a.createElement(l.a,{width:16})}),[]);return i.a.createElement("div",null,i.a.createElement(f.a,{title:"Rules"}),i.a.createElement(w,null),i.a.createElement("div",{ref:m,style:{paddingBottom:30}},i.a.createElement(o.a,{height:d-30,width:"100%",itemCount:n.length,itemSize:80,itemData:n,itemKey:N},I)),i.a.createElement("div",{className:"fabgrp"},i.a.createElement(c.a,{text:"Refresh",start:v,onClick:u})))}))},OAQO:function(e,t,a){"use strict";var r=a("q1tI"),n=a.n(r),i=a("17x9"),c=a.n(i);function o(){return(o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var r in a)Object.prototype.hasOwnProperty.call(a,r)&&(e[r]=a[r])}return e}).apply(this,arguments)}function l(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},i=Object.keys(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var u=Object(r.forwardRef)((function(e,t){var a=e.color,r=void 0===a?"currentColor":a,i=e.size,c=void 0===i?24:i,u=l(e,["color","size"]);return n.a.createElement("svg",o({ref:t,xmlns:"http://www.w3.org/2000/svg",width:c,height:c,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},u),n.a.createElement("polyline",{points:"23 4 23 10 17 10"}),n.a.createElement("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"}))}));u.propTypes={color:c.a.string,size:c.a.oneOfType([c.a.string,c.a.number])},u.displayName="RotateCw",t.a=u},xrux:function(e,t,a){e.exports={rule:"_3eSLieOhVX",left:"_2n1pW09UvV",a:"t1XJIwvW7A",b:"_1fNf8kj0HA",type:"_3yJmN0tON0"}}}]);
|
||||
@ -1 +1 @@
|
||||
!function(e){function t(t){for(var n,o,i=t[0],l=t[1],s=t[2],f=t[3]||[],d=0,h=[];d<i.length;d++)o=i[d],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&h.push(a[o][0]),a[o]=0;for(n in l)Object.prototype.hasOwnProperty.call(l,n)&&(e[n]=l[n]);for(p&&p(t),u.push.apply(u,f);h.length;)h.shift()();return c.push.apply(c,s||[]),r()}function r(){for(var e,t=0;t<c.length;t++){for(var r=c[t],n=!0,o=1;o<r.length;o++){var s=r[o];0!==a[s]&&(n=!1)}n&&(c.splice(t--,1),e=l(l.s=r[0]))}return 0===c.length&&(u.forEach((function(e){if(void 0===a[e]){a[e]=null;var t=document.createElement("link");l.nc&&t.setAttribute("nonce",l.nc),t.rel="prefetch",t.as="script",t.href=i(e),document.head.appendChild(t)}})),u.length=0),e}var n={},o={5:0},a={5:0},c=[],u=[];function i(e){return l.p+""+({2:"proxies",4:"rules",6:"vendors~chartjs",7:"vendors~proxies"}[e]||e)+"."+{2:"bdb3659841c50b543b0e",4:"efdab873e544c5738c5c",6:"7079553c634b376d7c1c",7:"0ab0478edefe25bc30a4",8:"cfac5eece126ce875152"}[e]+".js"}function l(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,l),r.l=!0,r.exports}l.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{2:1,4:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({2:"proxies",4:"rules",6:"vendors~chartjs",7:"vendors~proxies"}[e]||e)+"."+{2:"cea47222a686cf441cb9",4:"664f8b737878361937cb",6:"31d6cfe0d16ae931b73c",7:"31d6cfe0d16ae931b73c",8:"31d6cfe0d16ae931b73c"}[e]+".css",a=l.p+n,c=document.getElementsByTagName("link"),u=0;u<c.length;u++){var i=(f=c[u]).getAttribute("data-href")||f.getAttribute("href");if("stylesheet"===f.rel&&(i===n||i===a))return t()}var s=document.getElementsByTagName("style");for(u=0;u<s.length;u++){var f;if((i=(f=s[u]).getAttribute("data-href"))===n||i===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,c=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");c.code="CSS_CHUNK_LOAD_FAILED",c.request=n,delete o[e],d.parentNode.removeChild(d),r(c)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var c,u=document.createElement("script");u.charset="utf-8",u.timeout=120,l.nc&&u.setAttribute("nonce",l.nc),u.src=i(e);var s=new Error;c=function(t){u.onerror=u.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;s.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",s.name="ChunkLoadError",s.type=n,s.request=o,r[1](s)}a[e]=void 0}};var f=setTimeout((function(){c({type:"timeout",target:u})}),12e4);u.onerror=u.onload=c,document.head.appendChild(u)}return Promise.all(t)},l.m=e,l.c=n,l.d=function(e,t,r){l.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,t){if(1&t&&(e=l(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(l.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)l.d(r,n,function(t){return e[t]}.bind(null,n));return r},l.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(t,"a",t),t},l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},l.p="",l.oe=function(e){throw console.error(e),e};var s=window.webpackJsonp=window.webpackJsonp||[],f=s.push.bind(s);s.push=t,s=s.slice();for(var d=0;d<s.length;d++)t(s[d]);var p=f;r()}([]);
|
||||
!function(e){function t(t){for(var n,o,i=t[0],l=t[1],f=t[2],s=t[3]||[],d=0,h=[];d<i.length;d++)o=i[d],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&h.push(a[o][0]),a[o]=0;for(n in l)Object.prototype.hasOwnProperty.call(l,n)&&(e[n]=l[n]);for(p&&p(t),u.push.apply(u,s);h.length;)h.shift()();return c.push.apply(c,f||[]),r()}function r(){for(var e,t=0;t<c.length;t++){for(var r=c[t],n=!0,o=1;o<r.length;o++){var f=r[o];0!==a[f]&&(n=!1)}n&&(c.splice(t--,1),e=l(l.s=r[0]))}return 0===c.length&&(u.forEach((function(e){if(void 0===a[e]){a[e]=null;var t=document.createElement("link");l.nc&&t.setAttribute("nonce",l.nc),t.rel="prefetch",t.as="script",t.href=i(e),document.head.appendChild(t)}})),u.length=0),e}var n={},o={5:0},a={5:0},c=[],u=[];function i(e){return l.p+""+({2:"proxies",4:"rules",6:"vendors~chartjs",7:"vendors~proxies"}[e]||e)+"."+{2:"98cabc7dc53e642492d1",4:"5123c4f00bc3b0a54628",6:"fa4d4e9c5ca3297a0d20",7:"cd3f974bfcc521d59a74",8:"7958f6e20b89d91ec605"}[e]+".js"}function l(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,l),r.l=!0,r.exports}l.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{2:1,4:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({2:"proxies",4:"rules",6:"vendors~chartjs",7:"vendors~proxies"}[e]||e)+"."+{2:"f2fb2adff629251cabb9",4:"664f8b737878361937cb",6:"31d6cfe0d16ae931b73c",7:"31d6cfe0d16ae931b73c",8:"31d6cfe0d16ae931b73c"}[e]+".css",a=l.p+n,c=document.getElementsByTagName("link"),u=0;u<c.length;u++){var i=(s=c[u]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(i===n||i===a))return t()}var f=document.getElementsByTagName("style");for(u=0;u<f.length;u++){var s;if((i=(s=f[u]).getAttribute("data-href"))===n||i===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,c=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");c.code="CSS_CHUNK_LOAD_FAILED",c.request=n,delete o[e],d.parentNode.removeChild(d),r(c)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var c,u=document.createElement("script");u.charset="utf-8",u.timeout=120,l.nc&&u.setAttribute("nonce",l.nc),u.src=i(e);var f=new Error;c=function(t){u.onerror=u.onload=null,clearTimeout(s);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;f.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",f.name="ChunkLoadError",f.type=n,f.request=o,r[1](f)}a[e]=void 0}};var s=setTimeout((function(){c({type:"timeout",target:u})}),12e4);u.onerror=u.onload=c,document.head.appendChild(u)}return Promise.all(t)},l.m=e,l.c=n,l.d=function(e,t,r){l.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,t){if(1&t&&(e=l(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(l.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)l.d(r,n,function(t){return e[t]}.bind(null,n));return r},l.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(t,"a",t),t},l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},l.p="",l.oe=function(e){throw console.error(e),e};var f=window.webpackJsonp=window.webpackJsonp||[],s=f.push.bind(f);f.push=t,f=f.slice();for(var d=0;d<f.length;d++)t(f[d]);var p=s;r()}([]);
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -14,7 +14,7 @@
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$(grep '^ enhanced-mode: $2' "$7")" ]; then
|
||||
if [ -z "$(grep "^ enhanced-mode: $2" "$7")" ]; then
|
||||
if [ ! -z "$(grep "^ \{0,\}enhanced-mode:" "$7")" ]; then
|
||||
sed -i "/^ \{0,\}enhanced-mode:/c\ enhanced-mode: ${2}" "$7"
|
||||
else
|
||||
@ -37,7 +37,7 @@
|
||||
sed -i '/##Custom DNS##/d' "$7" 2>/dev/null
|
||||
|
||||
|
||||
if [ -z "$(grep '^redir-port: $6' "$7")" ]; then
|
||||
if [ -z "$(grep "^redir-port: $6" "$7")" ]; then
|
||||
if [ ! -z "$(grep "^ \{0,\}redir-port:" "$7")" ]; then
|
||||
sed -i "/^ \{0,\}redir-port:/c\redir-port: ${6}" "$7"
|
||||
else
|
||||
@ -45,7 +45,7 @@
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$(grep '^port: $9' "$7")" ]; then
|
||||
if [ -z "$(grep "^port: $9" "$7")" ]; then
|
||||
if [ ! -z "$(grep "^ \{0,\}port:" "$7")" ]; then
|
||||
sed -i "/^ \{0,\}port:/c\port: ${9}" "$7"
|
||||
else
|
||||
@ -53,7 +53,7 @@
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$(grep '^socks-port: $10' "$7")" ]; then
|
||||
if [ -z "$(grep "^socks-port: $10" "$7")" ]; then
|
||||
if [ ! -z "$(grep "^ \{0,\}socks-port:" "$7")" ]; then
|
||||
sed -i "/^ \{0,\}socks-port:/c\socks-port: ${10}" "$7"
|
||||
else
|
||||
@ -61,7 +61,7 @@
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$(grep '^mode: $13' "$7")" ]; then
|
||||
if [ -z "$(grep "^mode: $13" "$7")" ]; then
|
||||
if [ ! -z "$(grep "^ \{0,\}mode:" "$7")" ]; then
|
||||
sed -i "/^ \{0,\}mode:/c\mode: ${13}" "$7"
|
||||
else
|
||||
@ -69,7 +69,7 @@
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$(grep '^log-level: $12' "$7")" ]; then
|
||||
if [ -z "$(grep "^log-level: $12" "$7")" ]; then
|
||||
if [ ! -z "$(grep "^ \{0,\}log-level:" "$7")" ]; then
|
||||
sed -i "/^ \{0,\}log-level:/c\log-level: ${12}" "$7"
|
||||
else
|
||||
@ -81,11 +81,11 @@
|
||||
controller_address="0.0.0.0"
|
||||
bind_address="*"
|
||||
else
|
||||
controller_address="$11"
|
||||
bind_address="$11"
|
||||
controller_address=$11
|
||||
bind_address=$11
|
||||
fi
|
||||
|
||||
if [ -z "$(grep '^external-controller: $controller_address:$5' "$7")" ]; then
|
||||
if [ -z "$(grep "^external-controller: $controller_address:$5" "$7")" ]; then
|
||||
if [ ! -z "$(grep "^ \{0,\}external-controller:" "$7")" ]; then
|
||||
sed -i "/^ \{0,\}external-controller:/c\external-controller: ${controller_address}:${5}" "$7"
|
||||
else
|
||||
@ -94,7 +94,7 @@
|
||||
uci set openclash.config.config_reload=0
|
||||
fi
|
||||
|
||||
if [ -z "$(grep '^secret: \"$4\"' "$7")" ]; then
|
||||
if [ -z "$(grep "^secret: \"$4\"" "$7")" ]; then
|
||||
if [ ! -z "$(grep "^ \{0,\}secret:" "$7")" ]; then
|
||||
sed -i "/^ \{0,\}secret:/c\secret: \"${4}\"" "$7"
|
||||
else
|
||||
@ -114,7 +114,21 @@
|
||||
fi
|
||||
|
||||
uci commit openclash
|
||||
|
||||
dns_hijack_len=$(sed -n '/dns-hijack:/=' "$7" 2>/dev/null)
|
||||
if [ -n "$dns_hijack_len" ]; then
|
||||
dns_hijack_end_len=$dns_hijack_len
|
||||
while ( [ -n "$(echo "$hijack_line" |grep "^ \{0,\}-")" ] || [ -n "$(echo "$hijack_line" |grep "^ \{0,\}$")" ] || [ -z "$hijack_line" ] )
|
||||
do
|
||||
dns_hijack_end_len=$(expr "$dns_hijack_end_len" + 1)
|
||||
hijack_line=$(sed -n "${dns_hijack_end_len}p" "$7")
|
||||
done 2>/dev/null
|
||||
dns_hijack_end_len=$(expr "$dns_hijack_end_len" - 1)
|
||||
sed -i "${dns_hijack_len},${dns_hijack_end_len}d" "$7" 2>/dev/null
|
||||
fi
|
||||
sed -i '/^ \{0,\}tun:/,/^ \{0,\}enable:/d' "$7" 2>/dev/null
|
||||
sed -i '/^ \{0,\}dns-hijack:/d' "$7" 2>/dev/null
|
||||
sed -i '/^ \{0,\}stack:/d' "$7" 2>/dev/null
|
||||
sed -i '/^ \{0,\}device-url:/d' "$7" 2>/dev/null
|
||||
sed -i '/^ \{0,\}dns-listen:/d' "$7" 2>/dev/null
|
||||
|
||||
@ -166,7 +180,17 @@
|
||||
if [ "$15" -eq 1 ]; then
|
||||
sed -i "/^dns:/i\tun:" "$7"
|
||||
sed -i "/^dns:/i\ enable: true" "$7"
|
||||
elif [ ! -z "$15" ]; then
|
||||
if [ -n "$16" ]; then
|
||||
sed -i "/^dns:/i\ stack: ${16}" "$7"
|
||||
else
|
||||
sed -i "/^dns:/i\ stack: system" "$7"
|
||||
fi
|
||||
sed -i "/^dns:/i\ dns-hijack:" "$7"
|
||||
# sed -i "/^dns:/i\ - 8.8.8.8:53" "$7"
|
||||
sed -i "/^dns:/i\ - tcp://8.8.8.8:53" "$7"
|
||||
# sed -i "/^dns:/i\ - 8.8.4.4:53" "$7"
|
||||
sed -i "/^dns:/i\ - tcp://8.8.4.4:53" "$7"
|
||||
elif [ "$15" -eq 2 ]; then
|
||||
sed -i "/^dns:/i\tun:" "$7"
|
||||
sed -i "/^dns:/i\ enable: true" "$7"
|
||||
sed -i "/^dns:/i\ device-url: dev://clash0" "$7"
|
||||
@ -176,10 +200,10 @@
|
||||
#添加自定义Hosts设置
|
||||
|
||||
if [ "$2" = "redir-host" ]; then
|
||||
if [ -z "$(grep '^ \{0,\}hosts:' $7)" ]; then
|
||||
if [ -z "$(grep "^ \{0,\}hosts:" $7)" ]; then
|
||||
sed -i '/^dns:/i\hosts:' "$7" 2>/dev/null
|
||||
else
|
||||
if [ ! -z "$(grep '^ \{1,\}hosts:' $7)" ]; then
|
||||
if [ ! -z "$(grep "^ \{1,\}hosts:" $7)" ]; then
|
||||
sed -i "/^ \{0,\}hosts:/c\hosts:" "$7"
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -3,20 +3,20 @@
|
||||
YML_FILE="$1"
|
||||
|
||||
#proxy-providers
|
||||
[ -z "$(grep "^proxy-provider:" "$YML_FILE")" ] && {
|
||||
sed -i "s/^ \{1,\}proxy-provider:/proxy-provider:/g" "$YML_FILE" 2>/dev/null
|
||||
[ -z "$(grep "^proxy-providers:" "$YML_FILE")" ] && {
|
||||
sed -i "s/^ \{1,\}proxy-providers:/proxy-providers:/g" "$YML_FILE" 2>/dev/null
|
||||
}
|
||||
[ -z "$(grep "^proxy-provider:" "$YML_FILE")" ] && {
|
||||
sed -i "s/^ \{0,\}proxy-providers:/proxy-provider:/g" "$YML_FILE" 2>/dev/null
|
||||
[ -z "$(grep "^proxy-providers:" "$YML_FILE")" ] && {
|
||||
sed -i "s/^ \{0,\}proxy-provider:/proxy-providers:/g" "$YML_FILE" 2>/dev/null
|
||||
}
|
||||
#proxy-groups
|
||||
[ -z "$(grep "^Proxy Group:" "$YML_FILE")" ] && {
|
||||
sed -i "s/^ \{0,\}\'Proxy Group\':/Proxy Group:/g" "$YML_FILE" 2>/dev/null
|
||||
sed -i 's/^ \{0,\}\"Proxy Group\":/Proxy Group:/g' "$YML_FILE" 2>/dev/null
|
||||
sed -i "s/^ \{1,\}Proxy Group:/Proxy Group:/g" "$YML_FILE" 2>/dev/null
|
||||
[ -z "$(grep "^proxy-groups:" "$YML_FILE")" ] && {
|
||||
sed -i "s/^ \{0,\}\'Proxy Group\':/proxy-groups:/g" "$YML_FILE" 2>/dev/null
|
||||
sed -i 's/^ \{0,\}\"Proxy Group\":/proxy-groups:/g' "$YML_FILE" 2>/dev/null
|
||||
sed -i "s/^ \{1,\}proxy-groups:/proxy-groups:/g" "$YML_FILE" 2>/dev/null
|
||||
}
|
||||
[ -z "$(grep "^Proxy Group:" "$YML_FILE")" ] && {
|
||||
sed -i "s/^ \{0,\}proxy-groups:/Proxy Group:/g" "$YML_FILE" 2>/dev/null
|
||||
[ -z "$(grep "^proxy-groups:" "$YML_FILE")" ] && {
|
||||
sed -i "s/^ \{0,\}Proxy Group:/proxy-groups:/g" "$YML_FILE" 2>/dev/null
|
||||
}
|
||||
|
||||
#proxies
|
||||
@ -30,14 +30,24 @@ YML_FILE="$1"
|
||||
group_len=$(sed -n '/^Proxy Group:/=' "$YML_FILE" 2>/dev/null)
|
||||
proxies_len=$(sed -n '/proxies:/=' "$YML_FILE" 2>/dev/null |sed -n 1p)
|
||||
if [ "$proxies_len" -lt "$group_len" ]; then
|
||||
sed -i "${proxies_len}s/proxies:/Proxy:/" "$YML_FILE" 2>/dev/null
|
||||
sed -i "${proxies_len}s/ \{0,\}proxies:/Proxy:/" "$YML_FILE" 2>/dev/null
|
||||
fi 2>/dev/null
|
||||
}
|
||||
|
||||
#rules
|
||||
[ -z "$(grep "^Rule:" "$YML_FILE")" ] && {
|
||||
sed -i "s/^ \{1,\}Rule:/Rule:/g" "$YML_FILE" 2>/dev/null
|
||||
[ -z "$(grep "^rules:" "$YML_FILE")" ] && {
|
||||
sed -i "s/^ \{1,\}rules:/rules:/g" "$YML_FILE" 2>/dev/null
|
||||
}
|
||||
[ -z "$(grep "^rules:" "$YML_FILE")" ] && {
|
||||
sed -i "s/^ \{0,\}Rule:/rules:/g" "$YML_FILE" 2>/dev/null
|
||||
}
|
||||
|
||||
#rule-providers:
|
||||
[ -z "$(grep "^rule-providers:" "$YML_FILE")" ] && {
|
||||
sed -i "s/^ \{1,\}rule-providers:/rule-providers:/g" "$YML_FILE" 2>/dev/null
|
||||
}
|
||||
|
||||
#script:
|
||||
[ -z "$(grep "^script:" "$YML_FILE")" ] && {
|
||||
sed -i "s/^ \{1,\}script:/script:/g" "$YML_FILE" 2>/dev/null
|
||||
}
|
||||
[ -z "$(grep "^Rule:" "$YML_FILE")" ] && {
|
||||
sed -i "s/^ \{0,\}rules:/Rule:/g" "$YML_FILE" 2>/dev/null
|
||||
}
|
||||
@ -47,12 +47,12 @@ echo "开始更新【$CONFIG_NAME】的策略组配置..." >$START_LOG
|
||||
}
|
||||
|
||||
#判断各个区位置
|
||||
group_len=$(sed -n '/^ \{0,\}Proxy Group:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
provider_len=$(sed -n '/^ \{0,\}proxy-provider:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
group_len=$(sed -n '/^ \{0,\}proxy-groups:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
provider_len=$(sed -n '/^ \{0,\}proxy-providers:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
if [ "$provider_len" -ge "$group_len" ]; then
|
||||
awk '/Proxy Group:/,/proxy-provider:/{print}' "$CONFIG_FILE" 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
|
||||
awk '/proxy-groups:/,/proxy-providers:/{print}' "$CONFIG_FILE" 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
|
||||
else
|
||||
awk '/Proxy Group:/,/Rule:/{print}' "$CONFIG_FILE" 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
|
||||
awk '/proxy-groups:/,/rules:/{print}' "$CONFIG_FILE" 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 2>/dev/null
|
||||
|
||||
#判断当前配置文件是否有策略组信息
|
||||
|
||||
@ -1,8 +1,33 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
. /lib/functions.sh
|
||||
|
||||
CFG_FILE=$(uci get openclash.config.config_path 2>/dev/null)
|
||||
UPDATE_CONFIG_FILE=$(uci get openclash.config.config_update_path 2>/dev/null)
|
||||
|
||||
get_nextlen()
|
||||
{
|
||||
|
||||
if [ "$#" -eq 0 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
for i in $@
|
||||
do
|
||||
if [ -z "$group_len" ]; then
|
||||
break
|
||||
fi
|
||||
|
||||
if [ "$group_len" -ge "$i" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "$next_len" -gt "$i" ] || [ -z "$next_len" ]; then
|
||||
next_len="$i"
|
||||
fi
|
||||
done 2>/dev/null
|
||||
|
||||
}
|
||||
|
||||
if [ ! -z "$UPDATE_CONFIG_FILE" ]; then
|
||||
CFG_FILE="$UPDATE_CONFIG_FILE"
|
||||
fi
|
||||
@ -16,12 +41,16 @@ if [ -f "$CFG_FILE" ]; then
|
||||
/usr/share/openclash/yml_field_name_ch.sh "$CFG_FILE"
|
||||
|
||||
#判断各个区位置
|
||||
group_len=$(sed -n '/^Proxy Group:/=' "$CFG_FILE" 2>/dev/null)
|
||||
provider_len=$(sed -n '/proxy-provider:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
if [ "$provider_len" -ge "$group_len" ]; then
|
||||
awk '/Proxy Group:/,/proxy-provider:/{print}' "$CFG_FILE" 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
|
||||
group_len=$(sed -n '/^proxy-groups:/=' "$CFG_FILE" 2>/dev/null)
|
||||
provider_len=$(sed -n '/proxy-providers:/=' "$CFG_FILE" 2>/dev/null)
|
||||
rule_provider_len=$(sed -n '/^rule-providers:/=' "$CFG_FILE" 2>/dev/null)
|
||||
script_len=$(sed -n '/^script:/=' "$CFG_FILE" 2>/dev/null)
|
||||
get_nextlen "$provider_len" "$rule_provider_len" "$script_len"
|
||||
|
||||
if [ -n "$next_len" ]; then
|
||||
sed -n "${group_len},${next_len}p" "$CFG_FILE" 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
|
||||
else
|
||||
awk '/Proxy Group:/,/Rule:/{print}' "$CFG_FILE" 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
|
||||
awk '/proxy-groups:/,/rules:/{print}' "$CFG_FILE" 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
|
||||
|
||||
@ -245,7 +245,7 @@ if [ "$create_config" = "0" ] || [ "$servers_if_update" = "1" ] || [ ! -z "$if_g
|
||||
else
|
||||
if [ -z "$if_game_group" ]; then
|
||||
echo "开始写入配置文件【$CONFIG_NAME】的策略组信息..." >$START_LOG
|
||||
echo "Proxy Group:" >$GROUP_FILE
|
||||
echo "proxy-groups:" >$GROUP_FILE
|
||||
else
|
||||
echo "开始加入游戏策略组【$if_game_group】的信息..." >$START_LOG
|
||||
rm -rf $GROUP_FILE
|
||||
|
||||
@ -34,22 +34,22 @@ fi
|
||||
|
||||
#判断各个区位置
|
||||
proxy_len=$(sed -n '/^ \{0,\}Proxy:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
group_len=$(sed -n '/^ \{0,\}Proxy Group:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
provider_len=$(sed -n '/^ \{0,\}proxy-provider:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
group_len=$(sed -n '/^ \{0,\}proxy-groups:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
provider_len=$(sed -n '/^ \{0,\}proxy-providers:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
|
||||
if [ "$provider_len" -ge "$proxy_len" ] && [ "$provider_len" -le "$group_len" ]; then
|
||||
awk '/^ {0,}Proxy:/,/^ {0,}proxy-provider:/{print}' "$CONFIG_FILE" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_proxy.yaml 2>&1
|
||||
awk '/^ {0,}proxy-provider:/,/^ {0,}Proxy Group:/{print}' "$CONFIG_FILE" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_provider.yaml 2>&1
|
||||
awk '/^ {0,}Proxy:/,/^ {0,}proxy-providers:/{print}' "$CONFIG_FILE" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_proxy.yaml 2>&1
|
||||
awk '/^ {0,}proxy-providers:/,/^ {0,}proxy-groups:/{print}' "$CONFIG_FILE" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_provider.yaml 2>&1
|
||||
elif [ "$provider_len" -le "$proxy_len" ]; then
|
||||
awk '/^ {0,}Proxy:/,/^ {0,}Proxy Group:/{print}' "$CONFIG_FILE" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_proxy.yaml 2>&1
|
||||
awk '/^ {0,}proxy-provider:/,/^ {0,}Proxy:/{print}' "$CONFIG_FILE" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_provider.yaml 2>&1
|
||||
awk '/^ {0,}Proxy:/,/^ {0,}proxy-groups:/{print}' "$CONFIG_FILE" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_proxy.yaml 2>&1
|
||||
awk '/^ {0,}proxy-providers:/,/^ {0,}Proxy:/{print}' "$CONFIG_FILE" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_provider.yaml 2>&1
|
||||
elif [ "$provider_len" -ge "$group_len" ]; then
|
||||
awk '/^ {0,}Proxy:/,/^ {0,}Proxy Group:/{print}' "$CONFIG_FILE" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_proxy.yaml 2>&1
|
||||
awk '/^ {0,}proxy-provider:/,/^ {0,}Rule:/{print}' "$CONFIG_FILE" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_provider.yaml 2>&1
|
||||
awk '/^ {0,}Proxy:/,/^ {0,}proxy-groups:/{print}' "$CONFIG_FILE" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_proxy.yaml 2>&1
|
||||
awk '/^ {0,}proxy-providers:/,/^ {0,}rules:/{print}' "$CONFIG_FILE" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_provider.yaml 2>&1
|
||||
elif [ "$provider_len" -le "$group_len" ]; then
|
||||
awk '/^ {0,}proxy-provider:/,/^ {0,}Proxy Group:/{print}' "$CONFIG_FILE" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_provider.yaml 2>&1
|
||||
awk '/^ {0,}proxy-providers:/,/^ {0,}proxy-groups:/{print}' "$CONFIG_FILE" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_provider.yaml 2>&1
|
||||
else
|
||||
awk '/^ {0,}Proxy:/,/^ {0,}Proxy Group:/{print}' "$CONFIG_FILE" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_proxy.yaml 2>&1
|
||||
awk '/^ {0,}Proxy:/,/^ {0,}proxy-groups:/{print}' "$CONFIG_FILE" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_proxy.yaml 2>&1
|
||||
fi
|
||||
|
||||
CFG_FILE="/etc/config/openclash"
|
||||
@ -79,8 +79,8 @@ sed -i 's/\"//g' $provider_file 2>/dev/null
|
||||
sed -i '/^ *$/d' $provider_file 2>/dev/null
|
||||
sed -i '/^ \{0,\}#/d' $provider_file 2>/dev/null
|
||||
sed -i 's/\t/ /g' $provider_file 2>/dev/null
|
||||
provider_line=$(awk '{print $0"#*#"FNR}' $provider_file 2>/dev/null |grep -v '^ \{0,\}proxy-provider:\|^ \{0,\}Proxy:\|^ \{0,\}Proxy Group:\|^ \{0,\}Rule:\|^ \{0,\}type:\|^ \{0,\}path:\|^ \{0,\}url:\|^ \{0,\}interval:\|^ \{0,\}health-check:\|^ \{0,\}enable:' |awk -F '#*#' '{print $3}')
|
||||
provider_num=$(grep -c "^ \{0,\}type:" $provider_file 2>/dev/null)
|
||||
provider_line=$(awk '{print $0"#*#"FNR}' $provider_file 2>/dev/null |grep -v '^ \{0,\}proxy-providers:\|^ \{0,\}Proxy:\|^ \{0,\}proxy-groups:\|^ \{0,\}rules:\|^ \{0,\}type:\|^ \{0,\}path:\|^ \{0,\}url:\|^ \{0,\}interval:\|^ \{0,\}health-check:\|^ \{0,\}enable:' |awk -F '#*#' '{print $3}')
|
||||
provider_num=$(grep -c "type:" $provider_file 2>/dev/null)
|
||||
provider_count=1
|
||||
|
||||
cfg_get()
|
||||
|
||||
@ -481,7 +481,7 @@ config_load "openclash"
|
||||
config_foreach new_servers_group_set "config_subscribe"
|
||||
#proxy-provider
|
||||
echo "开始写入配置文件【$CONFIG_NAME】的代理集信息..." >$START_LOG
|
||||
echo "proxy-provider:" >$PROXY_PROVIDER_FILE
|
||||
echo "proxy-providers:" >$PROXY_PROVIDER_FILE
|
||||
rm -rf /tmp/Proxy_Provider
|
||||
config_foreach yml_proxy_provider_set "proxy-provider"
|
||||
sed -i "s/^ \{0,\}/ - /" /tmp/Proxy_Provider 2>/dev/null #添加参数
|
||||
@ -507,7 +507,7 @@ fi
|
||||
#一键创建配置文件
|
||||
if [ "$rule_sources" = "ConnersHua" ] && [ "$servers_if_update" != "1" ] && [ -z "$if_game_proxy" ]; then
|
||||
echo "使用ConnersHua规则创建中..." >$START_LOG
|
||||
echo "Proxy Group:" >>$SERVER_FILE
|
||||
echo "proxy-groups:" >>$SERVER_FILE
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
- name: Auto - UrlTest
|
||||
type: url-test
|
||||
@ -607,7 +607,7 @@ ${UCI_SET}Others="Others"
|
||||
}
|
||||
elif [ "$rule_sources" = "lhie1" ] && [ "$servers_if_update" != "1" ] && [ -z "$if_game_proxy" ]; then
|
||||
echo "使用lhie1规则创建中..." >$START_LOG
|
||||
echo "Proxy Group:" >>$SERVER_FILE
|
||||
echo "proxy-groups:" >>$SERVER_FILE
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
- name: Auto - UrlTest
|
||||
type: url-test
|
||||
@ -825,7 +825,7 @@ ${UCI_SET}Others="Others"
|
||||
}
|
||||
elif [ "$rule_sources" = "ConnersHua_return" ] && [ "$servers_if_update" != "1" ] && [ -z "$if_game_proxy" ]; then
|
||||
echo "使用ConnersHua回国规则创建中..." >$START_LOG
|
||||
echo "Proxy Group:" >>$SERVER_FILE
|
||||
echo "proxy-groups:" >>$SERVER_FILE
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
- name: Auto - UrlTest
|
||||
type: url-test
|
||||
@ -876,7 +876,7 @@ ${UCI_SET}Others="Others"
|
||||
fi
|
||||
|
||||
if [ "$create_config" != "0" ] && [ "$servers_if_update" != "1" ] && [ -z "$if_game_proxy" ]; then
|
||||
echo "Rule:" >>$SERVER_FILE
|
||||
echo "rules:" >>$SERVER_FILE
|
||||
echo "配置文件【$CONFIG_NAME】创建完成,正在更新服务器、代理集、策略组信息..." >$START_LOG
|
||||
cat "$PROXY_PROVIDER_FILE" > "$CONFIG_FILE" 2>/dev/null
|
||||
cat "$SERVER_FILE" >> "$CONFIG_FILE" 2>/dev/null
|
||||
@ -885,23 +885,23 @@ elif [ -z "$if_game_proxy" ]; then
|
||||
echo "服务器、代理集、策略组信息修改完成,正在更新配置文件【$CONFIG_NAME】..." >$START_LOG
|
||||
#判断各个区位置
|
||||
proxy_len=$(sed -n '/^Proxy:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
group_len=$(sed -n '/^ \{0,\}Proxy Group:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
provider_len=$(sed -n '/^proxy-provider:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
group_len=$(sed -n '/^ \{0,\}proxy-groups:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
provider_len=$(sed -n '/^proxy-providers:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
if [ "$provider_len" -le "$proxy_len" ]; then
|
||||
sed -i '/^ \{0,\}proxy-provider:/i\#change server#' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}Rule:/i\#change server end#' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}proxy-provider:/,/#change server end#/d' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}proxy-providers:/i\#change server#' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}rules:/i\#change server end#' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}proxy-providers:/,/#change server end#/d' "$CONFIG_FILE" 2>/dev/null
|
||||
elif [ "$provider_len" -le "$group_len" ] && [ -z "$proxy_len" ]; then
|
||||
sed -i '/^ \{0,\}proxy-provider:/i\#change server#' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}Rule:/i\#change server end#' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}proxy-provider:/,/#change server end#/d' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}proxy-providers:/i\#change server#' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}rules:/i\#change server end#' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}proxy-providers:/,/#change server end#/d' "$CONFIG_FILE" 2>/dev/null
|
||||
elif [ "$provider_len" -ge "$group_len" ] && [ -z "$proxy_len" ]; then
|
||||
sed -i '/^ \{0,\}Proxy Group:/i\#change server#' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}Rule:/i\#change server end#' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}Proxy Group:/,/#change server end#/d' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}proxy-groups:/i\#change server#' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}rules:/i\#change server end#' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}proxy-groups:/,/#change server end#/d' "$CONFIG_FILE" 2>/dev/null
|
||||
else
|
||||
sed -i '/^ \{0,\}Proxy:/i\#change server#' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}Rule:/i\#change server end#' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}rules:/i\#change server end#' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}Proxy:/,/#change server end#/d' "$CONFIG_FILE" 2>/dev/null
|
||||
fi
|
||||
|
||||
|
||||
@ -129,44 +129,44 @@ if [ "$2" != 0 ]; then
|
||||
|
||||
if [ "$check_def" -eq 1 ]; then
|
||||
if [ "$2" = "lhie1" ]; then
|
||||
sed -i '/^Rule:/,$d' "$4"
|
||||
sed -i '/^rules:/,$d' "$4"
|
||||
cat /etc/openclash/lhie1.yaml >> "$4"
|
||||
sed -i -e "s/,GlobalTV$/,${GlobalTV}#d/g" -e "/Rule:/a\##GlobalTV:${GlobalTV}"\
|
||||
-e "s/,AsianTV$/,${AsianTV}#d/g" -e "/Rule:/a\##AsianTV:${AsianTV}"\
|
||||
-e "s/,Proxy$/,${Proxy}#d/g" -e "/Rule:/a\##Proxy:${Proxy}"\
|
||||
sed -i -e "s/,GlobalTV$/,${GlobalTV}#d/g" -e "/rules:/a\##GlobalTV:${GlobalTV}"\
|
||||
-e "s/,AsianTV$/,${AsianTV}#d/g" -e "/rules:/a\##AsianTV:${AsianTV}"\
|
||||
-e "s/,Proxy$/,${Proxy}#d/g" -e "/rules:/a\##Proxy:${Proxy}"\
|
||||
-e "s/,Apple$/,${Apple}#d/g"\
|
||||
-e "s/,Apple,no-resolve$/,${Apple},no-resolve#d/g" -e "/Rule:/a\##Apple:${Apple}"\
|
||||
-e "s/,Netflix$/,${Netflix}#d/g" -e "/Rule:/a\##Netflix:${Netflix}"\
|
||||
-e "s/,Spotify$/,${Spotify}#d/g" -e "/Rule:/a\##Spotify:${Spotify}"\
|
||||
-e "s/,Steam$/,${Steam}#d/g" -e "/Rule:/a\##Steam:${Steam}"\
|
||||
-e "s/,AdBlock$/,${AdBlock}#d/g" -e "/Rule:/a\##AdBlock:${AdBlock}"\
|
||||
-e "s/,Netease Music$/,${Netease_Music}#d/g" -e "/Rule:/a\##Netease_Music:${Netease_Music}"\
|
||||
-e "s/,Speedtest$/,${Speedtest}#d/g" -e "/Rule:/a\##Speedtest:${Speedtest}"\
|
||||
-e "s/,Telegram$/,${Telegram}#d/g" -e "/Rule:/a\##Telegram:${Telegram}"\
|
||||
-e "s/,Microsoft$/,${Microsoft}#d/g" -e "/Rule:/a\##Microsoft:${Microsoft}"\
|
||||
-e "s/,PayPal$/,${PayPal}#d/g" -e "/Rule:/a\##PayPal:${PayPal}"\
|
||||
-e "s/,Domestic$/,${Domestic}#d/g" -e "/Rule:/a\##Domestic:${Domestic}"\
|
||||
-e "s/,Others$/,${Others}#d/g" -e "/Rule:/a\##Others:${Others}"\
|
||||
-e "s/,Apple,no-resolve$/,${Apple},no-resolve#d/g" -e "/rules:/a\##Apple:${Apple}"\
|
||||
-e "s/,Netflix$/,${Netflix}#d/g" -e "/rules:/a\##Netflix:${Netflix}"\
|
||||
-e "s/,Spotify$/,${Spotify}#d/g" -e "/rules:/a\##Spotify:${Spotify}"\
|
||||
-e "s/,Steam$/,${Steam}#d/g" -e "/rules:/a\##Steam:${Steam}"\
|
||||
-e "s/,AdBlock$/,${AdBlock}#d/g" -e "/rules:/a\##AdBlock:${AdBlock}"\
|
||||
-e "s/,Netease Music$/,${Netease_Music}#d/g" -e "/rules:/a\##Netease_Music:${Netease_Music}"\
|
||||
-e "s/,Speedtest$/,${Speedtest}#d/g" -e "/rules:/a\##Speedtest:${Speedtest}"\
|
||||
-e "s/,Telegram$/,${Telegram}#d/g" -e "/rules:/a\##Telegram:${Telegram}"\
|
||||
-e "s/,Microsoft$/,${Microsoft}#d/g" -e "/rules:/a\##Microsoft:${Microsoft}"\
|
||||
-e "s/,PayPal$/,${PayPal}#d/g" -e "/rules:/a\##PayPal:${PayPal}"\
|
||||
-e "s/,Domestic$/,${Domestic}#d/g" -e "/rules:/a\##Domestic:${Domestic}"\
|
||||
-e "s/,Others$/,${Others}#d/g" -e "/rules:/a\##Others:${Others}"\
|
||||
-e "s/#d//g" "$4"
|
||||
elif [ "$2" = "ConnersHua" ]; then
|
||||
sed -i '/^Rule:/,$d' "$4"
|
||||
sed -i '/^rules:/,$d' "$4"
|
||||
cat /etc/openclash/ConnersHua.yaml >> "$4"
|
||||
sed -i -e "s/,GlobalMedia$/,${GlobalTV}#d/g"\
|
||||
-e "s/,GlobalMedia,no-resolve$/,${GlobalTV},no-resolve#d/g" -e "/Rule:/a\##GlobalTV:${GlobalTV}"\
|
||||
-e "s/,HKMTMedia$/,${AsianTV}#d/g" -e "/Rule:/a\##AsianTV:${AsianTV}"\
|
||||
-e "s/,GlobalMedia,no-resolve$/,${GlobalTV},no-resolve#d/g" -e "/rules:/a\##GlobalTV:${GlobalTV}"\
|
||||
-e "s/,HKMTMedia$/,${AsianTV}#d/g" -e "/rules:/a\##AsianTV:${AsianTV}"\
|
||||
-e "s/,PROXY$/,${Proxy}#d/g"\
|
||||
-e "s/,PROXY,no-resolve$/,${Proxy},no-resolve#d/g" -e "/Rule:/a\##Proxy:${Proxy}"\
|
||||
-e "s/,Apple$/,${Apple}#d/g" -e "/Rule:/a\##Apple:${Apple}"\
|
||||
-e "s/,PROXY,no-resolve$/,${Proxy},no-resolve#d/g" -e "/rules:/a\##Proxy:${Proxy}"\
|
||||
-e "s/,Apple$/,${Apple}#d/g" -e "/rules:/a\##Apple:${Apple}"\
|
||||
-e "s/,Hijacking,no-resolve$/,${AdBlock},no-resolve#d/g"\
|
||||
-e "s/,Hijacking$/,${AdBlock}#d/g" -e "/Rule:/a\##AdBlock:${AdBlock}"\
|
||||
-e "s/,DIRECT$/,${Domestic}#d/g" -e "/Rule:/a\##Domestic:${Domestic}"\
|
||||
-e "s/,Final$/,${Others}#d/g" -e "/Rule:/a\##Others:${Others}"\
|
||||
-e "s/,Hijacking$/,${AdBlock}#d/g" -e "/rules:/a\##AdBlock:${AdBlock}"\
|
||||
-e "s/,DIRECT$/,${Domestic}#d/g" -e "/rules:/a\##Domestic:${Domestic}"\
|
||||
-e "s/,Final$/,${Others}#d/g" -e "/rules:/a\##Others:${Others}"\
|
||||
-e "s/#d//g" "$4"
|
||||
else
|
||||
sed -i '/^Rule:/,$d' "$4"
|
||||
sed -i '/^rules:/,$d' "$4"
|
||||
cat /etc/openclash/ConnersHua_return.yaml >> "$4"
|
||||
sed -i -e "s/,PROXY$/,${Proxy}#d/g" -e "/Rule:/a\##Proxy:${Proxy}"\
|
||||
-e "s/,DIRECT$/,${Others}#d/g" -e "/Rule:/a\##Others:${Others}"\
|
||||
sed -i -e "s/,PROXY$/,${Proxy}#d/g" -e "/rules:/a\##Proxy:${Proxy}"\
|
||||
-e "s/,DIRECT$/,${Others}#d/g" -e "/rules:/a\##Others:${Others}"\
|
||||
-e "s/#d//g" "$4"
|
||||
fi
|
||||
fi
|
||||
@ -176,8 +176,8 @@ elif [ "$2" = 0 ]; then
|
||||
grep '##source:' "$4" 1>/dev/null
|
||||
if [ "$?" -eq "0" ]; then
|
||||
cp "$8" /etc/openclash/configrules.bak
|
||||
sed -i -n '/^Rule:/,$p' /etc/openclash/configrules.bak
|
||||
sed -i '/^Rule:/,$d' "$4"
|
||||
sed -i -n '/^rules:/,$p' /etc/openclash/configrules.bak
|
||||
sed -i '/^rules:/,$d' "$4"
|
||||
cat /etc/openclash/configrules.bak >> "$4"
|
||||
rm -rf /etc/openclash/configrules.bak
|
||||
fi
|
||||
@ -226,8 +226,8 @@ fi
|
||||
fi
|
||||
|
||||
if [ "$3" = 1 ]; then
|
||||
sed -i '/^Rule:/a\##Custom Rules End##' "$4" 2>/dev/null
|
||||
sed -i '/^Rule:/a\##Custom Rules##' "$4" 2>/dev/null
|
||||
sed -i '/^rules:/a\##Custom Rules End##' "$4" 2>/dev/null
|
||||
sed -i '/^rules:/a\##Custom Rules##' "$4" 2>/dev/null
|
||||
sed -i '/^##Custom Rules##/r/etc/openclash/custom/openclash_custom_rules.list' "$4" 2>/dev/null
|
||||
sed -i '/^ \{0,\}- MATCH,/i\##Custom Rules 2##' "$4" 2>/dev/null\
|
||||
|| sed -i '/^ \{0,\}- FINAL,/i\##Custom Rules 2##' "$4" 2>/dev/null\
|
||||
|
||||
@ -131,6 +131,15 @@ msgstr "Global【全局代理(需前往控制面板手动指定节点)】"
|
||||
msgid "Direct Proxy Mode"
|
||||
msgstr "Direct【全局直连】"
|
||||
|
||||
msgid "Script Proxy Mode (Tun Core Only)"
|
||||
msgstr "Script【脚本模式 - 仅Tun内核】"
|
||||
|
||||
msgid "Select Stack Type"
|
||||
msgstr "网络栈类型"
|
||||
|
||||
msgid "Select Stack Type For Tun Mode, According To The Running Speed on Your Machine"
|
||||
msgstr "请自行根据运行速度为Tun模式选择合适的网络栈"
|
||||
|
||||
msgid "Log Level"
|
||||
msgstr "日志等级"
|
||||
|
||||
@ -234,9 +243,9 @@ msgid "(Communication protocol)"
|
||||
msgstr "(通讯协议)"
|
||||
|
||||
msgid "Enable ipv6 Resolve"
|
||||
msgstr "IPV6类型DNS解析"
|
||||
msgstr "允许IPV6类型DNS解析"
|
||||
|
||||
msgid "Force Enable to Resolve ipv6 DNS Requests"
|
||||
msgid "Enable Clash to Resolve ipv6 DNS Requests"
|
||||
msgstr ""
|
||||
"固件须配置好IPV6的NAT,如你不使用IPV6请关闭固件的相关服务,避免客户端连接出现异常"
|
||||
|
||||
@ -255,6 +264,9 @@ msgstr "上传文件类型"
|
||||
msgid "Proxy Provider File"
|
||||
msgstr "代理集文件"
|
||||
|
||||
msgid "Rule Provider File"
|
||||
msgstr "规则集文件"
|
||||
|
||||
msgid "Upload"
|
||||
msgstr "上传"
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# Copyright (C) 2016 Openwrt.org
|
||||
# Copyright (C) 2020 Openwrt.org
|
||||
#
|
||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||
#
|
||||
@ -10,7 +10,7 @@ LUCI_DEPENDS:=+adbyby +wget +ipset +dnsmasq-full
|
||||
LUCI_PKGARCH:=all
|
||||
PKG_NAME:=luci-app-adbyby-plus
|
||||
PKG_VERSION:=2.0
|
||||
PKG_RELEASE:=71
|
||||
PKG_RELEASE:=72
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
|
||||
@ -22,6 +22,11 @@ o.title = translate("Block Apple iOS OTA update")
|
||||
o.default = 0
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(Flag, "block_douyin")
|
||||
o.title = translate("Block Douyin APP and Website")
|
||||
o.default = 0
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(Flag, "cron_mode")
|
||||
o.title = translate("Update the rule at 6 a.m. every morning and restart adbyby")
|
||||
o.default = 0
|
||||
|
||||
@ -112,6 +112,9 @@ msgstr "手动更新规则"
|
||||
msgid "Block Apple iOS OTA update"
|
||||
msgstr "拦截 Apple iOS 的OTA更新"
|
||||
|
||||
msgid "Block Douyin APP and Website"
|
||||
msgstr "拦截 抖音 APP 和网站"
|
||||
|
||||
msgid "RAM Running Mode"
|
||||
msgstr "内存运行模式"
|
||||
|
||||
|
||||
@ -34,6 +34,7 @@ get_config()
|
||||
config_get wan_mode $1 wan_mode 1
|
||||
config_get_bool block_ios $1 block_ios 0
|
||||
config_get_bool mem_mode $1 mem_mode 1
|
||||
config_get_bool block_douyin $1 block_douyin 0
|
||||
}
|
||||
|
||||
add_rules()
|
||||
@ -131,6 +132,13 @@ add_dns()
|
||||
echo 'conf-dir=/tmp/adbyby/rules/data' >> /tmp/dnsmasq.d/dnsmasq-adbyby.conf
|
||||
|
||||
[ $block_ios -eq 1 ] && echo 'address=/mesu.apple.com/0.0.0.0' >> /tmp/dnsmasq.d/dnsmasq-adbyby.conf
|
||||
if [ $block_douyin -eq 1 ]; then
|
||||
cat <<-EOF >/tmp/etc/dnsmasq-adbyby.d/08-dnsmasq.douyin
|
||||
address=/api.amemv.com/0.0.0.0
|
||||
address=/.snssdk.com/0.0.0.0
|
||||
address=/.douyin.com/0.0.0.0
|
||||
EOF
|
||||
fi
|
||||
}
|
||||
|
||||
del_dns()
|
||||
@ -201,7 +209,7 @@ start()
|
||||
|
||||
add_dns
|
||||
add_rule
|
||||
/etc/init.d/dnsmasq reload
|
||||
/etc/init.d/dnsmasq restart
|
||||
fi
|
||||
}
|
||||
|
||||
@ -213,7 +221,7 @@ stop()
|
||||
del_rule
|
||||
del_cron
|
||||
del_dns
|
||||
/etc/init.d/dnsmasq reload
|
||||
/etc/init.d/dnsmasq restart
|
||||
}
|
||||
|
||||
boot()
|
||||
|
||||
@ -9,7 +9,7 @@ LUCI_TITLE:=LuCI support for IPSec VPN Server (IKEv1 with PSK and Xauth)
|
||||
LUCI_DEPENDS:=+strongswan-minimal +strongswan-mod-xauth-generic
|
||||
LUCI_PKGARCH:=all
|
||||
PKG_VERSION:=1.0
|
||||
PKG_RELEASE:=8
|
||||
PKG_RELEASE:=7
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
|
||||
@ -2,12 +2,10 @@ iptables -D FORWARD -m policy --dir in --pol ipsec --proto esp -j ACCEPT 2>/dev
|
||||
iptables -D FORWARD -m policy --dir out --pol ipsec --proto esp -j ACCEPT 2>/dev/null
|
||||
iptables -D INPUT -m policy --dir in --pol ipsec --proto esp -j ACCEPT 2>/dev/null
|
||||
iptables -D OUTPUT -m policy --dir out --pol ipsec --proto esp -j ACCEPT 2>/dev/null
|
||||
iptables -D FORWARD -p tcp --syn -i ppp+ -j TCPMSS --set-mss 1356 2>/dev/null
|
||||
|
||||
iptables -I FORWARD -m policy --dir in --pol ipsec --proto esp -j ACCEPT
|
||||
iptables -I FORWARD -m policy --dir out --pol ipsec --proto esp -j ACCEPT
|
||||
iptables -I INPUT -m policy --dir in --pol ipsec --proto esp -j ACCEPT
|
||||
iptables -I OUTPUT -m policy --dir out --pol ipsec --proto esp -j ACCEPT
|
||||
iptables -I FORWARD -p tcp --syn -i ppp+ -j TCPMSS --set-mss 1356
|
||||
|
||||
echo 1 > /proc/sys/net/ipv4/conf/br-lan/proxy_arp
|
||||
|
||||
@ -55,7 +55,10 @@ ro.enabled = "yes"
|
||||
ro.disabled = "no"
|
||||
|
||||
fr = s:option(Flag, "force_root", translate("Force Root"))
|
||||
fr.rmempty = false
|
||||
fr.default = "1"
|
||||
fr.enabled = "1"
|
||||
fr.disabled = "0"
|
||||
|
||||
-- s:option(Value, "users", translate("Allowed users")).rmempty = true
|
||||
|
||||
|
||||
@ -7,8 +7,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-unblockmusic
|
||||
PKG_VERSION:=2.3.1
|
||||
PKG_RELEASE:=42
|
||||
PKG_VERSION:=2.3.5
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_CONFIG_DEPENDS := \
|
||||
CONFIG_UnblockNeteaseMusic_Go \
|
||||
|
||||
@ -52,6 +52,12 @@ flac.rmempty = false
|
||||
flac.description = translate("目前仅支持酷我、QQ、咪咕")
|
||||
flac:depends("apptype", "nodejs")
|
||||
|
||||
force = s:option(Flag, "force_enabled", translate("强制替换为高音质歌曲"))
|
||||
force.default = 1
|
||||
force.rmempty = false
|
||||
force.description = translate("如果歌曲音质在 320Kbps 以内,则尝试强制替换为高音质版本")
|
||||
force:depends("apptype", "nodejs")
|
||||
|
||||
o = s:option(Flag, "autoupdate")
|
||||
o.title = translate("自动检查更新主程序")
|
||||
o.default = 0
|
||||
|
||||
@ -66,6 +66,7 @@ TYPE=$(uci_get_by_type unblockmusic musicapptype default)
|
||||
AUTOUPDATE=$(uci_get_by_type unblockmusic autoupdate 0)
|
||||
APPTYPE=$(uci_get_by_type unblockmusic apptype go)
|
||||
FLAC=$(uci_get_by_type unblockmusic flac_enabled 0)
|
||||
FORCE=$(uci_get_by_type unblockmusic force_enabled 0)
|
||||
|
||||
CLOUD=$(uci_get_by_type unblockmusic cloudserver "127.0.0.1:5200:5201")
|
||||
cloudadd=$(echo "$CLOUD" | awk -F ':' '{print $1}')
|
||||
@ -171,9 +172,13 @@ start()
|
||||
|
||||
if [ "$APPTYPE" == "nodejs" ]; then
|
||||
if [ $FLAC -eq 1 ]; then
|
||||
export ENABLE_FLAC=true
|
||||
export ENABLE_FLAC=true
|
||||
fi
|
||||
node /usr/share/UnblockNeteaseMusic/app.js -e http://music.163.com -p 5200:5201 $musictype >>/tmp/unblockmusic.log 2>&1 &
|
||||
if [ $FORCE -eq 1 ]; then
|
||||
sed -i '/item.code != 200/ { s/item.code != 200 || item.freeTrialInfo/item.br < 320000/g; }' /usr/share/UnblockNeteaseMusic/src/hook.js
|
||||
fi
|
||||
node /usr/share/UnblockNeteaseMusic/app.js -e http://music.163.com -p 5200 $musictype >>/tmp/unblockmusic.log 2>&1 &
|
||||
node /usr/share/UnblockNeteaseMusic/app.js -e https://music.163.com -p 5203:5201 $musictype >>/tmp/unblockmusic.log 2>&1 &
|
||||
add_cron
|
||||
echo "$(date -R) # UnblockNeteaseMusic Nodejs Version (http:5200, https:5201)" >>/tmp/unblockmusic.log
|
||||
elif [ "$APPTYPE" == "go" ]; then
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=hostapd
|
||||
PKG_RELEASE:=9
|
||||
PKG_RELEASE:=10
|
||||
|
||||
PKG_SOURCE_URL:=http://w1.fi/hostap.git
|
||||
PKG_SOURCE_PROTO:=git
|
||||
|
||||
@ -0,0 +1,31 @@
|
||||
From 6a28c4dbc102de3fed9db44637f47a10e7adfb78 Mon Sep 17 00:00:00 2001
|
||||
From: Jouni Malinen <j@w1.fi>
|
||||
Date: Sat, 16 May 2020 21:01:51 +0300
|
||||
Subject: [PATCH 1/3] wolfssl: Fix compiler warnings on size_t printf format
|
||||
use
|
||||
|
||||
Signed-off-by: Jouni Malinen <j@w1.fi>
|
||||
---
|
||||
src/crypto/tls_wolfssl.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/src/crypto/tls_wolfssl.c
|
||||
+++ b/src/crypto/tls_wolfssl.c
|
||||
@@ -1741,7 +1741,7 @@ struct wpabuf * tls_connection_encrypt(v
|
||||
if (!conn)
|
||||
return NULL;
|
||||
|
||||
- wpa_printf(MSG_DEBUG, "SSL: encrypt: %ld bytes", wpabuf_len(in_data));
|
||||
+ wpa_printf(MSG_DEBUG, "SSL: encrypt: %zu bytes", wpabuf_len(in_data));
|
||||
|
||||
wolfssl_reset_out_data(&conn->output);
|
||||
|
||||
@@ -1792,7 +1792,7 @@ struct wpabuf * tls_connection_decrypt(v
|
||||
}
|
||||
wpabuf_put(buf, res);
|
||||
|
||||
- wpa_printf(MSG_DEBUG, "SSL: decrypt: %ld bytes", wpabuf_len(buf));
|
||||
+ wpa_printf(MSG_DEBUG, "SSL: decrypt: %zu bytes", wpabuf_len(buf));
|
||||
|
||||
return buf;
|
||||
}
|
||||
@ -0,0 +1,49 @@
|
||||
From eb595b3e3ab531645a5bde71cf6385335b7a4b95 Mon Sep 17 00:00:00 2001
|
||||
From: Jouni Malinen <j@w1.fi>
|
||||
Date: Sat, 16 May 2020 21:02:17 +0300
|
||||
Subject: [PATCH 2/3] wolfssl: Fix crypto_bignum_rand() implementation
|
||||
|
||||
The previous implementation used mp_rand_prime() to generate a random
|
||||
value in range 0..m. That is insanely slow way of generating a random
|
||||
value since mp_rand_prime() is for generating a random _prime_ which is
|
||||
not what is needed here. Replace that implementation with generationg of
|
||||
a random value in the requested range without doing any kind of prime
|
||||
number checks or loops to reject values that are not primes.
|
||||
|
||||
This speeds up SAE and EAP-pwd routines by couple of orders of
|
||||
magnitude..
|
||||
|
||||
Signed-off-by: Jouni Malinen <j@w1.fi>
|
||||
---
|
||||
src/crypto/crypto_wolfssl.c | 12 +++++++-----
|
||||
1 file changed, 7 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/src/crypto/crypto_wolfssl.c
|
||||
+++ b/src/crypto/crypto_wolfssl.c
|
||||
@@ -1084,19 +1084,21 @@ int crypto_bignum_rand(struct crypto_big
|
||||
{
|
||||
int ret = 0;
|
||||
WC_RNG rng;
|
||||
+ size_t len;
|
||||
+ u8 *buf;
|
||||
|
||||
if (TEST_FAIL())
|
||||
return -1;
|
||||
if (wc_InitRng(&rng) != 0)
|
||||
return -1;
|
||||
- if (mp_rand_prime((mp_int *) r,
|
||||
- (mp_count_bits((mp_int *) m) + 7) / 8 * 2,
|
||||
- &rng, NULL) != 0)
|
||||
- ret = -1;
|
||||
- if (ret == 0 &&
|
||||
+ len = (mp_count_bits((mp_int *) m) + 7) / 8;
|
||||
+ buf = os_malloc(len);
|
||||
+ if (!buf || wc_RNG_GenerateBlock(&rng, buf, len) != 0 ||
|
||||
+ mp_read_unsigned_bin((mp_int *) r, buf, len) != MP_OKAY ||
|
||||
mp_mod((mp_int *) r, (mp_int *) m, (mp_int *) r) != 0)
|
||||
ret = -1;
|
||||
wc_FreeRng(&rng);
|
||||
+ bin_clear_free(buf, len);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -0,0 +1,26 @@
|
||||
From 79488da576aeeb9400e1742fab7f463eed0fa7a1 Mon Sep 17 00:00:00 2001
|
||||
From: Jouni Malinen <j@w1.fi>
|
||||
Date: Sat, 16 May 2020 21:07:45 +0300
|
||||
Subject: [PATCH 3/3] wolfssl: Do not hardcode include directory in
|
||||
wpa_supplicant build
|
||||
|
||||
This is not really appropriate for any kind of cross compilations and is
|
||||
not really needed in general since system specific values can be set in
|
||||
.config.
|
||||
|
||||
Signed-off-by: Jouni Malinen <j@w1.fi>
|
||||
---
|
||||
wpa_supplicant/Makefile | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/wpa_supplicant/Makefile
|
||||
+++ b/wpa_supplicant/Makefile
|
||||
@@ -1086,7 +1086,7 @@ endif
|
||||
|
||||
ifeq ($(CONFIG_TLS), wolfssl)
|
||||
ifdef TLS_FUNCS
|
||||
-CFLAGS += -DWOLFSSL_DER_LOAD -I/usr/local/include/wolfssl
|
||||
+CFLAGS += -DWOLFSSL_DER_LOAD
|
||||
OBJS += ../src/crypto/tls_wolfssl.o
|
||||
endif
|
||||
OBJS += ../src/crypto/crypto_wolfssl.o
|
||||
@ -1,7 +1,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-clash
|
||||
PKG_VERSION:=1.6.8
|
||||
PKG_VERSION:=1.6.9b
|
||||
PKG_MAINTAINER:=frainzy1477
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@ define Package/luci-app-clash
|
||||
CATEGORY:=LuCI
|
||||
SUBMENU:=3. Applications
|
||||
TITLE:=LuCI app for clash
|
||||
DEPENDS:=+luci-base +wget +iptables +coreutils-base64 +coreutils +coreutils-nohup +bash +ipset +libustream-openssl +openssl-util +curl +jsonfilter +ca-certificates +iptables-mod-tproxy
|
||||
DEPENDS:=+luci-base +wget +iptables +coreutils-base64 +coreutils +coreutils-nohup +bash +ipset +libustream-openssl +curl +jsonfilter +ca-certificates +iptables-mod-tproxy
|
||||
PKGARCH:=all
|
||||
MAINTAINER:=frainzy1477
|
||||
endef
|
||||
@ -101,6 +101,8 @@ define Package/$(PKG_NAME)/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib/lua/luci
|
||||
$(INSTALL_DIR) $(1)/usr/share/
|
||||
$(INSTALL_DIR) $(1)/usr/share/clash
|
||||
$(INSTALL_DIR) $(1)/usr/rpcd
|
||||
$(INSTALL_DIR) $(1)/usr/rpcd/acl.d
|
||||
$(INSTALL_DIR) $(1)/usr/share/clash/rules
|
||||
$(INSTALL_DIR) $(1)/usr/share/clash/rules/g_rules
|
||||
$(INSTALL_DIR) $(1)/usr/share/clash/dashboard
|
||||
@ -137,11 +139,13 @@ define Package/$(PKG_NAME)/install
|
||||
$(INSTALL_BIN) ./root/usr/share/clash/logstatus_check $(1)/usr/share/clash/
|
||||
$(INSTALL_BIN) ./root/usr/share/clash/clash.txt $(1)/usr/share/clash/
|
||||
|
||||
$(INSTALL_BIN) ./root/usr/rpcd/acl.d/luci-app-clash.json $(1)/usr/rpcd/acl.d/
|
||||
|
||||
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/index.html $(1)/usr/share/clash/dashboard/
|
||||
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/main.693efc9234a08d249710.css $(1)/usr/share/clash/dashboard/
|
||||
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/main.1560b07adc97ac0ac265.css $(1)/usr/share/clash/dashboard/
|
||||
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/img/ffac0fa1d89f15922b4594863b8b32e9.png $(1)/usr/share/clash/dashboard/img/
|
||||
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/js/1.bundle.693efc9234a08d249710.min.js $(1)/usr/share/clash/dashboard/js/
|
||||
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/js/bundle.693efc9234a08d249710.min.js $(1)/usr/share/clash/dashboard/js/
|
||||
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/js/1.bundle.1560b07adc97ac0ac265.min.js $(1)/usr/share/clash/dashboard/js/
|
||||
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/js/bundle.1560b07adc97ac0ac265.min.js $(1)/usr/share/clash/dashboard/js/
|
||||
$(INSTALL_BIN) ./root/usr/share/clash/yacd/* $(1)/usr/share/clash/yacd/
|
||||
|
||||
$(INSTALL_DATA) ./luasrc/clash.lua $(1)/usr/lib/lua/luci/
|
||||
|
||||
@ -11,7 +11,9 @@ function index()
|
||||
return
|
||||
end
|
||||
|
||||
entry({"admin", "services", "clash"},alias("admin", "services", "clash", "overview"), _("Clash"), 10).dependent = false
|
||||
entry({"admin", "services", "clash"},alias("admin", "services", "clash", "overview"), _("Clash"), 5)
|
||||
page.dependent = true
|
||||
page.acl_depends = { "luci-app-openclash" }
|
||||
entry({"admin", "services", "clash", "overview"},cbi("clash/overview"),_("Overview"), 10).leaf = true
|
||||
entry({"admin", "services", "clash", "client"},cbi("clash/client"),_("Client"), 20).leaf = true
|
||||
|
||||
@ -62,6 +64,13 @@ end
|
||||
|
||||
local fss = require "luci.clash"
|
||||
|
||||
local function uhttp_port()
|
||||
local uhttp_port = luci.sys.exec("uci get uhttpd.main.listen_http |awk -F ':' '{print $NF}'")
|
||||
if uhttp_port ~= "80" then
|
||||
return ":" .. uhttp_port
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local function download_rule()
|
||||
local filename = luci.http.formvalue("filename")
|
||||
@ -82,7 +91,7 @@ function action_update_rule()
|
||||
end
|
||||
|
||||
function action_update()
|
||||
luci.sys.exec("kill $(pgrep /usr/share/clash/update.sh) ; (bash /usr/share/clash/update.sh >/tmp/clash.txt 2>&1) &")
|
||||
luci.sys.exec("kill $(pgrep /usr/share/clash/update.sh) ; (bash /usr/share/clash/update.sh >>/usr/share/clash/clash.txt 2>&1) &")
|
||||
end
|
||||
|
||||
|
||||
@ -310,6 +319,7 @@ function action_status()
|
||||
web = is_web(),
|
||||
clash = is_running(),
|
||||
localip = localip(),
|
||||
uhttp_port = uhttp_port(),
|
||||
dash_port = dash_port(),
|
||||
current_version = current_version(),
|
||||
clash_core = clash_core(),
|
||||
@ -382,15 +392,11 @@ function check_geoip_log()
|
||||
local fdp=tonumber(fs.readfile("/var/run/geoiplog")) or 0
|
||||
local f=io.open("/tmp/geoip_update.txt", "r+")
|
||||
f:seek("set",fdp)
|
||||
local a=f:read(2048000) or ""
|
||||
local a=f:read(2048000) or "."
|
||||
fdp=f:seek()
|
||||
fs.writefile("/var/run/geoiplog",tostring(fdp))
|
||||
f:close()
|
||||
if fs.access("/var/run/geoip_update") then
|
||||
luci.http.write(a)
|
||||
else
|
||||
luci.http.write(a.."\0")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
@ -48,7 +48,7 @@ o:value("1", translate("Enable"))
|
||||
o.description = translate("Set custom rules under Setting=>Others , will take effect when client start")
|
||||
|
||||
o = s:option(Button, "Apply")
|
||||
o.title = translate("Save & Apply")
|
||||
o.title = luci.util.pcdata(translate("Save & Apply"))
|
||||
o.inputtitle = translate("Save & Apply")
|
||||
o.inputstyle = "apply"
|
||||
o.write = function()
|
||||
|
||||
@ -28,7 +28,7 @@ o.description = translate("Download Rule")
|
||||
o.inputstyle = "reload"
|
||||
o.write = function()
|
||||
uci:commit("clash")
|
||||
luci.sys.call("bash /usr/share/clash/rule.sh >>/tmp/clash.txt >/dev/null 2>&1 &")
|
||||
luci.sys.call("bash /usr/share/clash/rule.sh >>/usr/share/clash/clash.txt >/dev/null 2>&1 &")
|
||||
HTTP.redirect(DISP.build_url("admin", "services", "clash", "create"))
|
||||
end
|
||||
|
||||
|
||||
@ -93,7 +93,7 @@ o:depends("tun_mode", 1)
|
||||
|
||||
|
||||
o = s:option(Button, "Apply")
|
||||
o.title = translate("Save & Apply")
|
||||
o.title = luci.util.pcdata(translate("Save & Apply"))
|
||||
o.inputtitle = translate("Save & Apply")
|
||||
o.inputstyle = "apply"
|
||||
o.write = function()
|
||||
|
||||
@ -126,7 +126,7 @@ o.rmempty = true
|
||||
|
||||
o=s:option(Button,"update_geoip")
|
||||
o.inputtitle = translate("Save & Apply")
|
||||
o.title = translate("Save & Apply")
|
||||
o.title = luci.util.pcdata(translate("Save & Apply"))
|
||||
o.inputstyle = "reload"
|
||||
o.write = function()
|
||||
m.uci:commit("clash")
|
||||
|
||||
@ -25,7 +25,7 @@ o:value("24", translate("Every 24 Hours"))
|
||||
o.description = translate("Daily Server subscription update time. Only update config in use")
|
||||
|
||||
o = s:option(Button, "Apply")
|
||||
o.title = translate("Save & Apply")
|
||||
o.title = luci.util.pcdata(translate("Save & Apply"))
|
||||
o.inputtitle = translate("Save & Apply")
|
||||
o.inputstyle = "apply"
|
||||
o.write = function()
|
||||
@ -52,7 +52,7 @@ o.description = translate("Clear Log Time")
|
||||
|
||||
o=s:option(Button,"clear_clear")
|
||||
o.inputtitle = translate("Save & Apply")
|
||||
o.title = translate("Save & Apply")
|
||||
o.title = luci.util.pcdata(translate("Save & Apply"))
|
||||
o.inputstyle = "reload"
|
||||
o.write = function()
|
||||
m.uci:commit("clash")
|
||||
|
||||
@ -87,7 +87,7 @@ o:value("error", "error")
|
||||
o:value("debug", "debug")
|
||||
|
||||
o = s:option(Button, "Apply")
|
||||
o.title = translate("Save & Apply")
|
||||
o.title = luci.util.pcdata(translate("Save & Apply"))
|
||||
o.inputtitle = translate("Save & Apply")
|
||||
o.inputstyle = "apply"
|
||||
o.write = function()
|
||||
|
||||
@ -141,7 +141,7 @@ o:value("linux-mipsle-hardfloat")
|
||||
|
||||
o=s:option(Button,"down_core")
|
||||
o.inputtitle = translate("Save & Apply")
|
||||
o.title = translate("Save & Apply")
|
||||
o.title = luci.util.pcdata(translate("Save & Apply"))
|
||||
o.inputstyle = "reload"
|
||||
o.write = function()
|
||||
k.uci:commit("clash")
|
||||
|
||||
@ -63,13 +63,9 @@ let IP = {
|
||||
throw error;
|
||||
}),
|
||||
parseIPIpip: (ip, elID) => {
|
||||
IP.get(`https://api.skk.moe/network/parseIp/ipip/v3/${ip}`, 'json')
|
||||
IP.get(`https://qqwry.api.skk.moe/${ip}`, 'json')
|
||||
.then(resp => {
|
||||
let x = '';
|
||||
for (let i of resp.data) {
|
||||
x += (i !== '') ? `${i} ` : '';
|
||||
}
|
||||
document.getElementById(elID).innerHTML = x;
|
||||
document.getElementById(elID).innerHTML = resp.data.geo;
|
||||
//$$.getElementById(elID).innerHTML = `${resp.data.country} ${resp.data.regionName} ${resp.data.city} ${resp.data.isp}`;
|
||||
})
|
||||
},
|
||||
@ -126,8 +122,8 @@ var HTTP = {
|
||||
|
||||
}
|
||||
|
||||
function Load()
|
||||
{
|
||||
function Load()
|
||||
{
|
||||
var tbip = document.getElementsByTagName('HEAD').item(0);
|
||||
var tbipScript= document.createElement("script");
|
||||
tbipScript.async = "async";
|
||||
@ -137,7 +133,7 @@ var HTTP = {
|
||||
var sbip = document.getElementsByTagName('HEAD').item(0);
|
||||
var sbipScript= document.createElement("script");
|
||||
sbipScript.async = "async";
|
||||
sbipScript.src='https://api.skk.moe/network/parseIp/ipip/v3';
|
||||
sbipScript.src='https://qqwry.api.skk.moe/';
|
||||
sbip.appendChild( sbipScript);
|
||||
|
||||
|
||||
@ -145,7 +141,11 @@ var HTTP = {
|
||||
const $$ = document;
|
||||
random = parseInt(Math.random() * 100000000);
|
||||
setTimeout("Load()",1000*8);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
var web = document.getElementById('_web');
|
||||
var webb = document.getElementById('_webb');
|
||||
var clash = document.getElementById('_clash');
|
||||
@ -160,14 +160,15 @@ var HTTP = {
|
||||
|
||||
XHR.poll(1, '<%=luci.dispatcher.build_url("admin", "services", "clash", "status")%>', null, function(x, status) {
|
||||
if ( x && x.status == 200 ) {
|
||||
web.innerHTML = status.clash ? '<a type="button" class="btn" style="background-color:black;padding: 5px;" href="http://'+window.location.hostname+':'+status.dash_port+'/ui" target="_blank"/><b><font color="green"><%:DASHBOARD%></font></b></a>' : '<b><font color="red"><%:NOT RUNNING%></font></b>';
|
||||
webb.innerHTML = status.clash ? '<a type="button" class="btn" style="background-color:black;padding: 5px;" href="http://'+window.location.hostname+'/luci-static/yacd?hostname='+ status.localip + '&port=' + status.dash_port + '&secret=' + status.dash_pass +'" target="_blank"/><b><font color="green"><%:DASHBOARD%></font></b></a>' : '<b><font color="red"><%:NOT RUNNING%></font></b>';
|
||||
web.innerHTML = status.clash ? '<a type="button" class="btn" style="background-color:black;padding: 5px;" href="http://'+window.location.hostname+':'+status.dash_port+'/ui" target="_blank"><b><font color="green"><%:DASHBOARD%></font></b></a>' : '<b><font color="red"><%:NOT RUNNING%></font></b>';
|
||||
webb.innerHTML = status.clash ? '<a type="button" class="btn" style="background-color:black;padding: 5px;" href="http://'+window.location.hostname+status.uhttp_port+'/luci-static/yacd?hostname='+ status.localip + '&port=' + status.dash_port + '&secret=' + status.dash_pass +'" target="_blank"><b><font color="green"><%:DASHBOARD%></font></b></a>' : '<b><font color="red"><%:NOT RUNNING%></font></b>';
|
||||
clash.innerHTML = status.clash ? '<b><font color="green"><%:RUNNING%></font> </b>' : '<b><font color="red"><%:NOT RUNNING%></font></b>';
|
||||
ip.innerHTML = status.localip ? '<b><font color="green">'+status.localip+'</font> </b>' : '<em><b><font color="red"><%:NOT SET%></font></b></em>';
|
||||
port.innerHTML = status.dash_port ? '<b><font color="green">'+status.dash_port+'</font> </b>' : '<em><b><font color="red"><%:NOT SET%></font></b></em>';
|
||||
secret.innerHTML = status.dash_pass ? '<b><font color="green">'+status.dash_pass+'</font> </b>' : '<em><b><font color="red"><%:NOT SET%></font></b></em>';
|
||||
emode.innerHTML = status.clash ? '<b><font color="green" style="text-transform: uppercase;">'+status.e_mode+'</font> </b>' : '<b><font color="red"><%:NOT RUNNING%></font></b>'; if(status.typeconf != 0 || status.typeconf != ''){
|
||||
conf.innerHTML = status.typeconf ? '<b><input type="button" class="btn" style="background-color:black;padding: 5px;font-color:green;color:green;font-weight:bold" value="<%:VIEW CONFIG%>" onclick="return view(this)"/></b>' : '<b><font color="red"><%:NOT RUNNING%></font></b>';
|
||||
emode.innerHTML = status.clash ? '<b><font color="green" style="text-transform: uppercase;">'+status.e_mode+'</font> </b>' : '<b><font color="red"><%:NOT RUNNING%></font></b>';
|
||||
if(status.typeconf != 0 || status.typeconf != ''){
|
||||
conf.innerHTML = status.typeconf ? '<b><input type="button" class="btn" style="background-color:black;padding: 5px;font-color:green;color:green;font-weight:bold" value="<%:VIEW CONFIG%>" onclick="return view(this)" /></b>' : '<b><font color="red"><%:NOT RUNNING%></font></b>';
|
||||
}
|
||||
if(status.typeconf==1){
|
||||
conf_path.innerHTML = status.clash ? '<b><font color="green"><%:SUBSCRIBE%> </font></b>' : '<b><font color="red"><%:NOT RUNNING%></font></b>';
|
||||
@ -306,19 +307,20 @@ var HTTP = {
|
||||
<div class="modals-bg">
|
||||
|
||||
<div class="modals">
|
||||
<span><input type="button" class="cbi-button cbi-button-apply" value="<%:Download%>" style=" display:inline;" onclick=" return download_conf()" /></span><br/><span class="close">×</span>
|
||||
<br/><h3 style="margin-left:0;"><%:If config does not show refresh page%></h3><br/>
|
||||
<span><textarea id="cbid.logview.1.conf" style="width:100%;height:80%; font-family:'Lucida Console'; font-size:12px;padding-left:3px;padding-right:22px;" readonly="readonly" wrap="off" rows="25"><%=nixio.fs.readfile("/etc/clash/config.yaml")%></textarea></span>
|
||||
<span><input type="button" class="cbi-button cbi-button-apply" value="<%:Download%>" style=" display:inline;" onclick=" return download_conf()" /></span><br /><span class="close">×</span>
|
||||
<br /><h3 style="margin-left:0;"><%:If config does not show refresh page%></h3><br />
|
||||
<span><textarea id="cbid.logview.1.conf" style="width:100%;height:80%; font-family:'Lucida Console'; font-size:12px;padding-left:3px;padding-right:22px;" readonly="readonly" wrap="off" rows="25"><%=pcdata(nixio.fs.readfile("/etc/clash/config.yaml"))%></textarea></span>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
var btn = document.getElementById("myBtn");
|
||||
var span = document.getElementsByClassName("close")[0];
|
||||
var cfg = document.getElementsByClassName("modals-bg")[0];
|
||||
span.onclick = function() {
|
||||
$(".modals-bg").hide();
|
||||
cfg.style.display = "none";
|
||||
}
|
||||
function view(btn) {
|
||||
$(".modals-bg").show();
|
||||
cfg.style.display = "inline";
|
||||
}
|
||||
|
||||
function createAndDownloadFile(fileName, content) {
|
||||
|
||||
@ -1,26 +1,18 @@
|
||||
<%+cbi/valueheader%>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
|
||||
<textarea id="log" class="cbi-input-textarea" style="width: 100%;" data-update="change" rows="29" readonly="readonly" > </textarea>
|
||||
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
|
||||
var lv = document.getElementById('log');
|
||||
lv.innerText = "Reading..."
|
||||
lv.style.display="inline"
|
||||
XHR.poll(1, '<%=url([[admin]], [[services]], [[clash]], [[logstatus]])%>', null,
|
||||
XHR.poll(3, '<%=url([[admin]], [[services]], [[clash]], [[logstatus]])%>', null,
|
||||
function(x, data) {
|
||||
scroll();
|
||||
var lv = document.getElementById('log');
|
||||
if (x.responseText && lv) {
|
||||
lv.innerHTML += x.responseText;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
function scroll(){
|
||||
var textarea = document.getElementById('log');
|
||||
textarea.scrollTop = textarea.scrollHeight;
|
||||
}
|
||||
scroll();
|
||||
if(x && x.status === 200) {
|
||||
if(typeof(x.responseText) === "string") {
|
||||
lv.insertAdjacentText("beforeend", x.responseText);
|
||||
lv.scrollTop = lv.scrollHeight;
|
||||
}}});
|
||||
//]]>
|
||||
</script>
|
||||
<%+cbi/valuefooter%>
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
#!/bin/bash /etc/rc.common
|
||||
|
||||
START=99
|
||||
STOP=15
|
||||
@ -255,8 +255,8 @@ rules(){
|
||||
|
||||
if [ "${enable_udp}" -eq 1 ]; then
|
||||
|
||||
ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" pref 789
|
||||
ip route add local default dev lo table "$PROXY_ROUTE_TABLE"
|
||||
ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE"
|
||||
ip route add local 0.0.0.0/0 dev lo table "$PROXY_ROUTE_TABLE"
|
||||
|
||||
iptables -t mangle -N clash
|
||||
iptables -t mangle -A clash -d 0.0.0.0/8 -j RETURN
|
||||
@ -273,7 +273,7 @@ rules(){
|
||||
done
|
||||
fi
|
||||
|
||||
iptables -t mangle -A clash -p udp -j TPROXY --on-port "${redir_port}" --tproxy-mark "$PROXY_FWMARK"
|
||||
iptables -t mangle -A clash -p udp -j TPROXY --on-port "${redir_port}" --on-ip 0.0.0.0 --tproxy-mark "$PROXY_FWMARK"
|
||||
iptables -t mangle -A PREROUTING -p udp -j clash
|
||||
|
||||
fi
|
||||
@ -283,13 +283,11 @@ rules(){
|
||||
if [ ! -z "${fake_ip_range}" ];then
|
||||
if [ "${enable_udp}" -eq 1 ]; then
|
||||
iptables -t nat -A OUTPUT -p tcp -d $fake_ip_range -j REDIRECT --to-ports "${redir_port}"
|
||||
iptables -t mangle -A OUTPUT -p udp -d $fake_ip_range -j MARK --set-mark "$PROXY_FWMARK"
|
||||
iptables -t mangle -A OUTPUT -p udp -d $fake_ip_range -j MARK --set-mark "$PROXY_FWMARK"
|
||||
fi
|
||||
else
|
||||
iptables -t nat -A OUTPUT -p tcp -d 198.18.0.1/16 -j REDIRECT --to-ports "${redir_port}"
|
||||
if [ "${enable_udp}" -eq 1 ]; then
|
||||
iptables -t mangle -A OUTPUT -p udp -d 198.18.0.1/16 -j MARK --set-mark "$PROXY_FWMARK"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
|
||||
@ -308,7 +306,7 @@ rules(){
|
||||
fi
|
||||
done
|
||||
fi
|
||||
ip6tables -t mangle -A clash -p udp -j TPROXY --on-port "$proxy_port" --tproxy-mark "$PROXY_FWMARK"
|
||||
ip6tables -t mangle -A clash -p udp -j TPROXY --on-port "$proxy_port" --on-ip 0.0.0.0 --tproxy-mark "$PROXY_FWMARK"
|
||||
ip6tables -t mangle -A PREROUTING -p udp -j clash
|
||||
fi
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/bash /etc/rc.common
|
||||
. /lib/functions.sh
|
||||
#!/bin/sh
|
||||
. /lib/functions.sh
|
||||
|
||||
CURL_GROUP_CACHE="/usr/share/clashbackup/clash_gorup.json"
|
||||
CURL_NOW_CACHE="/usr/share/clashbackup/clash_now.json"
|
||||
@ -9,10 +9,11 @@ SECRET=$(uci get clash.config.dash_pass 2>/dev/null)
|
||||
LAN_IP=$(uci get network.lan.ipaddr 2>/dev/null |awk -F '/' '{print $1}' 2>/dev/null)
|
||||
PORT=$(uci get clash.config.dash_port 2>/dev/null)
|
||||
|
||||
curl -w %{http_code}"\n" -H "Authorization: Bearer ${SECRET}" -H "Content-Type:application/json" -X GET http://"$LAN_IP":"$PORT"/proxies > "$CURL_CACHE" 2>/dev/null
|
||||
if [ "$(sed -n '$p' "$CURL_CACHE")" -eq "200" ]; then
|
||||
curl -m 5 --retry 2 -w %{http_code}"\n" -H "Authorization: Bearer ${SECRET}" -H "Content-Type:application/json" -X GET http://"$LAN_IP":"$PORT"/proxies > "$CURL_CACHE" 2>/dev/null
|
||||
if [ "$(sed -n '$p' "$CURL_CACHE" 2>/dev/null)" = "200" ]; then
|
||||
mkdir -p /etc/openclash/history 2>/dev/null
|
||||
cat "$CURL_CACHE" |jsonfilter -e '@["proxies"][@.type="Selector"]["name"]' > "$CURL_GROUP_CACHE" 2>/dev/null
|
||||
cat "$CURL_CACHE" |jsonfilter -e '@["proxies"][@.type="Selector"]["now"]' > "$CURL_NOW_CACHE" 2>/dev/null
|
||||
awk 'NR==FNR{a[i]=$0;i++}NR>FNR{print a[j]"#*#"$0;j++}' "$CURL_GROUP_CACHE" "$CURL_NOW_CACHE" > "$HISTORY_PATH" 2>/dev/null
|
||||
awk 'NR==FNR{a[i]=$0;i++}NR>FNR{print a[j]"#*#"$0;j++}' "$CURL_GROUP_CACHE" "$CURL_NOW_CACHE" > "$HISTORY_PATH" 2>/dev/null
|
||||
fi
|
||||
rm -rf /usr/share/clashbackup/clash_*.json 2>/dev/null
|
||||
|
||||
@ -48,14 +48,14 @@ else
|
||||
sleep 1
|
||||
|
||||
if [ "$subtype" = "clash" ];then
|
||||
wget -c4 --no-check-certificate --user-agent="Clash/OpenWRT" $clash_url -O 2>&1 >1 $CONFIG_YAML
|
||||
curl -sL --connect-timeout 10 --retry 2 "$clash_url" -O 2>&1 >1 $CONFIG_YAML
|
||||
if [ "$?" -eq "0" ]; then
|
||||
echo "${config_name}.yaml#$clash_url#$subtype" >>/usr/share/clashbackup/confit_list.conf
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$subtype" = "ssr2clash" ];then
|
||||
wget -c4 --no-check-certificate --user-agent="Clash/OpenWRT" "https://ssrsub2clashr.herokuapp.com/ssrsub2clash?sub=$ssr_url" -O 2>&1 >1 $CONFIG_YAML
|
||||
curl -sL --connect-timeout 10 --retry 2 "https://ssrsub2clashr.herokuapp.com/ssrsub2clash?sub=$ssr_url" -O 2>&1 >1 $CONFIG_YAML
|
||||
if [ "$?" -eq "0" ]; then
|
||||
echo "${config_name}.yaml#$ssr_url#$subtype" >>/usr/share/clashbackup/confit_list.conf
|
||||
CONFIG_YAMLL="/tmp/conf"
|
||||
@ -100,7 +100,7 @@ else
|
||||
fi
|
||||
|
||||
if [ "$subtype" = "v2clash" ];then
|
||||
wget -c4 --no-check-certificate --user-agent="Clash/OpenWRT" "https://tgbot.lbyczf.com/v2rayn2clash?url=$v2_url" -O 2>&1 >1 $CONFIG_YAML
|
||||
curl -sL --connect-timeout 10 --retry 2 "https://tgbot.lbyczf.com/v2rayn2clash?url=$v2_url" -O 2>&1 >1 $CONFIG_YAML
|
||||
if [ "$?" -eq "0" ]; then
|
||||
echo "${config_name}.yaml#$v2_url#$subtype" >>/usr/share/clashbackup/confit_list.conf
|
||||
fi
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
fi
|
||||
RULE_FILE_DIR="/usr/share/clash/rules/g_rules/$RULE_FILE_NAME"
|
||||
TMP_RULE_DIR="/tmp/$RULE_FILE_NAME"
|
||||
LOG_FILE="/tmp/clash.txt"
|
||||
LOG_FILE="/usr/share/clash/clash.txt"
|
||||
REAL_LOG="/usr/share/clash/clash_real.txt"
|
||||
|
||||
|
||||
|
||||
@ -1 +1 @@
|
||||
<!doctype html><html lang="en" dir="ltr"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel="icon" type="image/x-icon" href="https://cdn.jsdelivr.net/gh/Dreamacro/clash/docs/logo.png"/><title>Clash Dashboard</title><link href="main.693efc9234a08d249710.css" rel="stylesheet"></head><body><div id="root"></div><script src="js/1.bundle.693efc9234a08d249710.min.js"></script><script src="js/bundle.693efc9234a08d249710.min.js"></script></body></html>
|
||||
<!doctype html><html lang="en" dir="ltr"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel="icon" type="image/x-icon" href="https://cdn.jsdelivr.net/gh/Dreamacro/clash/docs/logo.png"/><title>Clash Dashboard</title><link href="main.1560b07adc97ac0ac265.css" rel="stylesheet"></head><body><div id="root"></div><script src="js/1.bundle.1560b07adc97ac0ac265.min.js"></script><script src="js/bundle.1560b07adc97ac0ac265.min.js"></script></body></html>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
1.6.8
|
||||
1.6.9b
|
||||
|
||||
@ -48,7 +48,7 @@ fi
|
||||
if [ "${create}" -eq 1 ];then
|
||||
|
||||
if [ $lang == "en" ] || [ $lang == "auto" ];then
|
||||
echo "Strating to Create Custom Config.. " >$REAL_LOG
|
||||
echo "Starting to Create Custom Config.. " >$REAL_LOG
|
||||
elif [ $lang == "zh_cn" ];then
|
||||
echo "开始创建自定义配置..." >$REAL_LOG
|
||||
fi
|
||||
|
||||
@ -1,31 +1,37 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
if [ -f /usr/share/clashbackup/history ];then
|
||||
|
||||
HISTORY_PATH="/usr/share/clashbackup/history"
|
||||
SECRET=$(uci get clash.config.dash_pass 2>/dev/null)
|
||||
LAN_IP=$(uci get network.lan.ipaddr 2>/dev/null |awk -F '/' '{print $1}' 2>/dev/null)
|
||||
PORT=$(uci get clash.config.dash_port 2>/dev/null)
|
||||
|
||||
urlencode() {
|
||||
local data
|
||||
if [ "$#" != 1 ]; then
|
||||
return 1
|
||||
if [ "$#" -eq "1" ]; then
|
||||
data=$(curl -s -o /dev/null -w %{url_effective} --get --data-urlencode "$1" "")
|
||||
if [ ! -z "$data" ]; then
|
||||
echo "${data##/?}"
|
||||
fi
|
||||
fi
|
||||
data=$(curl -s -o /dev/null -w %{url_effective} --get --data-urlencode "$1" "")
|
||||
if [ ! -z "$data" ]; then
|
||||
echo "${data##/?}"
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
cat $HISTORY_PATH |while read line
|
||||
do
|
||||
if [ -z "$(echo $line |grep "#*#")" ]; then
|
||||
continue
|
||||
else
|
||||
GORUP_NAME=$(urlencode "$(echo $line |awk -F '#*#' '{print $1}')")
|
||||
NOW_NAME=$(echo $line |awk -F '#*#' '{print $3}')
|
||||
curl -H "Authorization: Bearer ${SECRET}" -H "Content-Type:application/json" -X PUT -d '{"name":"'"$NOW_NAME"'"}' http://"$LAN_IP":"$PORT"/proxies/"$GORUP_NAME" >/dev/null 2>&1
|
||||
fi
|
||||
done >/dev/null 2>&1
|
||||
|
||||
fi
|
||||
|
||||
GROUP_STATE() {
|
||||
echo "$(curl -m 5 -w %{http_code}"\n" -H "Authorization: Bearer ${SECRET}" -H "Content-Type:application/json" -X GET http://"$LAN_IP":"$PORT"/proxies/"$1" 2>/dev/null |sed -n '$p' 2>/dev/null)"
|
||||
}
|
||||
|
||||
restore_history() {
|
||||
GROUP_NAME=$(urlencode "$GROUP_NAME")
|
||||
NOW_NAME=$(echo $line |awk -F '#*#' '{print $3}')
|
||||
GROUP_STATE=$(GROUP_STATE "$GROUP_NAME")
|
||||
GROUP_STATE_NUM=0
|
||||
while ( [ ! -z "$(pidof clash)" ] && [ "$GROUP_STATE" != "200" ] && [ "$GROUP_STATE_NUM" -le 1 ] )
|
||||
do
|
||||
sleep 3
|
||||
GROUP_STATE_NUM=$(expr "$GROUP_STATE_NUM" + 1)
|
||||
GROUP_STATE=$(GROUP_STATE "$GROUP_NAME")
|
||||
done
|
||||
curl -m 5 --retry 2 -H "Authorization: Bearer ${SECRET}" -H "Content-Type:application/json" -X PUT -d '{"name":"'"$NOW_NAME"'"}' http://"$LAN_IP":"$PORT"/proxies/"$GROUP_NAME" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
fi
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
rule=$(uci get clash.config.rule_url 2>/dev/null)
|
||||
RULE_YAML="/tmp/Rule"
|
||||
|
||||
wget --no-check-certificate $rule -O 2>&1 >1 $RULE_YAML
|
||||
curl -sL --connect-timeout 10 --retry 2 "$rule" -O 2>&1 >1 $RULE_YAML
|
||||
|
||||
if [ -f "$RULE_YAML" ]; then
|
||||
status=$(egrep '^ {0,}Rule:' /tmp/Rule)
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,42 +1 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<link rel="shortcut icon" href="yacd.ico">
|
||||
<link rel="icon" type="image/png" sizes="64x64" href="yacd-64.png">
|
||||
<link rel="icon" type="image/png" sizes="128x128" href="yacd-128.png">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name=viewport content="width=device-width, initial-scale=1">
|
||||
<meta name="application-name" content="yacd">
|
||||
<meta name="description" content="Yet Another Clash Dashboard">
|
||||
<meta name="theme-color" content="#202020">
|
||||
<title>yacd - Yet Another Clash Dashboard</title>
|
||||
<link href="https://fonts.loli.net/css?family=Merriweather+Sans:400,700|Roboto+Mono&display=swap" rel="stylesheet">
|
||||
<!-- <link rel="prefetch" href="https://cdn.jsdelivr.net/npm/@hsjs/fonts@0.0.1/robotomono/v5/L0x5DF4xlVMF-BfR8bXMIjhLq3-cXbKD.woff2"> -->
|
||||
<!-- <link rel="prefetch" href="https://fonts.loli.net/css?family=Merriweather+Sans:400,700&display=swap" rel="stylesheet"> -->
|
||||
<meta property="og:image" content="https://user-images.githubusercontent.com/1166872/47304841-536f3d80-d65a-11e8-8908-1917127dafc5.png">
|
||||
<meta property="og:site_name" content="yacd">
|
||||
<meta property="og:type" content="object">
|
||||
<meta property="og:title" content="yacd">
|
||||
<meta property="og:url" content="http://yacd.haishan.me">
|
||||
<meta property="og:description" content="Yet Another Clash Dashboard">
|
||||
|
||||
|
||||
<link href="app.f7858f54039721e8f8e8.css" rel="stylesheet">
|
||||
|
||||
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
||||
|
||||
<script src="runtime.c72e8723983b31413a8e.js" type="text/javascript"></script>
|
||||
|
||||
<script src="core-js~app.e768d5b23b7e7ef5d68d.js" type="text/javascript"></script>
|
||||
|
||||
<script src="react~app.71e146262a2c1f21d27e.js" type="text/javascript"></script>
|
||||
|
||||
<script src="app.97da0bf63bfa93de767f.js" type="text/javascript"></script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
<!doctype html><html lang="en"><head><meta charset="UTF-8"><link rel="shortcut icon" href="yacd.ico"><link rel="icon" type="image/png" sizes="64x64" href="yacd-64.png"><link rel="icon" type="image/png" sizes="128x128" href="yacd-128.png"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="application-name" content="yacd"><meta name="description" content="Yet Another Clash Dashboard"><meta name="theme-color" content="#202020"><title>yacd - Yet Another Clash Dashboard</title><link href="https://fonts.googleapis.com/css2?family=Merriweather+Sans:wght@400;700&family=Roboto+Mono&display=swap" rel="stylesheet"><meta property="og:image" content="https://user-images.githubusercontent.com/1166872/47304841-536f3d80-d65a-11e8-8908-1917127dafc5.png"><meta property="og:site_name" content="yacd"><meta property="og:type" content="object"><meta property="og:title" content="yacd"><meta property="og:url" content="http://yacd.haishan.me"><meta property="og:description" content="Yet Another Clash Dashboard"><script defer="defer" src="runtime.19a1a1c098f3d2fbd54e.js"></script><script defer="defer" src="core-js~app.b214178cdb71012cd622.js"></script><script defer="defer" src="react~app.e2d573992419eb24e61b.js"></script><script defer="defer" src="app.1de83e4934f843dc8d9b.js"></script><link href="app.6c8a97d4cbae5f4b8f38.css" rel="stylesheet"></head><body><div id="app"></div></body></html>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user