diff --git a/package/ctcgfw/luci-app-openclash/Makefile b/package/ctcgfw/luci-app-openclash/Makefile index 32291a375b..2feceae8a5 100644 --- a/package/ctcgfw/luci-app-openclash/Makefile +++ b/package/ctcgfw/luci-app-openclash/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-openclash -PKG_VERSION:=0.36.9 +PKG_VERSION:=0.36.10 PKG_RELEASE:=beta PKG_MAINTAINER:=vernesong diff --git a/package/ctcgfw/luci-app-openclash/files/etc/config/openclash b/package/ctcgfw/luci-app-openclash/files/etc/config/openclash index 639b41cdbf..d7d32facb7 100644 --- a/package/ctcgfw/luci-app-openclash/files/etc/config/openclash +++ b/package/ctcgfw/luci-app-openclash/files/etc/config/openclash @@ -24,6 +24,9 @@ config openclash 'config' option proxy_mode 'Rule' option intranet_allowed '0' option enable_udp_proxy '0' + option lan_ac_mode '0' + option operation_mode 'redir-host' + option enable_rule_proxy '0' config dns_servers option group 'nameserver' diff --git a/package/ctcgfw/luci-app-openclash/files/etc/init.d/openclash b/package/ctcgfw/luci-app-openclash/files/etc/init.d/openclash index 9e829676e4..784386f466 100755 --- a/package/ctcgfw/luci-app-openclash/files/etc/init.d/openclash +++ b/package/ctcgfw/luci-app-openclash/files/etc/init.d/openclash @@ -105,7 +105,7 @@ yml_check() #检查关键字避免后续操作出错 #proxies - [ ! -z "$(grep "^ \{0,\}\'Proxy\':" "$3")" ] || [ ! -z "$(grep '^ \{0,\}\"Proxy\":' "$3")" ] || [ ! -z "$(grep '^ \{1,\}Proxy:' "$3")" ] && { + [ -z "$(grep "^Proxy:" "$3")" ] && { sed -i "/^ \{0,\}\'Proxy\':/c\Proxy:" "$3" 2>/dev/null sed -i '/^ \{0,\}\"Proxy\":/c\Proxy:' "$3" 2>/dev/null sed -i "/^ \{1,\}Proxy:/c\Proxy:" "$3" 2>/dev/null @@ -117,7 +117,7 @@ yml_check() } #proxy-providers - [ ! -z "$(grep "^ \{0,\}\'proxy-provider\':" "$3")" ] || [ ! -z "$(grep '^ \{0,\}\"proxy-provider\":' "$3")" ] || [ ! -z "$(grep '^ \{1,\}proxy-provider:' "$3")" ] && { + [ -z "$(grep "^proxy-provider:" "$3")" ] && { sed -i "/^ \{0,\}\'proxy-provider\':/c\proxy-provider:" "$3" 2>/dev/null sed -i '/^ \{0,\}\"proxy-provider\":/c\proxy-provider:' "$3" 2>/dev/null sed -i "/^ \{1,\}proxy-provider:/c\proxy-provider:" "$3" 2>/dev/null @@ -128,7 +128,7 @@ yml_check() sed -i "/^ \{0,\}proxy-providers:/c\proxy-provider:" "$3" 2>/dev/null } #proxy-groups - [ ! -z "$(grep "^ \{0,\}\'Proxy Group\':" "$3")" ] || [ ! -z "$(grep '^ \{0,\}\"Proxy Group\":' "$3")" ] || [ ! -z "$(grep '^ \{1,\}Proxy Group:' "$3")" ] && { + [ -z "$(grep "^Proxy Group:" "$3")" ] && { sed -i "/^ \{0,\}\'Proxy Group\':/c\Proxy Group:" "$3" 2>/dev/null sed -i '/^ \{0,\}\"Proxy Group\":/c\Proxy Group:' "$3" 2>/dev/null sed -i "/^ \{1,\}Proxy Group:/c\Proxy Group:" "$3" 2>/dev/null @@ -140,7 +140,7 @@ yml_check() } #rules - [ ! -z "$(grep "^ \{0,\}\'Rule\':" "$3")" ] || [ ! -z "$(grep '^ \{0,\}\"Rule\":' "$3")" ] || [ ! -z "$(grep '^ \{1,\}Rule:' "$3")" ] && { + [ -z "$(grep "^Rule:" "$3")" ] && { sed -i "/^ \{0,\}\'Rule\':/c\Rule:" "$3" 2>/dev/null sed -i '/^ \{0,\}\"Rule\":/c\Rule:' "$3" 2>/dev/null sed -i "/^ \{1,\}Rule:/c\Rule:" "$3" 2>/dev/null @@ -152,7 +152,7 @@ yml_check() } #dns - [ ! -z "$(grep "^ \{0,\}\'dns\':" "$3")" ] || [ ! -z "$(grep '^ \{0,\}\"dns\":' "$3")" ] || [ ! -z "$(grep '^ \{1,\}dns:' "$3")" ] && { + [ -z "$(grep "^dns:" "$3")" ] && { sed -i "/^ \{0,\}\'dns\':/c\dns:" "$3" 2>/dev/null sed -i '/^ \{0,\}\"dns\":/c\dns:' "$3" 2>/dev/null sed -i "/^ \{1,\}dns:/c\dns:" "$3" 2>/dev/null @@ -513,11 +513,13 @@ yml_auth_custom() sed -i '/^dns:/i\#authentication' "$1" 2>/dev/null sed -i '/^authentication:/,/^#authentication/d' "$1" 2>/dev/null fi - [ -f /etc/openclash/config.auth ] && { + if [ -f /etc/openclash/config.auth ]; then sed -i '/^dns:/i\authentication:' "$1" 2>/dev/null sed -i '/^authentication:/r/etc/openclash/config.auth' "$1" 2>/dev/null - rm -rf /etc/openclash/config.auth 2>/dev/null - } + mv /etc/openclash/config.auth /tmp/openclash.auth 2>/dev/null + else + rm -rf /tmp/openclash.auth 2>/dev/null + fi } get_rule_file() @@ -627,6 +629,16 @@ elif [ -f "/tmp/yaml_servers.yaml" ]; then fi } +lan_ac() +{ + if [ -z "$1" ]; then + return + fi + + ipset add "$2" "$1" 2>/dev/null + +} + start() { #禁止多个实例 @@ -704,6 +716,9 @@ if [ "$enable" -eq 1 ] && [ -f "$CONFIG_FILE" ]; then 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) echo "第二步: 配置文件检查..." >$START_LOG yml_check "$en_mode" "$enable_custom_dns" "$CONFIG_FILE" "$BACKUP_FILE" "$START_BACKUP" @@ -725,7 +740,7 @@ if [ "$enable" -eq 1 ] && [ -f "$CONFIG_FILE" ]; then 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" 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" & - 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" & + 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 @@ -769,10 +784,25 @@ mkdir -p /var/etc cat > "/var/etc/openclash.include" <<-EOF /etc/init.d/openclash restart 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 + 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 + 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" + fi + fi + if [ -z "$en_mode_tun" ]; then #tcp iptables -t nat -N openclash + iptables -t nat -A openclash -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1 + iptables -t nat -A openclash -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1 iptables -t nat -A openclash -d 0.0.0.0/8 -j RETURN iptables -t nat -A openclash -d 10.0.0.0/8 -j RETURN iptables -t nat -A openclash -d 127.0.0.0/8 -j RETURN @@ -796,6 +826,8 @@ EOF ip rule add fwmark 1 table 100 ip route add local default dev lo table 100 iptables -t mangle -N openclash + iptables -t mangle -A openclash -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1 + iptables -t mangle -A openclash -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1 iptables -t mangle -A openclash -d 0.0.0.0/8 -j RETURN iptables -t mangle -A openclash -d 10.0.0.0/8 -j RETURN iptables -t mangle -A openclash -d 127.0.0.0/8 -j RETURN @@ -884,6 +916,8 @@ EOF iptables -t mangle -A openclash -d 198.18.0.0/16 -j MARK --set-mark "$PROXY_FWMARK" fi iptables -t mangle -I OUTPUT -j openclash + iptables -t mangle -I PREROUTING -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1 + iptables -t mangle -I PREROUTING -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1 iptables -t mangle -I PREROUTING -m set ! --match-set localnetwork dst -j MARK --set-mark "$PROXY_FWMARK" iptables -t nat -I PREROUTING -p tcp --dport 53 -j ACCEPT #ipv6 @@ -1010,6 +1044,9 @@ stop() iptables -t nat -D PREROUTING -p tcp -j openclash >/dev/null 2>&1 iptables -t nat -X openclash >/dev/null 2>&1 + ipset destroy lan_ac_white_ips >/dev/null 2>&1 + ipset destroy lan_ac_black_ips >/dev/null 2>&1 + out_lines=$(iptables -nvL OUTPUT -t mangle |sed 1,2d |sed -n '/198.18.0.0\/16/=' 2>/dev/null |sort -rn) for out_line in $out_lines; do iptables -t mangle -D OUTPUT "$out_line" >/dev/null 2>&1 @@ -1042,6 +1079,8 @@ stop() ip rule del fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1 iptables -t mangle -D OUTPUT -j openclash >/dev/null 2>&1 + iptables -t mangle -D PREROUTING -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1 + iptables -t mangle -D PREROUTING -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1 iptables -t mangle -D PREROUTING -m set ! --match-set localnetwork dst -j MARK --set-mark "$PROXY_FWMARK" >/dev/null 2>&1 ip6tables -t mangle -D PREROUTING -j MARK --set-mark "$PROXY_FWMARK" >/dev/null 2>&1 iptables -t mangle -F openclash >/dev/null 2>&1 diff --git a/package/ctcgfw/luci-app-openclash/files/etc/openclash/custom/openclash_custom_rules_2.list b/package/ctcgfw/luci-app-openclash/files/etc/openclash/custom/openclash_custom_rules_2.list new file mode 100644 index 0000000000..371e38b5c6 --- /dev/null +++ b/package/ctcgfw/luci-app-openclash/files/etc/openclash/custom/openclash_custom_rules_2.list @@ -0,0 +1,8 @@ +##- DOMAIN-SUFFIX,google.com,Proxy 匹配域名后缀(交由Proxy代理服务器组) +##- DOMAIN-KEYWORD,google,Proxy 匹配域名关键字(交由Proxy代理服务器组) +##- DOMAIN,google.com,Proxy 匹配域名(交由Proxy代理服务器组) +##- DOMAIN-SUFFIX,ad.com,REJECT 匹配域名后缀(拒绝) +##- IP-CIDR,127.0.0.0/8,DIRECT 匹配数据目标IP(直连) +##- SRC-IP-CIDR,192.168.1.201/32,DIRECT 匹配数据发起IP(直连) +##- DST-PORT,80,DIRECT 匹配数据目标端口(直连) +##- SRC-PORT,7777,DIRECT 匹配数据源端口(直连) diff --git a/package/ctcgfw/luci-app-openclash/files/etc/openclash/lhie1.yaml b/package/ctcgfw/luci-app-openclash/files/etc/openclash/lhie1.yaml index fcded61309..2483983e88 100644 --- a/package/ctcgfw/luci-app-openclash/files/etc/openclash/lhie1.yaml +++ b/package/ctcgfw/luci-app-openclash/files/etc/openclash/lhie1.yaml @@ -8668,7 +8668,15 @@ Rule: -# > NeteaseMusic +# > PayPal +# - USER-AGENT,PayPal*,PayPal +- DOMAIN-KEYWORD,paypal,PayPal +- DOMAIN-SUFFIX,paypal.com,PayPal +- DOMAIN-SUFFIX,paypalobjects.com,PayPal + + + +# > Netease Music # - USER-AGENT,%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90,Netease Music # - USER-AGENT,NeteaseMusic*,Netease Music - DOMAIN-SUFFIX,music.126.net,Netease Music @@ -8741,6 +8749,13 @@ Rule: - DOMAIN-SUFFIX,office.net,Proxy - DOMAIN-SUFFIX,skype.com,Proxy +# > Sony +- DOMAIN-SUFFIX,playstation.com,Proxy +- DOMAIN-SUFFIX,playstation.net,Proxy +- DOMAIN-SUFFIX,playstationnetwork.com,Proxy +- DOMAIN-SUFFIX,sony.com,Proxy +- DOMAIN-SUFFIX,sonyentertainmentnetwork.com,Proxy + # > Spark - DOMAIN-SUFFIX,api.amplitude.com,Proxy - DOMAIN-SUFFIX,app.smartmailcloud.com,Proxy @@ -9488,13 +9503,6 @@ Rule: - DOMAIN-SUFFIX,alphassl.com,Domestic - DOMAIN-SUFFIX,edu.cn,Domestic -# > Sony -- DOMAIN-SUFFIX,playstation.com,Domestic -- DOMAIN-SUFFIX,playstation.net,Domestic -- DOMAIN-SUFFIX,playstationnetwork.com,Domestic -- DOMAIN-SUFFIX,sony.com,Domestic -- DOMAIN-SUFFIX,sonyentertainmentnetwork.com,Domestic - # > TeamViewer - IP-CIDR,185.188.32.0/24,Domestic - IP-CIDR,185.188.33.0/24,Domestic @@ -9648,8 +9656,6 @@ Rule: - DOMAIN-SUFFIX,ourbits.club,Domestic - DOMAIN-SUFFIX,ourdvs.com,Domestic - DOMAIN-SUFFIX,passthepopcorn.me,Domestic -- DOMAIN-SUFFIX,paypal.com,Domestic -- DOMAIN-SUFFIX,paypalobjects.com,Domestic - DOMAIN-SUFFIX,pgyer.com,Domestic - DOMAIN-SUFFIX,pniao.com,Domestic - DOMAIN-SUFFIX,privatehd.to,Domestic diff --git a/package/ctcgfw/luci-app-openclash/files/etc/openclash/openclash_version b/package/ctcgfw/luci-app-openclash/files/etc/openclash/openclash_version index ac5e38a3b1..3d331fcd8e 100644 --- a/package/ctcgfw/luci-app-openclash/files/etc/openclash/openclash_version +++ b/package/ctcgfw/luci-app-openclash/files/etc/openclash/openclash_version @@ -1,2 +1,2 @@ -v0.36.9-beta -data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXMAAAAqCAMAAAB2kksrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ4IDc5LjE2NDAzNiwgMjAxOS8wOC8xMy0wMTowNjo1NyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA3NTgxOUE5NjIxQzExRUFBQTc4QUJGQUM2QkNCMkFFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA3NTgxOUFBNjIxQzExRUFBQTc4QUJGQUM2QkNCMkFFIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDc1ODE5QTc2MjFDMTFFQUFBNzhBQkZBQzZCQ0IyQUUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDc1ODE5QTg2MjFDMTFFQUFBNzhBQkZBQzZCQ0IyQUUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6DwdzXAAADAFBMVEUGZp1Jns5FgKJISEjR0dFtbW09PT06lsoGVYKEhISGv9+6urokhbyiwNJFmsrR5vJlnr13t9uCgoIJeLienp7a2tqlpaVYpdJ4eHgGXpEWaJckapIGcKzf398JdbTn5+c/Pz8GbqnGxsahoaGizOXOzs5hlLFpaWk0dZoJca0nd6WTvNORkZFxcXEGWoq/v79FRUWDs86srKy1tbUKaqFmrdYJXo6TxeGy1uoEXI4IYZTKyspiYmIEU4AEYJVkq9NLS0tDQ0Pg4OCLi4sGdLLR4OgXgL2x0OJGirHB1eCyytmixdgXYo12dnbAwMCcnJwrjsbCwsJBQUEJZJgFaaKStchzqchCQkImcJu2traXl5eyzdwahMFHnMxFkb3w9feDqsGEtNCkzuZlZWUnicEchsONjY2jyN4FcrA2kcYKb6hzobsJWIUHbKWDrcVyn7jQ3+evr69gYGAFZZuDq8IZdapVi6uUlJTB2eZ0dHQEYpiJweIwk8t0sdVSiag1h7UGdbQJcKsHV4cRgsMCc7QBcrNRUVFUVFRVVVVSUlILfL0FdrdWVlYHeLkKe7wDdLUDdbUOgMADdLQEdrYOf8AEdbYSg8NXV1cSg8QShMQThMUAcrIGd7gOf78Nfr8Nfr4Mfb4Mfb0IebkJeroJersJe7s6OjqqqqrU1NTV1dWrq6upqak7Ozt+fn6AgIDw9/sHVoTC3u6BgYHq6uqEvd3z8/P19fVMTEyEvN309PSDvNzh7/d/f3/v9PeCqcCFvt7B3e3A1N/g6u+JiYng6vCErMLB3e7o6Ojg7vYUXomFvd4LerkIaJ/B3u7D3++hv9B0s9jW1tYEVYMFZ58IWYdGm8sZg8DC3+8Fa6YLdK+Dr8jR4uyDu9wKeLeFvd1VoMzv9vrg7/cEWIiAudl/uNjP5PE1jsLg7PNGhaiRuM9kmbfB2+omfq84k8ZEf6FTU1MPgMEQgcJZWVlaWlpfX19bW1tcXFxNTU1eXl5PT09QUFBYWFhdXV1OTk7///////+9FrVwAAABAHRSTlP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AU/cHJQAADGBJREFUeNrsVwtUVGUevzgyMvigbMBBUAYVhEIcwQcok8MjFTJXUctn+TxZWmqYppmb7q4IDuy2L3Y3aot0eEkDIiASKvhOTYO11N7uq9qt2XXdQIwf+/++e2fm3kGMs3U8Z+b4O4f7/Z+//72/7869F6Gjo3rt8GuegD+4ATY/b+3oEDqSNl7zDPzeLbDZr0OoHtHqIfide2CzVVjrKZK3/tZN8Lww4ltPwU/cBJuFb+9ofrvhQZr/210gfOMxuKP57ce/3AXCfz0GdzS//XjJXSD8x2Pwa3fBTTXXxMTERHn/8Kos1WiWOhxvjaY7PTqNrpvsr3SJXnf73t3LNfjS8gG+vr5eroHp3el9xRe+r/zfEK66ImFuNTiS5iVc/Z7QxGgUfjXmOexpmNAdinfxbjeHvdoFlr/DL+ed5YrodDGKugH2siXc971p73QXTl+XOjm8fL1evSU6aa6rBPxLtNowGqX5vprHIEbumkciybG1QNQPq/kfu8D7+OCuKXd9gPcVUS/ggWPH+j4GeHG/lxVIO3Ys7ZC8aLkf7z0K63Il5yEc6mrcLXMcwg0lEpJQ5a1mMGmr+t/4niDNFf4IwFsy56EqqzsUBrWhm8NeuznG4OjUVatWTX0MY+Rhr75Bq1j4KJYwd4EVaaxs1Wh50RKk8qIHxCInSNfXusKtchxCJ5WqEtSJKpPJoFabh3dXW11/xfb07+99c81VIRgqmcWY2y4V627OmOCiubdySIK9wo7Xb444rBz75KUnxx5DnDx8adWqsaNHz/zTMbzPXK7uTAqMlhcB63lvD2CBgpR0ff316V69ZCEvu8dzjqCiRoSr5tXQ6rdzy2xiRjH2cm8viqXjvCSg5EYJShJK6DHEsiXsBVBdwuuABO4WJ3BHhIN9uxaVkoB0x+eRcNNYvjL5hoL8xtBKHmaUJRCJk3loWoJU6c0b58pPPVvCANRJVh0GZGdb8flpsk9/Dmu2DJdmfsSW01/gcVoWAEEzT2e7gJ4/43nRWHoC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 \ No newline at end of file +v0.36.10-beta +data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYQAAAAqCAMAAACEAtzLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ4IDc5LjE2NDAzNiwgMjAxOS8wOC8xMy0wMTowNjo1NyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjNBNDAyOTg2NjQ3MzExRUFCRUJGRDA2Q0FEN0YzN0RBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjNBNDAyOTg3NjQ3MzExRUFCRUJGRDA2Q0FEN0YzN0RBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6M0E0MDI5ODQ2NDczMTFFQUJFQkZEMDZDQUQ3RjM3REEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6M0E0MDI5ODU2NDczMTFFQUJFQkZEMDZDQUQ3RjM3REEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6o2nnLAAADAFBMVEUqjcWxythJns6hoaFlrNSCqcAFbakJca26urrh7/eiwdI1dZpUi6tISEjR5vOlpaWKiopFgaJjlLA5lcnR0dEccaI9PT0GcKwihLwFVYIJeLienp6CgoJWlboHZ50xk8ze3t4HVoS1tbUKdbIVapobhcE/Pz8IXIzR4elubm7a2trn5+ckeqrOzs51tNmixdlFkr2StckEXI4kapKRkZFFRUVLS0s2kcYEU4BycnKCrsZ3d3eFhYWy1uoJYJJFmsqcnJxiYmK/v7+srKx4eHgXYoyEtNAEWYng4OAEXpGUxuJDQ0OizOUEYJRBQUFXpdIJaqCUlJTCwsKy0OFqamo0fabIyMgJZJhkm7sXgL3FxcUFaaJAQEDAwMC2trbKysrw9PfB1OAFZZvQ3+cgdabB2ecJaJ4HdLFlZWV1p8VgYGCkzudHirEYbZ6TxOAHbKQJWIUJbaVkp80micEFcrCNjY0IX5FzoLo1hrRHnMxynrgEYpivr690dHQFa6aJweJEf6Giv9F0sdUmbphorteEsswJb6oYe7QBcrNZWVlTU1NRUVFUVFRVVVULfL1SUlIKe7wFdrcHeLlWVlYOgMAOf8AEdrYDdLQEdbYDdLUDdbUSg8MSg8QShMQThMUAcrJXV1cGd7gOf78Nfr8Nfr4Mfb4Mfb0IeboJeroJe7sJers6OjqqqqrV1dXU1NSrq6upqanw9/s7OzvC3u6AgIB+fn719fWBgYGEvd2EvN3q6ur09PTz8/NMTEyDvNx/f3+Gvt+Fvt6Hv9/v9PdGm8vg6vDB3e2Gv9/B3u7o6OgUXong6u/A1N/B3e6Css6Xl5eFvd6Fvd1Hm8zW1tbC3+9Vos/B1eAIV4SDr8jB2+qDq8KErMIFdLREmcrC3u/v9vrC3OtHmskHdrXD3++Cutonhr0FZ5/Q5PCSvdYwk8smcZyRuM/g7PMIWIey0+YCc7QRgsMPgMEQgcJaWlpfX19NTU1eXl5cXFxbW1tPT09QUFBYWFhdXV1OTk7////////qK6qzAAABAHRSTlP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AU/cHJQAADBVJREFUeNrsVwtYVFUev7wlHEDUQZ2pBVQQFR/ojKNILIqKDiGSaa6lLvlKyyyNMntntY0IyOz7SQ9FHF4TiQhIqfnW1DI0s9p1y7bdtd1201Ljx/7POXfmzp0B4dv6vpr5/H0f9/yfv3Pu+d17zyC1tdU9OvZLX8DQP3ohfvSEva1Nasv0DQlIhD94JT4Lb5Pqxl7yEQz9vXfiM7v06CWfEeF3XoonpLHf+AqG/ttL8Zn0zXURvnf4kgj/8VZIX/kMrovwA8DCL7wV0tc+g+si/BBE+Lm3Qvqvz2DhL7wV7Yqgnzhx4oOJ3/02LdXrlzqdRL2+Kz0Z+oyuivBSR/hCWrd7t79n3H/37t3TB7oFPOu+8O/ZGdV+7H/p/4f0gjvS59WBI/NY+gvfEvqJepVfh2NOOxfzu0LxDt7p4mQLX+4I0/j9hPZUR5eL27TvdwT225n/V492f5dY+1Qvkwgdzu6/3//la8NDhIwGYHC1TpdEc+m/rQgTMdHVtU5AplNrYPR3LMIrHeANLLj7nhtvhX2gKgzsHfn+yL3AG9wdGA4Mev/9pz5365bW2XGyEyqKv/FKx9N3nJOnuKpGeiaaErUMRl2T/uq3BImg8hOBRNk8hqairlAYtIYuTrZwU/uQgLCVhBYsV8VberDoSj+EcvckBvGym9Xd/Mk/2QnVJtroTR3hWjmZ1mPbmtK1Zo3RaNBqrTO7utkpepVeen1i+yJohiBANisxr7W9XodcDg5FhHS9Pt31cVG7JMLmdvHKMPitvL9/yOwesKsSK1cmLM5ZnNADYN46LJi0Mj8nZ/Zsdfuuj0+34GQnVJt3YdfmzZJ/TyUy0N9fcsnJ8Pd3rXHAXYQ66OLXc8tqZEYltnNvOyrl67FMoPpqNarTq+nLxbLV7BCpq+Z1QDp3K9O5I+BkX69Dg/JOWNW9CvlVfSZrq7uTSKohiFMqWagyRa5MvJO581yX3ntTocBAQBLWckwrLEzFmf7MuRnoWeiCm0N4w43Yy4ZwROX3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 \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/controller/openclash.lua b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/controller/openclash.lua index 85dd27ac57..008f902a0e 100644 --- a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/controller/openclash.lua +++ b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/controller/openclash.lua @@ -91,17 +91,14 @@ end local function coremodel() local coremodel = luci.sys.exec("cat /proc/cpuinfo |grep 'cpu model' 2>/dev/null |awk -F ': ' '{print $2}' 2>/dev/null") + local coremodel2 = luci.sys.exec("opkg status libc 2>/dev/null |grep 'Architecture' |awk -F ': ' '{print $2}' 2>/dev/null") if not coremodel or coremodel == "" then - return luci.sys.exec("opkg status libc 2>/dev/null |grep 'Architecture' |awk -F ': ' '{print $2}' 2>/dev/null") + return coremodel2 .. "," .. coremodel2 else - return coremodel + return coremodel .. "," .. coremodel2 end end -local function coremodel2() - return luci.sys.exec("opkg status libc 2>/dev/null |grep 'Architecture' |awk -F ': ' '{print $2}' 2>/dev/null") -end - local function corecv() if not nixio.fs.access("/etc/openclash/clash") then return "0" @@ -113,7 +110,7 @@ end local function corelv() local new = luci.sys.call(string.format("sh /usr/share/openclash/clash_version.sh")) local core_lv = luci.sys.exec("sed -n 1p /tmp/clash_last_version 2>/dev/null") - return core_lv..","..new + return core_lv .. "," .. new end local function opcv() @@ -121,7 +118,9 @@ local function opcv() end local function oplv() - return luci.sys.exec("sh /usr/share/openclash/openclash_version.sh && sed -n 1p /tmp/openclash_last_version 2>/dev/null |sed 's/^v//g' 2>/dev/null") + local new = luci.sys.call(string.format("sh /usr/share/openclash/openclash_version.sh")) + local oplv = luci.sys.exec("sed -n 1p /tmp/openclash_last_version 2>/dev/null") + return oplv .. "," .. new end local function opup() @@ -205,7 +204,6 @@ function action_update() luci.http.prepare_content("application/json") luci.http.write_json({ coremodel = coremodel(), - coremodel2 = coremodel2(), corecv = corecv(), opcv = opcv(), corever = corever(), diff --git a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/client.lua b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/client.lua index a16d2466d8..91b6a073ca 100644 --- a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/client.lua +++ b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/client.lua @@ -119,6 +119,7 @@ o.inputstyle="apply" Button.render(o,t,a) end btnis.write=function(a,t) +fs.unlink("/tmp/Proxy_Group") luci.sys.exec(string.format('uci set openclash.config.config_path="/etc/openclash/config/%s"',e[t].name)) uci:set("openclash", "config", "enable", 1) uci:commit("openclash") diff --git a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/config-subscribe.lua b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/config-subscribe.lua index c4b8d60fea..00cfe59fe4 100644 --- a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/config-subscribe.lua +++ b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/config-subscribe.lua @@ -6,6 +6,7 @@ local SYS = require "luci.sys" local HTTP = require "luci.http" local DISP = require "luci.dispatcher" local UTIL = require "luci.util" +local fs = require "luci.openclash" local uci = require "luci.model.uci".cursor() font_red = [[]] @@ -118,6 +119,7 @@ o = a:option(Button, "Commit") o.inputtitle = translate("Commit Configurations") o.inputstyle = "apply" o.write = function() + fs.unlink("/tmp/Proxy_Group") m.uci:commit("openclash") end @@ -125,6 +127,7 @@ o = a:option(Button, "Apply") o.inputtitle = translate("Apply Configurations") o.inputstyle = "apply" o.write = function() + fs.unlink("/tmp/Proxy_Group") m.uci:set("openclash", "config", "enable", 1) m.uci:commit("openclash") SYS.call("rm -rf /etc/openclash/backup/* 2>/dev/null") diff --git a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/config.lua b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/config.lua index 87c79df160..91a36f5e7f 100644 --- a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/config.lua +++ b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/config.lua @@ -133,6 +133,7 @@ HTTP.setfilehandler( else um.value = translate("File saved to") .. ' "/etc/openclash/proxy_provider/"' end + fs.unlink("/tmp/Proxy_Group") end end ) @@ -199,6 +200,7 @@ o.inputstyle="apply" Button.render(o,t,a) end btnis.write=function(a,t) +fs.unlink("/tmp/Proxy_Group") luci.sys.exec(string.format('uci set openclash.config.config_path="/etc/openclash/config/%s"',e[t].name)) uci:commit("openclash") HTTP.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "config")) @@ -367,6 +369,7 @@ o = a:option(Button, "Commit") o.inputtitle = translate("Commit Configurations") o.inputstyle = "apply" o.write = function() + fs.unlink("/tmp/Proxy_Group") uci:commit("openclash") end @@ -374,6 +377,7 @@ o = a:option(Button, "Apply") o.inputtitle = translate("Apply Configurations") o.inputstyle = "apply" o.write = function() + fs.unlink("/tmp/Proxy_Group") uci:set("openclash", "config", "enable", 1) uci:commit("openclash") SYS.call("/etc/init.d/openclash restart >/dev/null 2>&1 &") diff --git a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/servers.lua b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/servers.lua index d2abf8c368..86ba717334 100644 --- a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/servers.lua +++ b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/servers.lua @@ -2,6 +2,7 @@ local m, s, o local openclash = "openclash" local uci = luci.model.uci.cursor() +local fs = require "luci.openclash" font_red = [[]] font_off = [[]] @@ -227,6 +228,7 @@ o = a:option(Button, "Commit") o.inputtitle = translate("Commit Configurations") o.inputstyle = "apply" o.write = function() + fs.unlink("/tmp/Proxy_Group") m.uci:set("openclash", "config", "enable", 0) m.uci:commit("openclash") end @@ -235,6 +237,7 @@ o = a:option(Button, "Apply") o.inputtitle = translate("Apply Configurations") o.inputstyle = "apply" o.write = function() + fs.unlink("/tmp/Proxy_Group") m.uci:set("openclash", "config", "enable", 0) m.uci:commit("openclash") luci.sys.call("/usr/share/openclash/yml_groups_set.sh >/dev/null 2>&1 &") diff --git a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/settings.lua b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/settings.lua index 8ccde05761..89275e07cb 100644 --- a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/settings.lua +++ b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/settings.lua @@ -4,6 +4,7 @@ local SYS = require "luci.sys" local HTTP = require "luci.http" local DISP = require "luci.dispatcher" local UTIL = require "luci.util" +local fs = require "luci.openclash" local uci = require "luci.model.uci".cursor() font_green = [[]] @@ -12,19 +13,73 @@ font_off = [[]] bold_on = [[]] bold_off = [[]] +local op_mode = string.sub(luci.sys.exec('uci get openclash.config.operation_mode 2>/dev/null'),0,-2) +if not op_mode then op_mode = "redir-host" end + m = Map("openclash", translate("Global Settings(Will Modify The Config File Or Subscribe According To The Settings On This Page)")) m.pageaction = false s = m:section(TypedSection, "openclash") s.anonymous = true +s:tab("op_mode", translate("Operation Mode")) s:tab("settings", translate("General Settings")) s:tab("dns", translate("DNS Setting")) +s:tab("lan_ac", translate("Access Control")) +if op_mode == "fake-ip" then +s:tab("rules", translate("Rules Setting(Access Control)")) +else s:tab("rules", translate("Rules Setting")) +end s:tab("dashboard", translate("Dashboard Settings")) s:tab("rules_update", translate("Rules Update")) s:tab("geo_update", translate("GEOIP Update")) s:tab("version_update", translate("Version Update")) +---- Operation Mode +o = s:taboption("op_mode", ListValue, "operation_mode", font_red..bold_on..translate("Select Operation Mode")..bold_off..font_off) +o.description = translate("Select Mode For Page Settings, Switch By Click the Button Bellow") +o:value("redir-host", translate("redir-host mode")) +o:value("fake-ip", translate("fake-ip mode")) +o.default = "redir-host" + +o = s:taboption("op_mode", ListValue, "en_mode", font_red..bold_on..translate("Select Mode")..bold_off..font_off) +o.description = translate("Select Mode For OpenClash Work, Try Flush DNS Cache If Network Error") +if op_mode == "redir-host" then +o:value("redir-host", translate("redir-host")) +o:value("redir-host-tun", translate("redir-host(tun mode)")) +o:value("redir-host-vpn", translate("redir-host-vpn(game mode)")) +o.default = "redir-host" +else +o:value("fake-ip", translate("fake-ip")) +o:value("fake-ip-tun", translate("fake-ip(tun mode)")) +o:value("fake-ip-vpn", translate("fake-ip-vpn(game mode)")) +o.default = "fake-ip" +end + +o = s:taboption("op_mode", ListValue, "enable_udp_proxy", font_red..bold_on..translate("Proxy UDP Traffics")..bold_off..font_off) +o.description = translate("Select Mode For UDP Traffics, The Servers Must Support UDP while Choose Proxy") +o:depends("en_mode", "redir-host") +o:depends("en_mode", "fake-ip") +o:value("0", translate("Disable")) +o:value("1", translate("Enable")) +o.default = "0" + +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.default = "Rule" + +o = s:taboption("op_mode", Button, translate("Switch Operation Mode")) +o.title = translate("Switch Operation Mode") +o.inputtitle = translate("Switch Mode") +o.inputstyle = "reload" +o.write = function() + m.uci:commit("openclash") + HTTP.redirect(DISP.build_url("admin", "services", "openclash", "settings")) +end + ---- General Settings local cpu_model=SYS.exec("opkg status libc 2>/dev/null |grep 'Architecture' |awk -F ': ' '{print $2}' 2>/dev/null") o = s:taboption("settings", ListValue, "core_version", font_red..bold_on..translate("Chose to Download")..bold_off..font_off) @@ -44,30 +99,11 @@ o:value("linux-mipsle-hardfloat") o:value("0", translate("Not Set")) o.default=0 -o = s:taboption("settings", ListValue, "en_mode", font_red..bold_on..translate("Select Mode")..bold_off..font_off) -o.description = translate("Select Mode For OpenClash Work, Try Flush DNS Cache If Network Error") -o:value("redir-host", translate("redir-host")) -o:value("fake-ip", translate("fake-ip")) -o:value("redir-host-tun", translate("redir-host(tun mode)")) -o:value("fake-ip-tun", translate("fake-ip(tun mode)")) -o:value("redir-host-vpn", translate("redir-host-vpn(game mode)")) -o:value("fake-ip-vpn", translate("fake-ip-vpn(game mode)")) -o.default = "redir-host" - -o = s:taboption("settings", ListValue, "enable_udp_proxy", font_red..bold_on..translate("Proxy UDP Traffics")..bold_off..font_off) -o.description = translate("Select Mode For UDP Traffics, The Servers Must Support UDP while Choose Proxy") -o:depends("en_mode", "redir-host") -o:depends("en_mode", "fake-ip") +o = s:taboption("settings", ListValue, "enable_rule_proxy", font_red..bold_on..translate("Rule Match Proxy Mode")..bold_off..font_off) +o.description = translate("Only Proxy Rules Match, Prevent BT Passing") o:value("0", translate("Disable")) o:value("1", translate("Enable")) -o.default = "0" - -o = s:taboption("settings", 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.default = "Rule" +o.default=0 o = s:taboption("settings", ListValue, "log_level", translate("Log Level")) o.description = translate("Select Core's Log Level") @@ -130,6 +166,7 @@ o:value("0", translate("Disable")) o:value("1", translate("Enable")) o.default=0 +if op_mode == "fake-ip" then o = s:taboption("dns", ListValue, "dns_advanced_setting", translate("Advanced Setting")) o.description = translate("DNS Advanced Settings")..font_red..bold_on..translate("(Please Don't Modify it at Will)")..bold_off..font_off o:value("0", translate("Disable")) @@ -171,9 +208,40 @@ function custom_fake_black.write(self, section, value) NXFS.writefile("/etc/openclash/custom/openclash_custom_fake_black.conf", value) end end +end + +---- Access Control +if op_mode == "redir-host" then +o = s:taboption("lan_ac", ListValue, "lan_ac_mode", translate("Access Control Mode")) +o:value("0", translate("Black List Mode")) +o:value("1", translate("White List Mode")) +o.default=0 + +o = s:taboption("lan_ac", DynamicList, "lan_ac_black_ips", translate("LAN Bypassed Host List")) +o:depends("lan_ac_mode", "0") +o.datatype = "ipaddr" +luci.ip.neighbors({ family = 4 }, function(entry) + if entry.reachable then + o:value(entry.dest:string()) + end +end) + +o = s:taboption("lan_ac", DynamicList, "lan_ac_white_ips", translate("LAN Proxied Host List")) +o:depends("lan_ac_mode", "1") +o.datatype = "ipaddr" +luci.ip.neighbors({ family = 4 }, function(entry) + if entry.reachable then + o:value(entry.dest:string()) + end +end) +end ---- Rules Settings +if op_mode == "fake-ip" then +o = s:taboption("rules", ListValue, "enable_custom_clash_rules", font_red..bold_on..translate("Custom Clash Rules(Access Control)")..bold_off..font_off) +else o = s:taboption("rules", ListValue, "enable_custom_clash_rules", font_red..bold_on..translate("Custom Clash Rules")..bold_off..font_off) +end o.description = translate("Use Custom Rules") o:value("0", translate("Disable")) o:value("1", translate("Enable")) @@ -186,7 +254,9 @@ o:value("lhie1", translate("lhie1 Rules")) o:value("ConnersHua", translate("ConnersHua Rules")) o:value("ConnersHua_return", translate("ConnersHua Return Rules")) +if not fs.isfile("/tmp/Proxy_Group") then SYS.call("/usr/share/openclash/yml_groups_name_get.sh 2>/dev/null") +end file = io.open("/tmp/Proxy_Group", "r"); o = s:taboption("rules", ListValue, "GlobalTV", translate("GlobalTV")) @@ -243,6 +313,12 @@ o:depends("rule_source", "lhie1") end file:seek("set") o = s:taboption("rules", ListValue, "Telegram", translate("Telegram")) +o:depends("rule_source", "lhie1") + for l in file:lines() do + o:value(l) + end + file:seek("set") +o = s:taboption("rules", ListValue, "PayPal", translate("PayPal")) o:depends("rule_source", "lhie1") for l in file:lines() do o:value(l) @@ -459,6 +535,23 @@ function custom_rules.write(self, section, value) end end +custom_rules_2 = s:option(Value, "custom_rules_2") +custom_rules_2.template = "cbi/tvalue" +custom_rules_2.description = translate("Custom Rules 2 Here, For More Go Github:https://github.com/Dreamacro/clash/blob/master/README.md, IP To CIDR: http://ip2cidr.com") +custom_rules_2.rows = 20 +custom_rules_2.wrap = "off" + +function custom_rules_2.cfgvalue(self, section) + return NXFS.readfile("/etc/openclash/custom/openclash_custom_rules_2.list") or "" +end +function custom_rules_2.write(self, section, value) + if value then + value = value:gsub("\r\n?", "\n") + NXFS.writefile("/etc/openclash/custom/openclash_custom_rules_2.list", value) + end +end + +if op_mode == "redir-host" then s = m:section(TypedSection, "openclash", translate("Set Custom Hosts, Only Work with Redir-Host Mode")) s.anonymous = true @@ -477,6 +570,7 @@ function custom_hosts.write(self, section, value) NXFS.writefile("/etc/openclash/custom/openclash_custom_hosts.list", value) end end +end local t = { {Commit, Apply} diff --git a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/update.htm b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/update.htm index e7b726612e..557ad0a541 100644 --- a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/update.htm +++ b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/update.htm @@ -33,8 +33,12 @@ var ma_op_up = document.getElementById('ma_op_up'); XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "update")%>', null, function(x, status) { if ( x && x.status == 200 ) { - cpu_model.innerHTML = status.coremodel ? ""+status.coremodel+"" : "<%:Model Not Found%>"; - cpu_model2.innerHTML = status.coremodel2 ? ""+status.coremodel2+"" : "<%:Model Not Found%>"; + var cpu_models = status.coremodel; + var arr_model = cpu_models.split(","); + var cpu_model1 = arr_model[0]; + var cpu_model22 = arr_model[1]; + cpu_model.innerHTML = cpu_model1 ? ""+cpu_model1+"" : "<%:Model Not Found%>"; + cpu_model2.innerHTML = cpu_model22 ? ""+cpu_model22+"" : "<%:Model Not Found%>"; if ( status.corever != "0\n" && status.corever != "" ) { core_version.innerHTML = ""+status.corever+""; } @@ -69,12 +73,16 @@ else { core_lv.innerHTML = "<%:Unknown%>"; } + var oplv = status.oplv; + var arr_op = oplv.split(","); + var oplvis = arr_op[0]; + var new_op = arr_op[1]; op_cv.innerHTML = status.opcv ? ""+status.opcv+"" : "<%:Unknown%>"; - if ( status.oplv != "" && status.oplv != "\n" && "v"+status.oplv != status.opcv && status.opcv != "" ) { - op_lv.innerHTML = "v"+status.oplv+"<%:%>"; + if ( status.oplv != "" && status.oplv != "\n" && new_op == "2" && status.opcv != "" ) { + op_lv.innerHTML = ""+oplvis+"<%:%>"; } else if (status.oplv != "" && status.oplv != "\n") { - op_lv.innerHTML = "v"+status.oplv+""; + op_lv.innerHTML = ""+oplvis+""; } else { op_lv.innerHTML = "<%:Unknown%>"; @@ -84,8 +92,12 @@ XHR.poll(6, '<%=luci.dispatcher.build_url("admin", "services", "openclash", "update")%>', null, function(x, status) { if ( x && x.status == 200 ) { - cpu_model.innerHTML = status.coremodel ? ""+status.coremodel+"" : "<%:Model Not Found%>"; - cpu_model2.innerHTML = status.coremodel2 ? ""+status.coremodel2+"" : "<%:Model Not Found%>"; + var cpu_models = status.coremodel; + var arr_model = cpu_models.split(","); + var cpu_model1 = arr_model[0]; + var cpu_model22 = arr_model[1]; + cpu_model.innerHTML = cpu_model1 ? ""+cpu_model1+"" : "<%:Model Not Found%>"; + cpu_model2.innerHTML = cpu_model22 ? ""+cpu_model22+"" : "<%:Model Not Found%>"; if ( status.corever != "0\n" && status.corever != "" ) { core_version.innerHTML = ""+status.corever+""; } @@ -120,12 +132,16 @@ else { core_lv.innerHTML = "<%:Unknown%>"; } + var oplv = status.oplv; + var arr_op = oplv.split(","); + var oplvis = arr_op[0]; + var new_op = arr_op[1]; op_cv.innerHTML = status.opcv ? ""+status.opcv+"" : "<%:Unknown%>"; - if ( status.oplv != "" && status.oplv != "\n" && "v"+status.oplv != status.opcv && status.opcv != "" ) { - op_lv.innerHTML = "v"+status.oplv+"<%:%>"; + if ( status.oplv != "" && status.oplv != "\n" && new_op == "2" && status.opcv != "" ) { + op_lv.innerHTML = ""+oplvis+"<%:%>"; } else if (status.oplv != "" && status.oplv != "\n") { - op_lv.innerHTML = "v"+status.oplv+""; + op_lv.innerHTML = ""+oplvis+""; } else { op_lv.innerHTML = "<%:Unknown%>"; diff --git a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/clash_version.sh b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/clash_version.sh index 725b6b22fe..28d888a7bb 100755 --- a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/clash_version.sh +++ b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/clash_version.sh @@ -6,10 +6,15 @@ CLASH_VERF=$(/etc/openclash/clash -v 2>/dev/null) CLASH_VER=$(echo "$CLASH_VERF" 2>/dev/null |awk -F ' ' '{print $2}' 2>/dev/null |awk -F '-' '{print $1$2}' 2>/dev/null |awk -F '.' '{print $2$3}' 2>/dev/null) HTTP_PORT=$(uci get openclash.config.http_port 2>/dev/null) PROXY_ADDR="127.0.0.1" + +if [ -s "/tmp/openclash.auth" ]; then + PROXY_AUTH=$(cat /tmp/openclash.auth |awk -F '- ' '{print $2}' |sed -n '1p' 2>/dev/null) +fi + VERSION_URL="https://raw.githubusercontent.com/vernesong/OpenClash/master/core_version" if [ "$CKTIME" != "$(grep "CheckTime" $LAST_OPVER 2>/dev/null |awk -F ':' '{print $2}')" ]; then if pidof clash >/dev/null; then - curl -sL --connect-timeout 10 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT "$VERSION_URL" -o $LAST_OPVER >/dev/null 2>&1 + curl -sL --connect-timeout 10 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT -U "$PROXY_AUTH" "$VERSION_URL" -o $LAST_OPVER >/dev/null 2>&1 else curl -sL --connect-timeout 10 --retry 2 "$VERSION_URL" -o $LAST_OPVER >/dev/null 2>&1 fi diff --git a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash.sh b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash.sh index 76d272ec1e..aff1c305d1 100755 --- a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash.sh +++ b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash.sh @@ -87,7 +87,7 @@ config_su_check() config_encode() { #proxies - [ ! -z "$(grep "^ \{0,\}\'Proxy\':" "$CFG_FILE")" ] || [ ! -z "$(grep '^ \{0,\}\"Proxy\":' "$CFG_FILE")" ] || [ ! -z "$(grep '^ \{1,\}Proxy:' "$CFG_FILE")" ] && { + [ -z "$(grep "^Proxy:" "$CFG_FILE")" ] && { sed -i "/^ \{0,\}\'Proxy\':/c\Proxy:" "$CFG_FILE" 2>/dev/null sed -i '/^ \{0,\}\"Proxy\":/c\Proxy:' "$CFG_FILE" 2>/dev/null sed -i "/^ \{1,\}Proxy:/c\Proxy:" "$CFG_FILE" 2>/dev/null @@ -99,7 +99,7 @@ config_encode() } #proxy-providers - [ ! -z "$(grep "^ \{0,\}\'proxy-provider\':" "$CFG_FILE")" ] || [ ! -z "$(grep '^ \{0,\}\"proxy-provider\":' "$CFG_FILE")" ] || [ ! -z "$(grep '^ \{1,\}proxy-provider:' "$CFG_FILE")" ] && { + [ -z "$(grep "^proxy-provider:" "$CFG_FILE")" ] && { sed -i "/^ \{0,\}\'proxy-provider\':/c\proxy-provider:" "$CFG_FILE" 2>/dev/null sed -i '/^ \{0,\}\"proxy-provider\":/c\proxy-provider:' "$CFG_FILE" 2>/dev/null sed -i "/^ \{1,\}proxy-provider:/c\proxy-provider:" "$CFG_FILE" 2>/dev/null @@ -110,7 +110,7 @@ config_encode() sed -i "/^ \{0,\}proxy-providers:/c\proxy-provider:" "$CFG_FILE" 2>/dev/null } #proxy-groups - [ ! -z "$(grep "^ \{0,\}\'Proxy Group\':" "$CFG_FILE")" ] || [ ! -z "$(grep '^ \{0,\}\"Proxy Group\":' "$CFG_FILE")" ] || [ ! -z "$(grep '^ \{1,\}Proxy Group:' "$CFG_FILE")" ] && { + [ -z "$(grep "^Proxy Group:" "$CFG_FILE")" ] && { sed -i "/^ \{0,\}\'Proxy Group\':/c\Proxy Group:" "$CFG_FILE" 2>/dev/null sed -i '/^ \{0,\}\"Proxy Group\":/c\Proxy Group:' "$CFG_FILE" 2>/dev/null sed -i "/^ \{1,\}Proxy Group:/c\Proxy Group:" "$CFG_FILE" 2>/dev/null @@ -122,7 +122,7 @@ config_encode() } #rules - [ ! -z "$(grep "^ \{0,\}\'Rule\':" "$CFG_FILE")" ] || [ ! -z "$(grep '^ \{0,\}\"Rule\":' "$CFG_FILE")" ] || [ ! -z "$(grep '^ \{1,\}Rule:' "$CFG_FILE")" ] && { + [ -z "$(grep "^Rule:" "$CFG_FILE")" ] && { sed -i "/^ \{0,\}\'Rule\':/c\Rule:" "$CFG_FILE" 2>/dev/null sed -i '/^ \{0,\}\"Rule\":/c\Rule:' "$CFG_FILE" 2>/dev/null sed -i "/^ \{1,\}Rule:/c\Rule:" "$CFG_FILE" 2>/dev/null diff --git a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash_core.sh b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash_core.sh index 174b4c30c0..c6d11628c3 100755 --- a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash_core.sh +++ b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash_core.sh @@ -9,12 +9,15 @@ LOG_FILE="/tmp/openclash.log" CPU_MODEL=$(uci get openclash.config.core_version 2>/dev/null) HTTP_PORT=$(uci get openclash.config.http_port 2>/dev/null) PROXY_ADDR="127.0.0.1" - +if [ -s "/tmp/openclash.auth" ]; then + PROXY_AUTH=$(cat /tmp/openclash.auth |awk -F '- ' '{print $2}' |sed -n '1p' 2>/dev/null) +fi + if [ "$(/etc/openclash/clash -v 2>/dev/null |awk -F ' ' '{print $2}')" != "$(sed -n 1p /tmp/clash_last_version 2>/dev/null)" ] || [ -z "$(/etc/openclash/clash -v 2>/dev/null |awk -F ' ' '{print $2}')" ] || [ ! -f /etc/openclash/clash ]; then if [ "$CPU_MODEL" != 0 ]; then echo "开始下载 OpenClash 内核..." >$START_LOG if pidof clash >/dev/null; then - curl -sL --connect-timeout 10 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT https://github.com/vernesong/OpenClash/releases/download/Clash/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz >/dev/null 2>&1 + curl -sL --connect-timeout 10 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT -U "$PROXY_AUTH" https://github.com/vernesong/OpenClash/releases/download/Clash/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz >/dev/null 2>&1 else curl -sL --connect-timeout 10 --retry 2 https://github.com/vernesong/OpenClash/releases/download/Clash/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz >/dev/null 2>&1 fi diff --git a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash_game_rule.sh b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash_game_rule.sh index b2d4bc069f..d0d53f4fe3 100755 --- a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash_game_rule.sh +++ b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash_game_rule.sh @@ -12,8 +12,11 @@ LOG_FILE="/tmp/openclash.log" HTTP_PORT=$(uci get openclash.config.http_port 2>/dev/null) PROXY_ADDR="127.0.0.1" + if [ -s "/tmp/openclash.auth" ]; then + PROXY_AUTH=$(cat /tmp/openclash.auth |awk -F '- ' '{print $2}' |sed -n '1p' 2>/dev/null) + fi if pidof clash >/dev/null; then - curl -sL --connect-timeout 10 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT https://raw.githubusercontent.com/FQrabbit/SSTap-Rule/master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1 + curl -sL --connect-timeout 10 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT -U "$PROXY_AUTH" https://raw.githubusercontent.com/FQrabbit/SSTap-Rule/master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1 else curl -sL --connect-timeout 10 --retry 2 https://raw.githubusercontent.com/FQrabbit/SSTap-Rule/master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1 fi diff --git a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash_rule.sh b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash_rule.sh index 10f3010dbd..1dea76188a 100755 --- a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash_rule.sh +++ b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash_rule.sh @@ -6,24 +6,27 @@ RUlE_SOURCE=$(uci get openclash.config.rule_source 2>/dev/null) HTTP_PORT=$(uci get openclash.config.http_port 2>/dev/null) PROXY_ADDR="127.0.0.1" + if [ -s "/tmp/openclash.auth" ]; then + PROXY_AUTH=$(cat /tmp/openclash.auth |awk -F '- ' '{print $2}' |sed -n '1p' 2>/dev/null) + fi echo "开始下载使用中的第三方规则..." >$START_LOG if [ "$RUlE_SOURCE" = "lhie1" ]; then if pidof clash >/dev/null; then - curl -sL --connect-timeout 10 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT https://raw.githubusercontent.com/lhie1/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml >/dev/null 2>&1 + curl -sL --connect-timeout 10 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT -U "$PROXY_AUTH" https://raw.githubusercontent.com/lhie1/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml >/dev/null 2>&1 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 elif [ "$RUlE_SOURCE" = "ConnersHua" ]; then if pidof clash >/dev/null; then - curl -sL --connect-timeout 10 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT https://raw.githubusercontent.com/ConnersHua/Profiles/master/Clash/Pro.yaml -o /tmp/rules.yaml >/dev/null 2>&1 + 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 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 https://raw.githubusercontent.com/ConnersHua/Profiles/master/Clash/BacktoCN.yaml -o /tmp/rules.yaml >/dev/null 2>&1 + 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 diff --git a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash_update.sh b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash_update.sh index 7379cdbe61..d07e9205e0 100755 --- a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash_update.sh +++ b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash_update.sh @@ -10,11 +10,14 @@ LAST_OPVER="/tmp/openclash_last_version" LAST_VER=$(sed -n 1p "$LAST_OPVER" 2>/dev/null |sed "s/^v//g") HTTP_PORT=$(uci get openclash.config.http_port 2>/dev/null) PROXY_ADDR="127.0.0.1" +if [ -s "/tmp/openclash.auth" ]; then + PROXY_AUTH=$(cat /tmp/openclash.auth |awk -F '- ' '{print $2}' |sed -n '1p' 2>/dev/null) +fi if [ "$(sed -n 1p /etc/openclash/openclash_version 2>/dev/null)" != "$(sed -n 1p $LAST_OPVER 2>/dev/null)" ] && [ -f "$LAST_OPVER" ]; then echo "开始下载 OpenClash-$LAST_VER ..." >$START_LOG if pidof clash >/dev/null; then - curl -sL --connect-timeout 10 --retry 5 -x http://$PROXY_ADDR:$HTTP_PORT https://github.com/vernesong/OpenClash/releases/download/v"$LAST_VER"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk >/dev/null 2>&1 + curl -sL --connect-timeout 10 --retry 5 -x http://$PROXY_ADDR:$HTTP_PORT -U "$PROXY_AUTH" https://github.com/vernesong/OpenClash/releases/download/v"$LAST_VER"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk >/dev/null 2>&1 else curl -sL --connect-timeout 10 --retry 5 https://github.com/vernesong/OpenClash/releases/download/v"$LAST_VER"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk >/dev/null 2>&1 fi diff --git a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash_version.sh b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash_version.sh index 91302f7d2c..709018feb4 100755 --- a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash_version.sh +++ b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/openclash_version.sh @@ -1,26 +1,35 @@ #!/bin/sh CKTIME=$(date "+%Y-%m-%d-%H") LAST_OPVER="/tmp/openclash_last_version" +OP_CV=$(sed -n 1p /etc/openclash/openclash_version 2>/dev/null |awk -F '-' '{print $1}' |awk -F '.' '{print $2$3}') +OP_LV=$(sed -n 1p $LAST_OPVER 2>/dev/null |awk -F '-' '{print $1}' |awk -F '.' '{print $2$3}') HTTP_PORT=$(uci get openclash.config.http_port 2>/dev/null) PROXY_ADDR="127.0.0.1" +if [ -s "/tmp/openclash.auth" ]; then + PROXY_AUTH=$(cat /tmp/openclash.auth |awk -F '- ' '{print $2}' |sed -n '1p' 2>/dev/null) +fi + VERSION_URL="https://raw.githubusercontent.com/vernesong/OpenClash/master/version" if [ "$CKTIME" != "$(grep "CheckTime" $LAST_OPVER 2>/dev/null |awk -F ':' '{print $2}')" ]; then if pidof clash >/dev/null; then - curl -sL --connect-timeout 10 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT "$VERSION_URL" -o $LAST_OPVER >/dev/null 2>&1 + curl -sL --connect-timeout 10 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT -U "$PROXY_AUTH" "$VERSION_URL" -o $LAST_OPVER >/dev/null 2>&1 else curl -sL --connect-timeout 10 --retry 2 "$VERSION_URL" -o $LAST_OPVER >/dev/null 2>&1 fi if [ "$?" -eq "0" ] && [ -s "$LAST_OPVER" ]; then - if [ "$(sed -n 1p /etc/openclash/openclash_version 2>/dev/null |awk -F '-' '{print $1}' |awk -F '.' '{print $2$3}')" -ge "$(sed -n 1p $LAST_OPVER 2>/dev/null |awk -F '-' '{print $1}' |awk -F '.' '{print $2$3}')" ]; then + if [ "$OP_CV" -ge "$OP_LV" ]; then sed -i "/^https:/i\CheckTime:${CKTIME}" "$LAST_OPVER" 2>/dev/null sed -i '/^https:/,$d' $LAST_OPVER else sed -i "/^https:/i\CheckTime:${CKTIME}" "$LAST_OPVER" 2>/dev/null + return 2 fi else rm -rf "$LAST_OPVER" fi -elif [ "$(sed -n 1p /etc/openclash/openclash_version 2>/dev/null |awk -F '-' '{print $1}' |awk -F '.' '{print $2$3}')" -ge "$(sed -n 1p $LAST_OPVER 2>/dev/null |awk -F '-' '{print $1}' |awk -F '.' '{print $2$3}')" ]; then +elif [ "$OP_CV" -ge "$OP_LV" ]; then sed -i '/^CheckTime:/,$d' $LAST_OPVER echo "CheckTime:$CKTIME" >>$LAST_OPVER +elif [ "$OP_CV" -lt "$OP_LV" ]; then + return 2 fi \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/yml_groups_name_get.sh b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/yml_groups_name_get.sh index e918a313fc..dd12474954 100755 --- a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/yml_groups_name_get.sh +++ b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/yml_groups_name_get.sh @@ -14,10 +14,10 @@ fi if [ -f "$CFG_FILE" ]; then #检查关键字避免后续操作出错 #proxies - [ ! -z "$(grep "^ \{0,\}\'Proxy\':" "$CFG_FILE")" ] || [ ! -z "$(grep '^ \{0,\}\"Proxy\":' "$CFG_FILE")" ] || [ ! -z "$(grep '^ \{1,\}Proxy:' "$CFG_FILE")" ] && { - sed -i "/^ \{0,\}\'Proxy\':/c\Proxy:" "$CFG_FILE" 2>/dev/null - sed -i '/^ \{0,\}\"Proxy\":/c\Proxy:' "$CFG_FILE" 2>/dev/null - sed -i "/^ \{1,\}Proxy:/c\Proxy:" "$CFG_FILE" 2>/dev/null + [ -z "$(grep "^Proxy:" "$CFG_FILE")" ] && { + sed -i "s/^ \{0,\}\'Proxy\':/Proxy:/" "$CFG_FILE" 2>/dev/null + sed -i 's/^ \{0,\}\"Proxy\":/Proxy:/' "$CFG_FILE" 2>/dev/null + sed -i "s/^ \{1,\}Proxy:/c\Proxy:/" "$CFG_FILE" 2>/dev/null } [ -z "$(grep "^Proxy:" "$CFG_FILE")" ] && { sed -i "s/^\'proxies\':/Proxy:/" "$CFG_FILE" 2>/dev/null @@ -26,10 +26,10 @@ if [ -f "$CFG_FILE" ]; then } #proxy-providers - [ ! -z "$(grep "^ \{0,\}\'proxy-provider\':" "$CFG_FILE")" ] || [ ! -z "$(grep '^ \{0,\}\"proxy-provider\":' "$CFG_FILE")" ] || [ ! -z "$(grep '^ \{1,\}proxy-provider:' "$CFG_FILE")" ] && { - sed -i "/^ \{0,\}\'proxy-provider\':/c\proxy-provider:" "$CFG_FILE" 2>/dev/null - sed -i '/^ \{0,\}\"proxy-provider\":/c\proxy-provider:' "$CFG_FILE" 2>/dev/null - sed -i "/^ \{1,\}proxy-provider:/c\proxy-provider:" "$CFG_FILE" 2>/dev/null + [ -z "$(grep "^proxy-provider:" "$CFG_FILE")" ] && { + sed -i "s/^ \{0,\}\'proxy-provider\':/proxy-provider:/" "$CFG_FILE" 2>/dev/null + sed -i 's/^ \{0,\}\"proxy-provider\":/proxy-provider:/' "$CFG_FILE" 2>/dev/null + sed -i "s/^ \{1,\}proxy-provider:/proxy-provider:/" "$CFG_FILE" 2>/dev/null } [ -z "$(grep "^proxy-provider:" "$CFG_FILE")" ] && { sed -i "/^ \{0,\}\'proxy-providers\':/c\proxy-provider:" "$CFG_FILE" 2>/dev/null @@ -37,22 +37,22 @@ if [ -f "$CFG_FILE" ]; then sed -i "/^ \{0,\}proxy-providers:/c\proxy-provider:" "$CFG_FILE" 2>/dev/null } #proxy-groups - [ ! -z "$(grep "^ \{0,\}\'Proxy Group\':" "$CFG_FILE")" ] || [ ! -z "$(grep '^ \{0,\}\"Proxy Group\":' "$CFG_FILE")" ] || [ ! -z "$(grep '^ \{1,\}Proxy Group:' "$CFG_FILE")" ] && { - sed -i "/^ \{0,\}\'Proxy Group\':/c\Proxy Group:" "$CFG_FILE" 2>/dev/null - sed -i '/^ \{0,\}\"Proxy Group\":/c\Proxy Group:' "$CFG_FILE" 2>/dev/null - sed -i "/^ \{1,\}Proxy Group:/c\Proxy Group:" "$CFG_FILE" 2>/dev/null + [ -z "$(grep "^Proxy Group:" "$CFG_FILE")" ] && { + sed -i "s/^ \{0,\}\'Proxy Group\':/Proxy Group:/" "$CFG_FILE" 2>/dev/null + sed -i 's/^ \{0,\}\"Proxy Group\":/Proxy Group:/' "$CFG_FILE" 2>/dev/null + sed -i "s/^ \{1,\}Proxy Group:/Proxy Group:/" "$CFG_FILE" 2>/dev/null } [ -z "$(grep "^Proxy Group:" "$CFG_FILE")" ] && { - sed -i "/^ \{0,\}\'proxy-groups\':/c\Proxy Group:" "$CFG_FILE" 2>/dev/null - sed -i '/^ \{0,\}\"proxy-groups\":/c\Proxy Group:' "$CFG_FILE" 2>/dev/null - sed -i "/^ \{0,\}proxy-groups:/c\Proxy Group:" "$CFG_FILE" 2>/dev/null + sed -i "s/^ \{0,\}\'proxy-groups\':/Proxy Group:/" "$CFG_FILE" 2>/dev/null + sed -i 's/^ \{0,\}\"proxy-groups\":/Proxy Group:/' "$CFG_FILE" 2>/dev/null + sed -i "s/^ \{0,\}proxy-groups:/Proxy Group:/" "$CFG_FILE" 2>/dev/null } #rules - [ ! -z "$(grep "^ \{0,\}\'Rule\':" "$CFG_FILE")" ] || [ ! -z "$(grep '^ \{0,\}\"Rule\":' "$CFG_FILE")" ] || [ ! -z "$(grep '^ \{1,\}Rule:' "$CFG_FILE")" ] && { - sed -i "/^ \{0,\}\'Rule\':/c\Rule:" "$CFG_FILE" 2>/dev/null - sed -i '/^ \{0,\}\"Rule\":/c\Rule:' "$CFG_FILE" 2>/dev/null - sed -i "/^ \{1,\}Rule:/c\Rule:" "$CFG_FILE" 2>/dev/null + [ -z "$(grep "^Rule:" "$CFG_FILE")" ] && { + sed -i "s/^ \{0,\}\'Rule\':/Rule:/" "$CFG_FILE" 2>/dev/null + sed -i 's/^ \{0,\}\"Rule\":/Rule:/' "$CFG_FILE" 2>/dev/null + sed -i "s/^ \{1,\}Rule:/Rule:/" "$CFG_FILE" 2>/dev/null } [ -z "$(grep "^Rule:" "$CFG_FILE")" ] && { sed -i "/^ \{0,\}\'rules\':/c\Rule:" "$CFG_FILE" 2>/dev/null @@ -61,10 +61,10 @@ if [ -f "$CFG_FILE" ]; then } #dns - [ ! -z "$(grep "^ \{0,\}\'dns\':" "$CFG_FILE")" ] || [ ! -z "$(grep '^ \{0,\}\"dns\":' "$CFG_FILE")" ] || [ ! -z "$(grep '^ \{1,\}dns:' "$CFG_FILE")" ] && { - sed -i "/^ \{0,\}\'dns\':/c\dns:" "$CFG_FILE" 2>/dev/null - sed -i '/^ \{0,\}\"dns\":/c\dns:' "$CFG_FILE" 2>/dev/null - sed -i "/^ \{1,\}dns:/c\dns:" "$CFG_FILE" 2>/dev/null + [ -z "$(grep "^dns:" "$CFG_FILE")" ] && { + sed -i "s/^ \{0,\}\'dns\':/dns:/" "$CFG_FILE" 2>/dev/null + sed -i 's/^ \{0,\}\"dns\":/dns:/' "$CFG_FILE" 2>/dev/null + sed -i "s/^ \{1,\}dns:/dns:/" "$CFG_FILE" 2>/dev/null } #判断各个区位置 diff --git a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/yml_proxys_set.sh b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/yml_proxys_set.sh index 7eb6e81408..402c06334d 100755 --- a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/yml_proxys_set.sh +++ b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/yml_proxys_set.sh @@ -578,6 +578,20 @@ EOF fi cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null cat >> "$SERVER_FILE" <<-EOF +- name: PayPal + type: select + proxies: + - DIRECT + - Proxy +EOF +cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null +if [ -f "/tmp/Proxy_Provider" ]; then +cat >> "$SERVER_FILE" <<-EOF + use: +EOF +fi +cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null +cat >> "$SERVER_FILE" <<-EOF - name: Netease Music type: select proxies: @@ -603,6 +617,7 @@ uci set openclash.config.AdBlock="AdBlock" uci set openclash.config.Netease_Music="Netease Music" uci set openclash.config.Speedtest="Speedtest" uci set openclash.config.Telegram="Telegram" +uci set openclash.config.PayPal="PayPal" uci set openclash.config.Domestic="Domestic" uci set openclash.config.Others="Others" [ "$config_auto_update" -eq 1 ] && { @@ -616,6 +631,7 @@ uci set openclash.config.Others="Others" uci add_list openclash.config.new_servers_group="Spotify" uci add_list openclash.config.new_servers_group="Steam" uci add_list openclash.config.new_servers_group="Telegram" + uci add_list openclash.config.new_servers_group="PayPal" uci add_list openclash.config.new_servers_group="Speedtest" uci add_list openclash.config.new_servers_group="Netease Music" } diff --git a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/yml_rules_change.sh b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/yml_rules_change.sh index 28ee1e21c1..d09ebf0767 100755 --- a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/yml_rules_change.sh +++ b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/yml_rules_change.sh @@ -33,6 +33,7 @@ if [ "$2" != 0 ]; then Netease_Music=$(grep '##Netease_Music:' "$4" |awk -F ':' '{print $2}') Speedtest=$(grep '##Speedtest:' "$4" |awk -F ':' '{print $2}') Telegram=$(grep '##Telegram:' "$4" |awk -F ':' '{print $2}') + PayPal=$(grep '##PayPal:' "$4" |awk -F ':' '{print $2}') if [ "$2" = "ConnersHua_return" ]; then if [ "$(uci get openclash.config.Proxy)" != "$Proxy" ]\ @@ -61,6 +62,7 @@ if [ "$2" != 0 ]; then || [ "$(uci get openclash.config.Netease_Music)" != "$Netease_Music" ]\ || [ "$(uci get openclash.config.Speedtest)" != "$Speedtest" ]\ || [ "$(uci get openclash.config.Telegram)" != "$Telegram" ]\ + || [ "$(uci get openclash.config.PayPal)" != "$PayPal" ]\ || [ "$(uci get openclash.config.Others)" != "$Others" ]\ || [ "$(uci get openclash.config.Domestic)" != "$Domestic" ]; then check_def=1 @@ -80,6 +82,7 @@ if [ "$2" != 0 ]; then Netease_Music=$(uci get openclash.config.Netease_Music 2>/dev/null) Speedtest=$(uci get openclash.config.Speedtest 2>/dev/null) Telegram=$(uci get openclash.config.Telegram 2>/dev/null) + PayPal=$(uci get openclash.config.PayPal 2>/dev/null) Domestic=$(uci get openclash.config.Domestic 2>/dev/null) Others=$(uci get openclash.config.Others 2>/dev/null) if [ "$2" = "lhie1" ]; then @@ -96,6 +99,7 @@ if [ "$2" != 0 ]; then -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/,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/#d//g" "$4" @@ -120,10 +124,10 @@ if [ "$2" != 0 ]; then fi fi elif [ "$2" = 0 ]; then - [ -f /etc/openclash/config.bak ] && { + [ -f "$8" ] && { grep '##source:' "$4" 1>/dev/null if [ "$?" -eq "0" ]; then - cp /etc/openclash/config.bak /etc/openclash/configrules.bak + cp "$8" /etc/openclash/configrules.bak sed -i -n '/^Rule:/,$p' /etc/openclash/configrules.bak sed -i '/^Rule:/,$d' "$4" cat /etc/openclash/configrules.bak >> "$4" @@ -132,16 +136,24 @@ elif [ "$2" = 0 ]; then } fi - sed -i '/^##Custom Rules/,/^##Custom Rules End/d' "$4" 2>/dev/null - sed -i '/^##Custom Rules/d' "$4" 2>/dev/null - sed -i '/^##Custom Rules End/d' "$4" 2>/dev/null + sed -i '/^##Custom Rules##/,/^##Custom Rules End##/d' "$4" 2>/dev/null + sed -i '/^##Custom Rules##/d' "$4" 2>/dev/null + sed -i '/^##Custom Rules End##/d' "$4" 2>/dev/null + sed -i '/^##Custom Rules 2##/,/^##Custom Rules 2 End##/d' "$4" 2>/dev/null + sed -i '/^##Custom Rules 2##/d' "$4" 2>/dev/null + sed -i '/^##Custom Rules 2 End##/d' "$4" 2>/dev/null + sed -i '/- DOMAIN-KEYWORD,tracker,DIRECT/d' "$4" 2>/dev/null + 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 '/^##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 '/^##Custom Rules 2##/a\##Custom Rules 2 End##' "$4" 2>/dev/null + sed -i '/^##Custom Rules 2##/r/etc/openclash/custom/openclash_custom_rules_2.list' "$4" 2>/dev/null fi - if [ "$5" = 1 ] || [ "$3" = 1 ] || [ -z "$(grep '- IP-CIDR,198.18.0.1/16,REJECT,no-resolve' "$4")" ]; then + if [ "$5" = 1 ] || [ "$3" = 1 ] || [ "$7" = 1 ] || [ -z "$(grep '- IP-CIDR,198.18.0.1/16,REJECT,no-resolve' "$4")" ]; then sed -i "s/^ \{0,\}-/-/" "$4" 2>/dev/null #修改参数空格 sed -i "s/^\t\{0,\}-/-/" "$4" 2>/dev/null #修改参数tab fi @@ -150,6 +162,23 @@ fi if [ ! -z "$(grep "^ \{0,\}- IP-CIDR,198.18.0.1/16" "$4")" ]; then sed -i "/^ \{0,\}- IP-CIDR,198.18.0.1\/16/c\- IP-CIDR,198.18.0.1\/16,REJECT,no-resolve" "$4" else - sed -i '1,/^ \{0,\}- GEOIP/{/^ \{0,\}- GEOIP/s/^ \{0,\}- GEOIP/- IP-CIDR,198.18.0.1\/16,REJECT,no-resolve\n&/}' "$4" + sed -i '1,/^ \{0,\}- GEOIP/{/^ \{0,\}- GEOIP/s/^ \{0,\}- GEOIP/- IP-CIDR,198.18.0.1\/16,REJECT,no-resolve\n&/}' "$4"\ + || sed -i '1,/^ \{0,\}- MATCH/{/^ \{0,\}- MATCH/s/^ \{0,\}- MATCH/- IP-CIDR,198.18.0.1\/16,REJECT,no-resolve\n&/}' "$4"\ + || sed -i '1,/^ \{0,\}- FINAL/{/^ \{0,\}- FINAL/s/^ \{0,\}- FINAL/- IP-CIDR,198.18.0.1\/16,REJECT,no-resolve\n&/}' "$4" + fi + fi + + if [ "$7" = 1 ]; then + sed -i '1,/^ \{0,\}- GEOIP/{/^ \{0,\}- GEOIP/s/^ \{0,\}- GEOIP/- DOMAIN-KEYWORD,tracker,DIRECT\n&/}' "$4" + if [ -z "$(grep "###- MATCH," "$4")" ] && [ -z "$(grep "###- FINAL," "$4")" ]; then + sed -i 's/- MATCH,/###&/' "$4" 2>/dev/null + sed -i 's/- FINAL,/###&/' "$4" 2>/dev/null + echo "- MATCH,DIRECT" >> "$4" 2>/dev/null + fi + else + if [ ! -z "$(grep "###- MATCH," "$4")" ] || [ ! -z "$(grep "###- FINAL," "$4")" ]; then + sed -i '/^- MATCH,DIRECT/d' "$4" 2>/dev/null + sed -i "s/###- MATCH,/- MATCH,/" "$4" 2>/dev/null + sed -i "s/###- FINAL,/- FINAL,/" "$4" 2>/dev/null fi fi \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/i18n/zh-cn/openclash.zh-cn.po b/package/ctcgfw/luci-app-openclash/i18n/zh-cn/openclash.zh-cn.po index ad944623c7..d36fc96568 100644 --- a/package/ctcgfw/luci-app-openclash/i18n/zh-cn/openclash.zh-cn.po +++ b/package/ctcgfw/luci-app-openclash/i18n/zh-cn/openclash.zh-cn.po @@ -235,6 +235,9 @@ msgstr "" "固件须配置好IPV6的NAT,如你不使用IPV6请关闭固件的相关服务,避免客户端连接出现异常" msgid "Rules Setting" +msgstr "规则设置" + +msgid "Rules Setting(Access Control)" msgstr "规则设置(访问控制)" msgid "Config Manage" @@ -430,6 +433,9 @@ msgstr "测速流量" msgid "Telegram" msgstr "Telegram流量" +msgid "PayPal" +msgstr "PayPal流量" + msgid "AdBlock" msgstr "广告流量" @@ -443,10 +449,16 @@ msgid "Choose Proxy Group, Base On Your Servers Group in config.yaml" msgstr "指定流量(策略)的代理方式,只支持选择(服务器组),信息来源于您的配置文件" msgid "Custom Clash Rules" +msgstr "自定义规则" + +msgid "Custom Clash Rules(Access Control)" msgstr "自定义规则(访问控制)" msgid "Custom Rules Here, For More Go Github:https://github.com/Dreamacro/clash/blob/master/README.md, IP To CIDR: http://ip2cidr.com" -msgstr "设置自定义规则,详细信息请前往Github( https://github.com/Dreamacro/clash/blob/master/README.md )查询,在线IP段转CIDR地址:http://ip2cidr.com" +msgstr "设置自定义规则(顶部),详细信息请前往Github( https://github.com/Dreamacro/clash/blob/master/README.md )查询,在线IP段转CIDR地址:http://ip2cidr.com" + +msgid "Custom Rules 2 Here, For More Go Github:https://github.com/Dreamacro/clash/blob/master/README.md, IP To CIDR: http://ip2cidr.com" +msgstr "设置自定义规则(底部),详细信息请前往Github( https://github.com/Dreamacro/clash/blob/master/README.md )查询,在线IP段转CIDR地址:http://ip2cidr.com" msgid "Custom Hosts Here, For More Go Github:https://github.com/Dreamacro/clash/blob/master/README.md" msgstr "设置自定义Hosts,详细信息请前往Github( https://github.com/Dreamacro/clash/blob/master/README.md )查询" @@ -785,3 +797,48 @@ msgstr "*代理UDP流量" msgid "Select Mode For UDP Traffics, The Servers Must Support UDP while Choose Proxy" msgstr "启用时服务器必须支持UDP转发" + +msgid "Operation Mode" +msgstr "模式设置" + +msgid "Select Operation Mode" +msgstr "*页面操作模式" + +msgid "Select Mode For Page Settings, Switch By Click the Button Bellow" +msgstr "选择全局设置的操作模式,单击下面的按钮进行切换" + +msgid "redir-host mode" +msgstr "Redir-Host 模式" + +msgid "fake-ip mode" +msgstr "Fake-IP 模式" + +msgid "Switch Operation Mode" +msgstr "切换操作模式" + +msgid "Switch Mode" +msgstr "切换" + +msgid "Access Control" +msgstr "访问控制" + +msgid "Access Control Mode" +msgstr "访问控制模式" + +msgid "Black List Mode" +msgstr "黑名单模式" + +msgid "White List Mode" +msgstr "白名单模式" + +msgid "LAN Bypassed Host List" +msgstr "不走代理的局域网LAN IP" + +msgid "LAN Proxied Host List" +msgstr "走代理的局域网LAN IP" + +msgid "Rule Match Proxy Mode" +msgstr "*仅代理命中规则流量" + +msgid "Only Proxy Rules Match, Prevent BT Passing" +msgstr "仅允许代理命中规则的流量,防止BT下载流量经过代理" \ No newline at end of file