mirror of
https://github.com/kenzok8/small-package
synced 2025-01-08 13:27:36 +08:00
update 2022-12-20 08:47:57
This commit is contained in:
parent
4fd5968d39
commit
6f9e8e36ff
@ -1,7 +1,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-openclash
|
||||
PKG_VERSION:=0.45.70
|
||||
PKG_VERSION:=0.45.78
|
||||
PKG_RELEASE:=beta
|
||||
PKG_MAINTAINER:=vernesong <https://github.com/vernesong/OpenClash>
|
||||
|
||||
|
@ -1157,7 +1157,7 @@ function action_refresh_log()
|
||||
end
|
||||
if ex_match then break end
|
||||
|
||||
core_keys = {" DBG ", " INF ", "level=", " WRN ", " ERR "}
|
||||
core_keys = {" DBG ", " INF ", "level=", " WRN ", " ERR ", " FTL "}
|
||||
for key=1, #core_keys do
|
||||
if string.find(string.sub(line, 0, 13), core_keys[key]) or (string.find(line, core_keys[key]) and core_keys[key] == "level=") then
|
||||
core_match = true
|
||||
|
@ -49,6 +49,11 @@ for t,f in ipairs(fs.glob("/etc/openclash/config/*"))do
|
||||
end
|
||||
end
|
||||
|
||||
o = s:option(Flag, "manual", translate("Custom Tag"))
|
||||
o.rmempty = false
|
||||
o.default = "0"
|
||||
o.description = translate("Mark as Custom Node to Prevent Retention config from being Deleted When Enabled")
|
||||
|
||||
o = s:option(ListValue, "type", translate("Provider Type"))
|
||||
o.rmempty = true
|
||||
o.description = translate("Choose The Provider Type")
|
||||
@ -58,9 +63,6 @@ o:value("file")
|
||||
o = s:option(Value, "name", translate("Provider Name"))
|
||||
o.rmempty = false
|
||||
o.default = "Proxy-provider - "..sid
|
||||
if not m.uci:get("openclash", sid, "name") then
|
||||
m.uci:set("openclash", sid, "manual", 1)
|
||||
end
|
||||
|
||||
o = s:option(ListValue, "path", translate("Provider Path"))
|
||||
o.description = translate("Update Your Proxy Provider File From Config Luci Page")
|
||||
|
@ -17,7 +17,7 @@ m.description=translate("Attention:")..
|
||||
"<br/>"..translate("1. In the <server and policy group management> page, create the policy group and node you are going to use, and apply the configuration (when adding nodes, you must select the policy group you want to join). Policy group type suggestion: fallback, game nodes must be support UDP and not a Vmess")..
|
||||
"<br/>"..translate("2. Click the <manage third party game rules> or <manage third party rule set> button to enter the rule list and download the rules you want to use")..
|
||||
"<br/>"..translate("3. On this page, set the corresponding configuration file and policy group of the rule you have downloaded, and save the settings")..
|
||||
"<br/>"..translate("4. Install the TUN core")..
|
||||
"<br/>"..translate("4. Install the TUN or Meta core")..
|
||||
"<br/>"..
|
||||
"<br/>"..translate("When setting this page, if the groups is empty, please go to the <server and group management> page to add")..
|
||||
"<br/>"..
|
||||
|
@ -122,24 +122,29 @@ for t,f in ipairs(fs.glob("/etc/openclash/config/*"))do
|
||||
end
|
||||
end
|
||||
|
||||
o = s:option(Flag, "manual", translate("Custom Tag"))
|
||||
o.rmempty = false
|
||||
o.default = "0"
|
||||
o.description = translate("Mark as Custom Node to Prevent Retention config from being Deleted When Enabled")
|
||||
|
||||
o = s:option(ListValue, "type", translate("Server Node Type"))
|
||||
o:value("ss", translate("Shadowsocks"))
|
||||
o:value("ssr", translate("ShadowsocksR"))
|
||||
o:value("vmess", translate("Vmess"))
|
||||
o:value("trojan", translate("trojan"))
|
||||
o:value("vless", translate("Vless ")..translate("(Only Meta Core)"))
|
||||
o:value("hysteria", translate("Hysteria ")..translate("(Only Meta Core)"))
|
||||
o:value("trojan", translate("trojan"))
|
||||
o:value("wireguard", translate("WireGuard")..translate("(TUN&Meta Core)"))
|
||||
o:value("tuic", translate("Tuic")..translate("(Only Meta Core)"))
|
||||
o:value("snell", translate("Snell"))
|
||||
o:value("socks5", translate("Socks5"))
|
||||
o:value("http", translate("HTTP(S)"))
|
||||
|
||||
o.description = translate("Using incorrect encryption mothod may causes service fail to start")
|
||||
|
||||
o = s:option(Value, "name", translate("Server Alias"))
|
||||
o.rmempty = false
|
||||
o.default = "Server - "..sid
|
||||
if not m.uci:get("openclash", sid, "name") then
|
||||
m.uci:set("openclash", sid, "manual", 1)
|
||||
end
|
||||
|
||||
o = s:option(Value, "server", translate("Server Address"))
|
||||
o.datatype = "host"
|
||||
@ -150,6 +155,13 @@ o.datatype = "port"
|
||||
o.rmempty = false
|
||||
o.default = "443"
|
||||
|
||||
o = s:option(Value, "ports", translate("Port Hopping"))
|
||||
o.datatype = "portrange"
|
||||
o.rmempty = true
|
||||
o.default = "20000-40000"
|
||||
o.placeholder = translate("20000-40000")
|
||||
o:depends("type", "hysteria")
|
||||
|
||||
o = s:option(Value, "password", translate("Password"))
|
||||
o.password = true
|
||||
o.rmempty = false
|
||||
@ -157,6 +169,112 @@ o:depends("type", "ss")
|
||||
o:depends("type", "ssr")
|
||||
o:depends("type", "trojan")
|
||||
|
||||
-- [[ Tuic ]]--
|
||||
o = s:option(Value, "tc_ip", translate("Server IP"))
|
||||
o.rmempty = true
|
||||
o.placeholder = translate("127.0.0.1")
|
||||
o.datatype = "ip4addr"
|
||||
o:depends("type", "tuic")
|
||||
|
||||
o = s:option(Value, "tc_token", translate("Token"))
|
||||
o.rmempty = true
|
||||
o:depends("type", "tuic")
|
||||
|
||||
o = s:option(ListValue, "udp_relay_mode", translate("UDP Relay Mode"))
|
||||
o.rmempty = true
|
||||
o.default = "native"
|
||||
o:value("native")
|
||||
o:value("quic")
|
||||
o:depends("type", "tuic")
|
||||
|
||||
o = s:option(ListValue, "congestion_controller", translate("Congestion Controller"))
|
||||
o.rmempty = true
|
||||
o.default = "cubic"
|
||||
o:value("cubic")
|
||||
o:value("bbr")
|
||||
o:value("new_reno")
|
||||
o:depends("type", "tuic")
|
||||
|
||||
o = s:option(DynamicList, "tc_alpn", translate("Alpn"))
|
||||
o.rmempty = true
|
||||
o:value("h3")
|
||||
o:value("h2")
|
||||
o:depends("type", "tuic")
|
||||
|
||||
o = s:option(ListValue, "disable_sni", translate("Disable SNI"))
|
||||
o.rmempty = true
|
||||
o.default = "true"
|
||||
o:value("true")
|
||||
o:value("false")
|
||||
o:depends("type", "tuic")
|
||||
|
||||
o = s:option(ListValue, "reduce_rtt", translate("Reduce RTT"))
|
||||
o.rmempty = true
|
||||
o.default = "true"
|
||||
o:value("true")
|
||||
o:value("false")
|
||||
o:depends("type", "tuic")
|
||||
|
||||
o = s:option(Value, "heartbeat_interval", translate("Heartbeat Interval"))
|
||||
o.rmempty = true
|
||||
o:depends("type", "tuic")
|
||||
o.default = "8000"
|
||||
|
||||
o = s:option(Value, "request_timeout", translate("Request Timeout"))
|
||||
o.rmempty = true
|
||||
o.default = "8000"
|
||||
o:depends("type", "tuic")
|
||||
|
||||
o = s:option(Value, "max_udp_relay_packet_size", translate("Max UDP Relay Packet Size"))
|
||||
o.rmempty = true
|
||||
o.default = "1500"
|
||||
o:depends("type", "tuic")
|
||||
|
||||
o = s:option(Value, "max_open_streams", translate("Max Open Streams"))
|
||||
o.rmempty = true
|
||||
o.default = "100"
|
||||
o:depends("type", "tuic")
|
||||
|
||||
-- [[ Wireguard ]]--
|
||||
o = s:option(Value, "wg_ip", translate("IP"))
|
||||
o.rmempty = true
|
||||
o.placeholder = translate("127.0.0.1")
|
||||
o.datatype = "ip4addr"
|
||||
o:depends("type", "wireguard")
|
||||
|
||||
o = s:option(Value, "wg_ipv6", translate("IPv6"))
|
||||
o.rmempty = true
|
||||
o.placeholder = translate("your_ipv6")
|
||||
o.datatype = "ip6addr"
|
||||
o:depends("type", "wireguard")
|
||||
|
||||
o = s:option(Value, "private_key", translate("Private Key"))
|
||||
o.rmempty = true
|
||||
o.placeholder = translate("eCtXsJZ27+4PbhDkHnB923tkUn2Gj59wZw5wFA75MnU=")
|
||||
o:depends("type", "wireguard")
|
||||
|
||||
o = s:option(Value, "public_key", translate("Public Key"))
|
||||
o.rmempty = true
|
||||
o.placeholder = translate("Cr8hWlKvtDt7nrvf+f0brNQQzabAqrjfBvas9pmowjo=")
|
||||
o:depends("type", "wireguard")
|
||||
|
||||
o = s:option(Value, "preshared_key", translate("Preshared Key"))
|
||||
o.rmempty = true
|
||||
o.placeholder = translate("base64")
|
||||
o:depends("type", "wireguard")
|
||||
|
||||
o = s:option(DynamicList, "wg_dns", translate("DNS"))
|
||||
o.rmempty = true
|
||||
o:value("1.1.1.1")
|
||||
o:value("8.8.8.8")
|
||||
o:depends("type", "wireguard")
|
||||
|
||||
o = s:option(Value, "wg_mtu", translate("MTU"))
|
||||
o.rmempty = true
|
||||
o.default = "1420"
|
||||
o.placeholder = translate("1420")
|
||||
o:depends("type", "wireguard")
|
||||
|
||||
o = s:option(ListValue, "hysteria_protocol", translate("Protocol"))
|
||||
for _, v in ipairs(hysteria_protocols) do o:value(v) end
|
||||
o.rmempty = false
|
||||
@ -172,16 +290,6 @@ o.rmempty = false
|
||||
o.description = translate("Required")
|
||||
o:depends("type", "hysteria")
|
||||
|
||||
--o = s:option(Value, "up_mbps", translate("up_mbps"))
|
||||
--o.rmempty = true
|
||||
--o.datatype = "uinteger"
|
||||
--o:depends("type", "hysteria")
|
||||
|
||||
--o = s:option(Value, "down_mbps", translate("down_mbps"))
|
||||
--o.rmempty = true
|
||||
--o.datatype = "uinteger"
|
||||
--o:depends("type", "hysteria")
|
||||
|
||||
o = s:option(Value, "psk", translate("Psk"))
|
||||
o.rmempty = true
|
||||
o:depends("type", "snell")
|
||||
@ -240,7 +348,7 @@ o:depends("type", "vless")
|
||||
|
||||
o = s:option(ListValue, "udp", translate("UDP Enable"))
|
||||
o.rmempty = true
|
||||
o.default = "false"
|
||||
o.default = "true"
|
||||
o:value("true")
|
||||
o:value("false")
|
||||
o:depends("type", "ss")
|
||||
@ -250,6 +358,7 @@ o:depends("type", "vless")
|
||||
o:depends("type", "socks5")
|
||||
o:depends("type", "trojan")
|
||||
o:depends({type = "snell", snell_version = "3"})
|
||||
o:depends("type", "wireguard")
|
||||
|
||||
o = s:option(ListValue, "xudp", translate("XUDP Enable")..translate("(Only Meta Core)"))
|
||||
o.rmempty = true
|
||||
@ -394,6 +503,15 @@ o:depends("type", "http")
|
||||
o:depends("type", "trojan")
|
||||
o:depends("type", "vless")
|
||||
o:depends("type", "hysteria")
|
||||
o:depends("type", "tuic")
|
||||
|
||||
o = s:option(ListValue, "fast_open", translate("Fast Open"))
|
||||
o.rmempty = true
|
||||
o.default = "false"
|
||||
o:value("true")
|
||||
o:value("false")
|
||||
o:depends("type", "hysteria")
|
||||
o:depends("type", "tuic")
|
||||
|
||||
-- [[ TLS ]]--
|
||||
o = s:option(ListValue, "tls", translate("tls"))
|
||||
@ -477,6 +595,7 @@ o:depends("type", "trojan")
|
||||
o = s:option(DynamicList, "hysteria_alpn", translate("alpn"))
|
||||
o.rmempty = false
|
||||
o:value("h3")
|
||||
o:value("h2")
|
||||
o:depends("type", "hysteria")
|
||||
|
||||
-- [[ grpc ]]--
|
||||
@ -552,6 +671,16 @@ o:value("false")
|
||||
o.default = "false"
|
||||
o:depends("type", "hysteria")
|
||||
|
||||
-- [[ fingerprint ]]--
|
||||
o = s:option(Value, "fingerprint", translate("Fingerprint"))
|
||||
o.rmempty = true
|
||||
o:depends("type", "hysteria")
|
||||
|
||||
o = s:option(Value, "hop_interval", translate("Hop Interval"))
|
||||
o.rmempty = true
|
||||
o.default = "10"
|
||||
o:depends("type", "hysteria")
|
||||
|
||||
-- [[ interface-name ]]--
|
||||
o = s:option(Value, "interface_name", translate("interface-name"))
|
||||
o.rmempty = true
|
||||
|
@ -11,6 +11,11 @@ bold_off = [[</strong>]]
|
||||
|
||||
m = Map(openclash, translate("Servers manage and Config create"))
|
||||
m.pageaction = false
|
||||
m.description=translate("Attention:")..
|
||||
"<br/>"..translate("1. Before modifying the configuration file, please click the button below to read the configuration file")..
|
||||
"<br/>"..translate("2. Proxy-providers address can be directly filled in the subscription link")..
|
||||
"<br/>"..
|
||||
"<br/>"..translate("Introduction to proxy usage: https://lancellc.gitbook.io/clash/clash-config-file/proxies")
|
||||
|
||||
s = m:section(TypedSection, "openclash")
|
||||
s.anonymous = true
|
||||
@ -105,6 +110,13 @@ o.cfgvalue = function(...)
|
||||
return Flag.cfgvalue(...) or "1"
|
||||
end
|
||||
|
||||
o = s:option(Flag, "manual", translate("Custom Tag"))
|
||||
o.rmempty = false
|
||||
o.default = "0"
|
||||
o.cfgvalue = function(...)
|
||||
return Flag.cfgvalue(...) or "0"
|
||||
end
|
||||
|
||||
o = s:option(DummyValue, "config", translate("Config File"))
|
||||
function o.cfgvalue(...)
|
||||
return Value.cfgvalue(...) or translate("all")
|
||||
@ -143,6 +155,13 @@ o.cfgvalue = function(...)
|
||||
return Flag.cfgvalue(...) or "1"
|
||||
end
|
||||
|
||||
o = s:option(Flag, "manual", translate("Custom Tag"))
|
||||
o.rmempty = false
|
||||
o.default = "0"
|
||||
o.cfgvalue = function(...)
|
||||
return Flag.cfgvalue(...) or "0"
|
||||
end
|
||||
|
||||
o = s:option(DummyValue, "config", translate("Config File"))
|
||||
function o.cfgvalue(...)
|
||||
return Value.cfgvalue(...) or translate("all")
|
||||
|
@ -178,6 +178,15 @@ o:value("https://raw.fastgit.org/")
|
||||
o:value("https://cdn.jsdelivr.net/")
|
||||
o.default = "0"
|
||||
|
||||
o = s:taboption("settings", Value, "urltest_address_mod", translate("Url-Test Address Modify"))
|
||||
o.description = translate("Modify The Url-Test Address In The Config")
|
||||
o:value("0", translate("Disable"))
|
||||
o:value("http://www.gstatic.com/generate_204")
|
||||
o:value("http://cp.cloudflare.com/generate_204")
|
||||
o:value("https://cp.cloudflare.com/generate_204")
|
||||
o:value("http://captive.apple.com/generate_204")
|
||||
o.default = "0"
|
||||
|
||||
o = s:taboption("settings", Value, "delay_start", translate("Delay Start (s)"))
|
||||
o.description = translate("Delay Start On Boot")
|
||||
o.default = "0"
|
||||
@ -254,8 +263,8 @@ o.default = 1
|
||||
o:depends("enable_meta_core", 0)
|
||||
end
|
||||
|
||||
o = s:taboption("dns", Flag, "append_wan_dns", font_red..bold_on..translate("Append Upstream DNS")..bold_off..font_off)
|
||||
o.description = font_red..bold_on..translate("Append The Upstream Assigned DNS And Gateway IP To The Nameserver")..bold_off..font_off
|
||||
o = s:taboption("dns", Flag, "append_wan_dns", translate("Append Upstream DNS"))
|
||||
o.description = translate("Append The Upstream Assigned DNS And Gateway IP To The Nameserver")
|
||||
o.default = 1
|
||||
|
||||
o = s:taboption("dns", Flag, "append_default_dns", translate("Append Default DNS"))
|
||||
|
@ -342,9 +342,14 @@
|
||||
|
||||
XHR.poll(1, '<%=luci.dispatcher.build_url("admin", "services", "openclash", "startlog")%>', null, function(x, status) {
|
||||
if ( x && x.status == 200 ) {
|
||||
if ( status.startlog.match("level=fatal") ) {
|
||||
if ( status.startlog.match("level=fatal") || status.startlog.indexOf("FTL [Config]") != "-1" ) {
|
||||
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "del_start_log")%>', null, function(x) {});
|
||||
alert('<%:OpenClash Start Failed%> :\n\n' + status.startlog.split('msg=')[1]);
|
||||
if ( status.startlog.match("level=fatal") ) {
|
||||
alert('<%:OpenClash Start Failed%> :\n\n' + status.startlog.split('msg=')[1]);
|
||||
}
|
||||
else {
|
||||
alert('<%:OpenClash Start Failed%> :\n\n' + status.startlog.split('FTL [Config] ')[1]);
|
||||
};
|
||||
}
|
||||
else if ( status.startlog != "\n" && status.startlog != "" ) {
|
||||
startlog.innerHTML = '<b style=color:green>'+status.startlog+'</b>';
|
||||
|
@ -1928,79 +1928,79 @@ msgid "Detected That The nameserver DNS Option Has No Server Set, Starting To Co
|
||||
msgstr "检测到DNS选项下的 Nameserver 未设置服务器,开始补全..."
|
||||
|
||||
msgid "Error: Failed To Download Proxy-providers, Please Check The Log Page For Detailed error information!"
|
||||
msgstr "错误: 代理集文件下载失败,请到日志页面查看详细错误信息!"
|
||||
msgstr "错误:代理集文件下载失败,请到日志页面查看详细错误信息!"
|
||||
|
||||
msgid "Error: Failed To Download Rule-providers, Please Check The Log Page For Detailed error information!"
|
||||
msgstr "错误: 规则集文件下载失败,请到日志页面查看详细错误信息!"
|
||||
msgstr "错误:规则集文件下载失败,请到日志页面查看详细错误信息!"
|
||||
|
||||
msgid "Error: Nameserver Option Must Be Setted, Stop Customing DNS Servers"
|
||||
msgstr "错误: 配置文件DNS选项下的 Nameserver 必须设置服务器,已停止设置自定义DNS服务器!"
|
||||
msgstr "错误:配置文件DNS选项下的 Nameserver 必须设置服务器,已停止设置自定义DNS服务器!"
|
||||
|
||||
msgid "Config File Does Not Exist, You Have Set Subscription Information, Ready To Download..."
|
||||
msgstr "配置文件不存在,您已设置订阅信息,准备开始下载..."
|
||||
|
||||
msgid "Error: Config Not Found"
|
||||
msgstr "错误: 缺少配置文件,请上传或更新配置文件!"
|
||||
msgstr "错误:缺少配置文件,请上传或更新配置文件!"
|
||||
|
||||
msgid "Error: Config File Format Validation Failed..."
|
||||
msgstr "错误:配置文件格式校验失败..."
|
||||
|
||||
msgid "Tip: Detected The Exclusive Function of The TUN Core, Use TUN Core to Start..."
|
||||
msgstr "提示: 检测到配置了 TUN 内核专属功能,调用 TUN 内核启动..."
|
||||
msgstr "提示:检测到配置了 TUN 内核专属功能,调用 TUN 内核启动..."
|
||||
|
||||
msgid "Tip: Detected The Exclusive Function of The Meta Core, Use Meta Core to Start..."
|
||||
msgstr "提示: 检测到配置了 Meta 内核专属功能,调用 Meta 内核启动..."
|
||||
msgstr "提示:检测到配置了 Meta 内核专属功能,调用 Meta 内核启动..."
|
||||
|
||||
msgid "Tip: No Special Configuration Detected, Use Dev Core to Start..."
|
||||
msgstr "提示: 未检测到特殊配置,调用 Dev 内核启动..."
|
||||
msgstr "提示:未检测到特殊配置,调用 Dev 内核启动..."
|
||||
|
||||
msgid "Tip: Detected that the Dev Core is not Installed, Use TUN Core to Start..."
|
||||
msgstr "提示: 检测到 Dev 内核未安装,调用 TUN 内核启动..."
|
||||
msgstr "提示:检测到 Dev 内核未安装,调用 TUN 内核启动..."
|
||||
|
||||
msgid "Tip: Detected that the Dev Core is not Installed, Use Meta Core to Start..."
|
||||
msgstr "提示: 检测到 Dev 内核未安装,调用 Meta 内核启动..."
|
||||
msgstr "提示:检测到 Dev 内核未安装,调用 Meta 内核启动..."
|
||||
|
||||
msgid "Tip: Detected that the GEOIP Database is not Installed, Ready to Download..."
|
||||
msgstr "提示: 检测到 GEOIP 数据库文件不存在,准备开始下载..."
|
||||
msgstr "提示:检测到 GEOIP 数据库文件不存在,准备开始下载..."
|
||||
|
||||
msgid "Tip: Detected that the GEOSITE Database is not Installed, Ready to Download..."
|
||||
msgstr "提示: 检测到 GEOSITE 数据库文件不存在,准备开始下载..."
|
||||
msgstr "提示:检测到 GEOSITE 数据库文件不存在,准备开始下载..."
|
||||
|
||||
msgid "Tip: Detected that the GEOIP Dat is not Installed, Ready to Download..."
|
||||
msgstr "提示: 检测到 GEOIP Dat 数据库文件不存在,准备开始下载..."
|
||||
msgstr "提示:检测到 GEOIP Dat 数据库文件不存在,准备开始下载..."
|
||||
|
||||
msgid "Tip: Detected that the Core is not Installed, Ready to Download..."
|
||||
msgstr "提示: 检测到内核文件不存在,准备开始下载..."
|
||||
msgstr "提示:检测到内核文件不存在,准备开始下载..."
|
||||
|
||||
msgid "Tip: Detected that the Chnroute Cidr or CN Domains List is not Installed, Ready to Download..."
|
||||
msgstr "提示: 检测到大陆白名单列表不存在,准备开始下载..."
|
||||
msgstr "提示:检测到大陆白名单列表不存在,准备开始下载..."
|
||||
|
||||
msgid "Tip: Detected that the Chnroute Cidr List Format is wrong, Ready to Reformat..."
|
||||
msgstr "提示: 检测到大陆白名单列表格式错误,准备重新格式化..."
|
||||
msgstr "提示:检测到大陆白名单列表格式错误,准备重新格式化..."
|
||||
|
||||
msgid "Error: Could Not Load The Capsh Library, Please Verify The Capsh Shell Library Work Well..."
|
||||
msgstr "错误:Capsh 异常,请尝试重新安装依赖【libcap】和相应的Capsh库,终止启动..."
|
||||
|
||||
msgid "Tip: You Could Download And Re-Install The libcap & libcap-bin Library From The Address Give"
|
||||
msgstr "提示: 你可以尝试从给出的地址中查找、下载并重新安装架构对应的 libcap 和 libcap-bin 依赖"
|
||||
msgstr "提示:你可以尝试从给出的地址中查找、下载并重新安装架构对应的 libcap 和 libcap-bin 依赖"
|
||||
|
||||
msgid "Error: Get DNS 'listen' Option Error, OpenClash Can Not Start With Raw Config File"
|
||||
msgstr "错误: 无法获取 DNS 部分的监听端口设置, OpenClash 使用原始配置文件启动失败"
|
||||
msgstr "错误:无法获取 DNS 部分的监听端口设置, OpenClash 使用原始配置文件启动失败"
|
||||
|
||||
msgid "Error: Get DNS 'enhanced-mode' Option Error, OpenClash Can Not Start With Raw Config File"
|
||||
msgstr "错误: 无法获取 DNS 部分的运行模式设置, OpenClash 使用原始配置文件启动失败"
|
||||
msgstr "错误:无法获取 DNS 部分的运行模式设置, OpenClash 使用原始配置文件启动失败"
|
||||
|
||||
msgid "Error: Get General 'redir-port' Option Error, OpenClash Can Not Start With Raw Config File"
|
||||
msgstr "错误: 无法获取 General 部分的转发端口设置, OpenClash 使用原始配置文件启动失败"
|
||||
msgstr "错误:无法获取 General 部分的转发端口设置, OpenClash 使用原始配置文件启动失败"
|
||||
|
||||
msgid "Error: OpenClash Can Not Start, Please Check The Error Info And Try Again!"
|
||||
msgstr "错误: OpenClash 启动失败,请到日志页面查看详细错误信息!"
|
||||
msgstr "错误:OpenClash 启动失败,请到日志页面查看详细错误信息!"
|
||||
|
||||
msgid "Error: OpenClash Can Not Start, Try Use Raw Config Restart Again..."
|
||||
msgstr "错误: OpenClash 启动失败,尝试使用原始配置文件启动..."
|
||||
msgstr "错误:OpenClash 启动失败,尝试使用原始配置文件启动..."
|
||||
|
||||
msgid "Error: OpenClash Can Not Start, Try Use Backup Rules Start Again..."
|
||||
msgstr "错误: OpenClash 启动失败,尝试还原第三方规则并重新启动 Clash 主程序..."
|
||||
msgstr "错误:OpenClash 启动失败,尝试还原第三方规则并重新启动 Clash 主程序..."
|
||||
|
||||
msgid "Found 53 Port Hijacked, Clean Up Firewall Rules..."
|
||||
msgstr "发现 53 端口被劫持,清理防火墙规则..."
|
||||
@ -2128,8 +2128,8 @@ msgstr "2、点击《管理第三方游戏规则》或者《管理第三方规
|
||||
msgid "3. On this page, set the corresponding configuration file and policy group of the rule you have downloaded, and save the settings"
|
||||
msgstr "3、在此页面设置您已下载的规则的对应配置文件、策略组并保存设置"
|
||||
|
||||
msgid "4. Install the TUN core"
|
||||
msgstr "4、安装 TUN 内核"
|
||||
msgid "4. Install the TUN or Meta core"
|
||||
msgstr "4、安装 TUN 或者 Meta 内核"
|
||||
|
||||
msgid "When setting this page, if the groups is empty, please go to the <server and group management> page to add"
|
||||
msgstr "本页设置时如策略组为空,请先到《服务器与策略组管理》页面进行添加"
|
||||
@ -2137,6 +2137,9 @@ msgstr "本页设置时如策略组为空,请先到《服务器与策略组管
|
||||
msgid "Introduction to rule set usage: https://lancellc.gitbook.io/clash/clash-config-file/rule-provider"
|
||||
msgstr "规则集使用介绍:https://lancellc.gitbook.io/clash/clash-config-file/rule-provider"
|
||||
|
||||
msgid "Introduction to proxy usage: https://lancellc.gitbook.io/clash/clash-config-file/proxies"
|
||||
msgstr "代理使用介绍:https://lancellc.gitbook.io/clash/clash-config-file/rule-provider"
|
||||
|
||||
msgid "Subconverter external configuration (subscription conversion template) Description: https://github.com/tindy2013/subconverter#external-configuration-file"
|
||||
msgstr "subconverter 外部配置(订阅转换模板)说明:https://github.com/tindy2013/subconverter#external-configuration-file"
|
||||
|
||||
@ -2465,7 +2468,7 @@ msgid "Are you sure want to switch the running mode?"
|
||||
msgstr "确认要切换运行模式吗?"
|
||||
|
||||
msgid "Tip: Because of the file"
|
||||
msgstr "提示: 由于文件"
|
||||
msgstr "提示:由于文件"
|
||||
|
||||
msgid "modificated, Pause quick start..."
|
||||
msgstr "被修改,暂停快速启动..."
|
||||
@ -2725,7 +2728,7 @@ msgstr ",但不匹配先前解锁区域:"
|
||||
msgid "the type of group is not select, auto select could not work!"
|
||||
msgstr "当前策略组类型非 Select,无法进行自动选择!"
|
||||
|
||||
msgid ",but not match the regex! the type of group is not select, auto select could not work!"
|
||||
msgid ", but not match the regex! the type of group is not select, auto select could not work!"
|
||||
msgstr "完整解锁但区域与设置不匹配!当前策略组类型非 Select,无法进行自动选择!"
|
||||
|
||||
msgid "but not match the old region! the type of group is not select, auto select could not work!"
|
||||
@ -3216,3 +3219,27 @@ msgstr "提示:检测到 Dnsmasq 正常工作,还原防火墙 DNS 劫持规
|
||||
|
||||
msgid "Tip: Bypass the China IP May Cause the Dnsmasq Load For a Long Time After Restart in FAKE-IP Mode, Hijack the DNS to Core Untill the Dnsmasq Works Well..."
|
||||
msgstr "提示:在 FAKE-IP 模式下绕过中国 IP 可能会导致 Dnsmasq 加载时间过长,暂时劫持 DNS 至内核直到 Dnsmasq 正常工作..."
|
||||
|
||||
msgid "Seconds..."
|
||||
msgstr "秒后开始启动..."
|
||||
|
||||
msgid "1. Before modifying the configuration file, please click the button below to read the configuration file"
|
||||
msgstr "1. 修改配置文件前,请先点击下方按钮读取配置文件"
|
||||
|
||||
msgid "2. Proxy-providers address can be directly filled in the subscription link"
|
||||
msgstr "2. 代理集地址可以直接填写订阅链接"
|
||||
|
||||
msgid "Custom Tag"
|
||||
msgstr "自定义标记"
|
||||
|
||||
msgid "Mark as Custom Node to Prevent Retention config from being Deleted When Enabled"
|
||||
msgstr "标记为自定义节点,防止保留配置启用时被删除"
|
||||
|
||||
msgid "Error: Edit Speedtest URL Failed,"
|
||||
msgstr "错误:修改测速地址失败,"
|
||||
|
||||
msgid "Url-Test Address Modify"
|
||||
msgstr "测速(连通性)地址修改"
|
||||
|
||||
msgid "Modify The Url-Test Address In The Config"
|
||||
msgstr "修改配置文件中的测速(连通性)地址"
|
@ -50,7 +50,8 @@ config openclash 'config'
|
||||
option stream_auto_select '0'
|
||||
option dns_remote '1'
|
||||
option bypass_gateway_compatible '0'
|
||||
option github_address_mod '0'
|
||||
option github_address_mod 'https://testingcf.jsdelivr.net/'
|
||||
option urltest_address_mod '0'
|
||||
option delay_start '0'
|
||||
option router_self_proxy '1'
|
||||
option release_branch 'master'
|
||||
|
@ -78,9 +78,9 @@ del_cron()
|
||||
}
|
||||
|
||||
save_dnsmasq_server() {
|
||||
if [ -z "$1" ] || [ "$1" == "127.0.0.1#${dns_port}" ]; then
|
||||
if [ -z "$1" ] || [ "$1" == "127.0.0.1#${dns_port}" ]; then
|
||||
return
|
||||
fi
|
||||
fi
|
||||
|
||||
uci -q add_list openclash.config.dnsmasq_server="$1"
|
||||
}
|
||||
@ -88,7 +88,7 @@ save_dnsmasq_server() {
|
||||
set_dnsmasq_server() {
|
||||
if [ -z "$1" ] || [ "$1" == "127.0.0.1#${dns_port}" ]; then
|
||||
return
|
||||
fi
|
||||
fi
|
||||
|
||||
uci -q add_list dhcp.@dnsmasq[0].server="$1"
|
||||
}
|
||||
@ -577,7 +577,7 @@ do_run_file()
|
||||
fi
|
||||
}
|
||||
|
||||
[ ! -f "$geosite_path" ] && {
|
||||
[ ! -f "$geosite_path" ] && [ "$enable_meta_core" = "1" ] && {
|
||||
LOG_OUT "Tip: Detected that the GEOSITE Database is not Installed, Ready to Download..."
|
||||
/usr/share/openclash/openclash_geosite.sh
|
||||
if [ ! -f "$geosite_path" ]; then
|
||||
@ -701,7 +701,7 @@ do_run_file()
|
||||
|
||||
if [ -z "$_koolshare" ]; then
|
||||
if ! capsh --is-uid=0 >/dev/null || ! capsh --has-ambient >/dev/null; then
|
||||
LOG_OUT "Error: Could Not Load The Capsh Library, Please Verify The Capsh Shell Library Work Well"
|
||||
LOG_OUT "Error: Could Not Load The Capsh Library, Please Verify The Capsh Shell Library Work Well..."
|
||||
LOG_OUT "Tip: You Could Download And Re-Install The libcap & libcap-bin Library From The Address Give"
|
||||
echo "" >> $LOG_FILE
|
||||
echo "---------- https://mirrors.cloud.tencent.com/lede/snapshots/packages/ ----------" >> $LOG_FILE
|
||||
@ -734,7 +734,7 @@ start_run_core()
|
||||
fi
|
||||
config_reload=$(uci -q get openclash.config.config_reload)
|
||||
if [ -n "$(pidof clash)" ] && [ "$core_type" != "TUN" ] && [ "$core_type" != "Meta" ] && [ "$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
|
||||
curl -s --connect-timeout 5 -m 5 -H 'Content-Type: application/json' -H "Authorization: Bearer ${da_password}" -XPUT http://"$lan_ip":"$cn_port"/configs?force=true -d "{\"path\": \"$CONFIG_FILE\"}" 2>/dev/null
|
||||
else
|
||||
kill_clash
|
||||
if [ -z "$_koolshare" ]; then
|
||||
@ -1259,8 +1259,7 @@ if [ -n "$FW4" ]; then
|
||||
rm -rf /tmp/openclash_china_ip_route_pass.list 2>/dev/null
|
||||
|
||||
if [ "$en_mode" = "fake-ip" ] && [ "$china_ip_route" = "1" ]; then
|
||||
cp "$cndomain_path" /tmp/dnsmasq.d/dnsmasq_accelerated-domains.china.conf 2>/dev/null
|
||||
cat "$cndomain_path" |awk -v dns="${custom_china_domain_dns_server}" -F '/' '!/^$/&&!/^#/{print $1"/"$2"/"dns}' >/tmp/dnsmasq.d/dnsmasq_accelerated-domains.china.conf 2>/dev/null
|
||||
cat "/etc/openclash/accelerated-domains.china.conf" |awk -v dns="${custom_china_domain_dns_server}" -F '/' '!/^$/&&!/^#/{print $1"/"$2"/"dns}' >/tmp/dnsmasq.d/dnsmasq_accelerated-domains.china.conf 2>/dev/null
|
||||
for i in `awk '!/^$/&&!/^#/&&!/(^([1-9]|1[0-9]|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.)(([0-9]{1,2}|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5][0-9]|25[0-4])((\/[0-9][0-9])?)$/{printf("%s\n",$0)}' /etc/openclash/custom/openclash_custom_chnroute_pass.list`
|
||||
do
|
||||
sed -i "/server=\/${i}\//d" /tmp/dnsmasq.d/dnsmasq_accelerated-domains.china.conf 2>/dev/null
|
||||
@ -1283,8 +1282,8 @@ if [ -n "$FW4" ]; then
|
||||
nft 'add chain inet fw4 nat_output { type nat hook output priority -1; }' 2>/dev/null
|
||||
nft add rule inet fw4 nat_output position 0 tcp dport 53 meta skuid != 65534 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
nft add rule inet fw4 nat_output position 0 udp dport 53 meta skuid != 65534 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
nft add rule inet fw4 nat_output position 0 tcp dport 5353 meta skuid != 65534 counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
nft add rule inet fw4 nat_output position 0 udp dport 5353 meta skuid != 65534 counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
nft add rule inet fw4 nat_output position 0 tcp dport 12353 meta skuid != 65534 counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
nft add rule inet fw4 nat_output position 0 udp dport 12353 meta skuid != 65534 counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
fi
|
||||
|
||||
#lan_google_dns_ac
|
||||
@ -1535,9 +1534,6 @@ if [ -n "$FW4" ]; then
|
||||
ip route replace default dev utun table "$PROXY_ROUTE_TABLE"
|
||||
ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE"
|
||||
|
||||
#MTU UP TO 65535
|
||||
ifconfig utun mtu 65535 >/dev/null 2>&1
|
||||
|
||||
#设置防火墙
|
||||
nft 'add chain inet fw4 openclash_mangle_output' 2>/dev/null
|
||||
nft 'flush chain inet fw4 openclash_mangle_output' 2>/dev/null
|
||||
@ -1573,6 +1569,7 @@ if [ -n "$FW4" ]; then
|
||||
nft 'flush chain inet fw4 openclash_dns_hijack' 2>/dev/null
|
||||
|
||||
#其他流量
|
||||
nft 'add rule inet fw4 openclash_mangle meta l4proto {tcp,udp} iifname utun counter return' 2>/dev/null
|
||||
nft 'add rule inet fw4 openclash_mangle ip daddr @localnetwork counter return' 2>/dev/null
|
||||
nft 'add rule inet fw4 openclash_mangle ip saddr @localnetwork meta l4proto {tcp,udp} th sport @lan_ac_black_ports counter return' 2>/dev/null
|
||||
nft 'add rule inet fw4 openclash_mangle ip daddr @wan_ac_black_ips counter return' 2>/dev/null
|
||||
@ -1801,8 +1798,7 @@ else
|
||||
rm -rf /tmp/openclash_china_ip_route_pass.list 2>/dev/null
|
||||
|
||||
if [ "$en_mode" = "fake-ip" ] && [ "$china_ip_route" = "1" ]; then
|
||||
cp "$cndomain_path" /tmp/dnsmasq.d/dnsmasq_accelerated-domains.china.conf 2>/dev/null
|
||||
cat "$cndomain_path" |awk -v dns="${custom_china_domain_dns_server}" -F '/' '!/^$/&&!/^#/{print $1"/"$2"/"dns}' >/tmp/dnsmasq.d/dnsmasq_accelerated-domains.china.conf 2>/dev/null
|
||||
cat "/etc/openclash/accelerated-domains.china.conf" |awk -v dns="${custom_china_domain_dns_server}" -F '/' '!/^$/&&!/^#/{print $1"/"$2"/"dns}' >/tmp/dnsmasq.d/dnsmasq_accelerated-domains.china.conf 2>/dev/null
|
||||
for i in `awk '!/^$/&&!/^#/&&!/(^([1-9]|1[0-9]|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.)(([0-9]{1,2}|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5][0-9]|25[0-4])((\/[0-9][0-9])?)$/{printf("%s\n",$0)}' /etc/openclash/custom/openclash_custom_chnroute_pass.list`
|
||||
do
|
||||
sed -i "/server=\/${i}\//d" /tmp/dnsmasq.d/dnsmasq_accelerated-domains.china.conf 2>/dev/null
|
||||
@ -1824,8 +1820,8 @@ else
|
||||
iptables -t nat -I PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
|
||||
iptables -t nat -I OUTPUT -p udp --dport 53 -m owner ! --uid-owner 65534 -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
|
||||
iptables -t nat -I OUTPUT -p tcp --dport 53 -m owner ! --uid-owner 65534 -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
|
||||
iptables -t nat -I OUTPUT -p udp --dport 5353 -m owner ! --uid-owner 65534 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
|
||||
iptables -t nat -I OUTPUT -p tcp --dport 5353 -m owner ! --uid-owner 65534 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
|
||||
iptables -t nat -I OUTPUT -p udp --dport 12353 -m owner ! --uid-owner 65534 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
|
||||
iptables -t nat -I OUTPUT -p tcp --dport 12353 -m owner ! --uid-owner 65534 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
|
||||
fi
|
||||
|
||||
#lan_google_dns_ac
|
||||
@ -2088,9 +2084,6 @@ else
|
||||
ip route replace default dev utun table "$PROXY_ROUTE_TABLE"
|
||||
ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE"
|
||||
|
||||
#MTU UP TO 65535
|
||||
ifconfig utun mtu 65535 >/dev/null 2>&1
|
||||
|
||||
#设置防火墙
|
||||
if [ "$en_mode" = "fake-ip" ]; then
|
||||
iptables -t mangle -N openclash_output
|
||||
@ -2134,6 +2127,7 @@ else
|
||||
iptables -t mangle -N openclash_dns_hijack
|
||||
iptables -t mangle -F openclash_dns_hijack
|
||||
#其他流量
|
||||
iptables -t mangle -A openclash -i utun -j RETURN >/dev/null 2>&1
|
||||
iptables -t mangle -A openclash -m set --match-set localnetwork dst -j RETURN >/dev/null 2>&1
|
||||
iptables -t mangle -A openclash -m set --match-set localnetwork src -m set --match-set lan_ac_black_ports src -j RETURN >/dev/null 2>&1
|
||||
iptables -t mangle -A openclash -m set --match-set wan_ac_black_ips dst -j RETURN >/dev/null 2>&1
|
||||
@ -2630,7 +2624,6 @@ stop()
|
||||
del_lock
|
||||
LOG_OUT "OpenClash Already Stop!"
|
||||
sleep 3
|
||||
rm -rf $LOG_FILE
|
||||
fi
|
||||
|
||||
del_cron
|
||||
@ -2660,6 +2653,8 @@ reload()
|
||||
revert_firewall 2>/dev/null
|
||||
do_run_mode 2>/dev/null
|
||||
get_config 2>/dev/null
|
||||
start_run_core
|
||||
check_core_status
|
||||
set_firewall 2>/dev/null
|
||||
/etc/init.d/dnsmasq restart >/dev/null 2>&1
|
||||
SLOG_CLEAN
|
||||
|
@ -41,6 +41,37 @@ cat > "/lib/upgrade/keep.d/luci-app-openclash" <<-EOF
|
||||
/etc/openclash/
|
||||
EOF
|
||||
|
||||
if [ -f "/tmp/openclash.bak" ]; then
|
||||
mv -f "/tmp/openclash.bak" "/etc/config/openclash" >/dev/null 2>&1
|
||||
cp -rf "/tmp/openclash/." "/etc/openclash/" >/dev/null 2>&1
|
||||
cp -rf "/tmp/openclash_config/." "/etc/openclash/config/" >/dev/null 2>&1
|
||||
cp -rf "/tmp/openclash_core/." "/etc/openclash/core/" >/dev/null 2>&1
|
||||
cp -rf "/tmp/openclash_history/." "/etc/openclash/history/" >/dev/null 2>&1
|
||||
cp -rf "/tmp/openclash_proxy_provider/." "/etc/openclash/proxy_provider/" >/dev/null 2>&1
|
||||
cp -rf "/tmp/openclash_rule_provider/." "/etc/openclash/rule_provider/" >/dev/null 2>&1
|
||||
cp -rf "/tmp/openclash_game_rules/." "/etc/openclash/game_rules/" >/dev/null 2>&1
|
||||
mv -f "/tmp/openclash_custom_rules.list.bak" "/etc/openclash/custom/openclash_custom_rules.list" >/dev/null 2>&1
|
||||
mv -f "/tmp/openclash_custom_rules_2.list.bak" "/etc/openclash/custom/openclash_custom_rules_2.list" >/dev/null 2>&1
|
||||
mv -f "/tmp/openclash_custom_hosts.list.bak" "/etc/openclash/custom/openclash_custom_hosts.list" >/dev/null 2>&1
|
||||
mv -f "/tmp/openclash_custom_fake_filter.list.bak" "/etc/openclash/custom/openclash_custom_fake_filter.list" >/dev/null 2>&1
|
||||
mv -f "/tmp/openclash_custom_domain_dns.list.bak" "/etc/openclash/custom/openclash_custom_domain_dns.list" >/dev/null 2>&1
|
||||
if [ -d "/tmp/openclash_dashboard/" ]; then
|
||||
rm -rf "/usr/share/openclash/ui/dashboard/" >/dev/null 2>&1
|
||||
cp -rf "/tmp/openclash_dashboard/." "/usr/share/openclash/ui/dashboard/" >/dev/null 2>&1
|
||||
rm -rf "/tmp/openclash_dashboard/" >/dev/null 2>&1
|
||||
fi
|
||||
if [ -d "/tmp/openclash_yacd/" ]; then
|
||||
rm -rf "/usr/share/openclash/ui/yacd/" >/dev/null 2>&1
|
||||
cp -rf "/tmp/openclash_yacd/." "/usr/share/openclash/ui/yacd/" >/dev/null 2>&1
|
||||
rm -rf "/tmp/openclash_yacd/" >/dev/null 2>&1
|
||||
fi
|
||||
rm -rf "/etc/openclash/openclash" >/dev/null 2>&1
|
||||
rm -rf "/etc/openclash/fake_filter.list" >/dev/null 2>&1
|
||||
rm -rf "/etc/openclash/openclash_servers_fake_filter.conf" >/dev/null 2>&1
|
||||
rm -rf "/tmp/openclash" >/dev/null 2>&1
|
||||
rm -rf "/tmp/openclash.bak" >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
source "/etc/openwrt_release"
|
||||
case "${DISTRIB_ARCH}" in
|
||||
aarch64_*)
|
||||
@ -80,37 +111,6 @@ if [ -n "$(uci -q get dhcp.@dnsmasq[0].resolvfile)" ]; then
|
||||
uci -q set openclash.config.default_resolvfile=$(uci -q get dhcp.@dnsmasq[0].resolvfile)
|
||||
fi
|
||||
|
||||
if [ -f "/tmp/openclash.bak" ]; then
|
||||
mv -f "/tmp/openclash.bak" "/etc/config/openclash" >/dev/null 2>&1
|
||||
cp -rf "/tmp/openclash/." "/etc/openclash/" >/dev/null 2>&1
|
||||
cp -rf "/tmp/openclash_config/." "/etc/openclash/config/" >/dev/null 2>&1
|
||||
cp -rf "/tmp/openclash_core/." "/etc/openclash/core/" >/dev/null 2>&1
|
||||
cp -rf "/tmp/openclash_history/." "/etc/openclash/history/" >/dev/null 2>&1
|
||||
cp -rf "/tmp/openclash_proxy_provider/." "/etc/openclash/proxy_provider/" >/dev/null 2>&1
|
||||
cp -rf "/tmp/openclash_rule_provider/." "/etc/openclash/rule_provider/" >/dev/null 2>&1
|
||||
cp -rf "/tmp/openclash_game_rules/." "/etc/openclash/game_rules/" >/dev/null 2>&1
|
||||
mv -f "/tmp/openclash_custom_rules.list.bak" "/etc/openclash/custom/openclash_custom_rules.list" >/dev/null 2>&1
|
||||
mv -f "/tmp/openclash_custom_rules_2.list.bak" "/etc/openclash/custom/openclash_custom_rules_2.list" >/dev/null 2>&1
|
||||
mv -f "/tmp/openclash_custom_hosts.list.bak" "/etc/openclash/custom/openclash_custom_hosts.list" >/dev/null 2>&1
|
||||
mv -f "/tmp/openclash_custom_fake_filter.list.bak" "/etc/openclash/custom/openclash_custom_fake_filter.list" >/dev/null 2>&1
|
||||
mv -f "/tmp/openclash_custom_domain_dns.list.bak" "/etc/openclash/custom/openclash_custom_domain_dns.list" >/dev/null 2>&1
|
||||
if [ -d "/tmp/openclash_dashboard/" ]; then
|
||||
rm -rf "/usr/share/openclash/ui/dashboard/" >/dev/null 2>&1
|
||||
cp -rf "/tmp/openclash_dashboard/." "/usr/share/openclash/ui/dashboard/" >/dev/null 2>&1
|
||||
rm -rf "/tmp/openclash_dashboard/" >/dev/null 2>&1
|
||||
fi
|
||||
if [ -d "/tmp/openclash_yacd/" ]; then
|
||||
rm -rf "/usr/share/openclash/ui/yacd/" >/dev/null 2>&1
|
||||
cp -rf "/tmp/openclash_yacd/." "/usr/share/openclash/ui/yacd/" >/dev/null 2>&1
|
||||
rm -rf "/tmp/openclash_yacd/" >/dev/null 2>&1
|
||||
fi
|
||||
rm -rf "/etc/openclash/openclash" >/dev/null 2>&1
|
||||
rm -rf "/etc/openclash/fake_filter.list" >/dev/null 2>&1
|
||||
rm -rf "/etc/openclash/openclash_servers_fake_filter.conf" >/dev/null 2>&1
|
||||
rm -rf "/tmp/openclash" >/dev/null 2>&1
|
||||
rm -rf "/tmp/openclash.bak" >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
if [ -f "/usr/lib/lua/luci/model/network.lua" ]; then
|
||||
sed -i '/OpenClash Append/,/OpenClash Append End/d' "/usr/lib/lua/luci/model/network.lua" >/dev/null 2>&1
|
||||
cat >> "/usr/lib/lua/luci/model/network.lua" << EOF
|
||||
|
@ -10,14 +10,15 @@ del_lock() {
|
||||
rm -rf "/tmp/lock/openclash_clash_version.lock"
|
||||
}
|
||||
|
||||
CKTIME=$(date "+%Y-%m-%d-%H")
|
||||
TIME=$(date "+%Y-%m-%d-%H")
|
||||
CHTIME=$(date "+%Y-%m-%d-%H" -r "/tmp/clash_last_version")
|
||||
LAST_OPVER="/tmp/clash_last_version"
|
||||
RELEASE_BRANCH=$(uci -q get openclash.config.release_branch || echo "master")
|
||||
github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0)
|
||||
LOG_FILE="/tmp/openclash.log"
|
||||
set_lock
|
||||
|
||||
if [ "$CKTIME" != "$(grep "CheckTime" $LAST_OPVER 2>/dev/null |awk -F ':' '{print $2}')" ]; then
|
||||
if [ "$TIME" != "$CHTIME" ]; then
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
|
||||
curl -SsL -m 10 "$github_address_mod"gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core_version -o $LAST_OPVER 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$LAST_OPVER" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
@ -37,9 +38,7 @@ if [ "$CKTIME" != "$(grep "CheckTime" $LAST_OPVER 2>/dev/null |awk -F ':' '{prin
|
||||
curl_status=0
|
||||
fi
|
||||
|
||||
if [ "$curl_status" -eq 0 ] && [ -z "$(cat $LAST_OPVER |grep '<html>')" ]; then
|
||||
echo "CheckTime:$CKTIME" >>$LAST_OPVER
|
||||
else
|
||||
if [ "$curl_status" -ne 0 ] ; then
|
||||
rm -rf $LAST_OPVER
|
||||
fi
|
||||
fi
|
||||
|
@ -13,7 +13,7 @@ LOG_OUT()
|
||||
|
||||
LOG_ALERT()
|
||||
{
|
||||
echo -e "$(tail -n 20 $LOG_FILE |grep 'level=fatal' |awk 'END {print}')" > $START_LOG
|
||||
echo -e "$(tail -n 20 $LOG_FILE |grep -E 'level=fatal|FTL\ \[Config\]' |awk 'END {print}')" > $START_LOG
|
||||
sleep 3
|
||||
}
|
||||
|
||||
|
@ -37,12 +37,8 @@ only_download=0
|
||||
set_lock
|
||||
|
||||
urlencode() {
|
||||
local data
|
||||
if [ "$#" -eq 1 ]; then
|
||||
data=$(curl -s -o /dev/null -w %{url_effective} --get --data-urlencode "key=$1" "")
|
||||
if [ ! -z "$data" ]; then
|
||||
echo -n "$(echo ${data##/?key=} |sed 's/\//%2f/g' |sed 's/:/%3a/g' |sed 's/?/%3f/g' |sed 's/(/%28/g' |sed 's/)/%29/g' |sed 's/\^/%5e/g' |sed 's/=/%3d/g' |sed 's/|/%7c/g' |sed 's/+/%20/g')"
|
||||
fi
|
||||
echo "$(/usr/share/openclash/openclash_urlencode.lua "$1")"
|
||||
fi
|
||||
}
|
||||
|
||||
@ -62,15 +58,15 @@ config_download()
|
||||
{
|
||||
if [ -n "$subscribe_url_param" ]; then
|
||||
if [ -n "$c_address" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 -H 'User-Agent: Clash' "$c_address""$subscribe_url_param" -o "$CFG_FILE" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$CFG_FILE" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 -H 'User-Agent: Clash' "$c_address""$subscribe_url_param" -o "$CFG_FILE" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$CFG_FILE" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 -H 'User-Agent: Clash' https://api.dler.io/sub"$subscribe_url_param" -o "$CFG_FILE" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$CFG_FILE" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 -H 'User-Agent: Clash' https://api.dler.io/sub"$subscribe_url_param" -o "$CFG_FILE" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$CFG_FILE" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
if [ "$?" -ne 0 ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 -H 'User-Agent: Clash' https://subconverter.herokuapp.com/sub"$subscribe_url_param" -o "$CFG_FILE" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$CFG_FILE" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 -H 'User-Agent: Clash' https://subconverter.herokuapp.com/sub"$subscribe_url_param" -o "$CFG_FILE" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$CFG_FILE" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 -H 'User-Agent: Clash' "$subscribe_url" -o "$CFG_FILE" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$CFG_FILE" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 -H 'User-Agent: Clash' "$subscribe_url" -o "$CFG_FILE" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$CFG_FILE" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
}
|
||||
|
||||
@ -350,8 +346,8 @@ EOF
|
||||
nft 'add chain inet fw4 nat_output { type nat hook output priority -1; }' 2>/dev/null
|
||||
nft add rule inet fw4 nat_output position 0 tcp dport 53 meta skuid != 65534 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
nft add rule inet fw4 nat_output position 0 udp dport 53 meta skuid != 65534 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
nft add rule inet fw4 nat_output position 0 tcp dport 5353 meta skuid != 65534 counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
nft add rule inet fw4 nat_output position 0 udp dport 5353 meta skuid != 65534 counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
nft add rule inet fw4 nat_output position 0 tcp dport 12353 meta skuid != 65534 counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
nft add rule inet fw4 nat_output position 0 udp dport 12353 meta skuid != 65534 counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
if [ "$ipv6_enable" -eq 1 ]; then
|
||||
nft add rule inet fw4 dstnat position "$position" meta nfproto {ipv6} tcp dport 53 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
nft add rule inet fw4 dstnat position "$position" meta nfproto {ipv6} udp dport 53 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
@ -381,8 +377,8 @@ EOF
|
||||
iptables -t nat -I PREROUTING "$position" -p tcp --dport 53 -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
|
||||
iptables -t nat -I OUTPUT -p udp --dport 53 -m owner ! --uid-owner 65534 -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
|
||||
iptables -t nat -I OUTPUT -p tcp --dport 53 -m owner ! --uid-owner 65534 -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
|
||||
iptables -t nat -I OUTPUT -p udp --dport 5353 -m owner ! --uid-owner 65534 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
|
||||
iptables -t nat -I OUTPUT -p tcp --dport 5353 -m owner ! --uid-owner 65534 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
|
||||
iptables -t nat -I OUTPUT -p udp --dport 12353 -m owner ! --uid-owner 65534 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
|
||||
iptables -t nat -I OUTPUT -p tcp --dport 12353 -m owner ! --uid-owner 65534 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
|
||||
if [ "$ipv6_enable" -eq 1 ]; then
|
||||
position=$(ip6tables -nvL PREROUTING -t nat |sed 1,2d |grep "OpenClash" |sed -n "/DNS/=" 2>/dev/null |sort -rn |head -1 || ehco 0)
|
||||
[ "$position" -ne 0 ] && let position++
|
||||
@ -398,6 +394,8 @@ EOF
|
||||
config_download
|
||||
|
||||
if [ "${PIPESTATUS[0]}" -eq 0 ] && [ -s "$CFG_FILE" ]; then
|
||||
#prevent ruby unexpected error
|
||||
sed -i -E 's/protocol-param: ([^,'"'"'"''}( *#)\n\r]+)/protocol-param: "\1"/g' "$CFG_FILE" 2>/dev/null
|
||||
ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e "
|
||||
begin
|
||||
YAML.load_file('$CFG_FILE');
|
||||
@ -576,6 +574,8 @@ sub_info_get()
|
||||
config_download
|
||||
|
||||
if [ "${PIPESTATUS[0]}" -eq 0 ] && [ -s "$CFG_FILE" ]; then
|
||||
#prevent ruby unexpected error
|
||||
sed -i -E 's/protocol-param: ([^,'"'"'"''}( *#)\n\r]+)/protocol-param: "\1"/g' "$CFG_FILE" 2>/dev/null
|
||||
ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e "
|
||||
begin
|
||||
YAML.load_file('$CFG_FILE');
|
||||
|
@ -41,13 +41,13 @@
|
||||
LOG_OUT "Start Downloading The Chnroute Cidr List..."
|
||||
if [ -z "$CHNR_CUSTOM_URL" ]; then
|
||||
if pidof clash >/dev/null; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ispip.clang.cn/all_cn.txt -o /tmp/china_ip_route.txt 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_ip_route.txt" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ispip.clang.cn/all_cn.txt -o /tmp/china_ip_route.txt 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_ip_route.txt" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
if [ "${PIPESTATUS[0]}" != "0" ] || ! pidof clash >/dev/null; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ispip.clang.cn/all_cn_cidr.txt -o /tmp/china_ip_route.txt 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_ip_route.txt" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ispip.clang.cn/all_cn_cidr.txt -o /tmp/china_ip_route.txt 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_ip_route.txt" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$CHNR_CUSTOM_URL" -o /tmp/china_ip_route.txt 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_ip_route.txt" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$CHNR_CUSTOM_URL" -o /tmp/china_ip_route.txt 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_ip_route.txt" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
|
||||
if [ "${PIPESTATUS[0]}" -eq 0 ] && [ -s "/tmp/china_ip_route.txt" ]; then
|
||||
@ -83,9 +83,9 @@
|
||||
#ipv6
|
||||
LOG_OUT "Start Downloading The Chnroute6 Cidr List..."
|
||||
if [ -z "$CHNR6_CUSTOM_URL" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ispip.clang.cn/all_cn_ipv6.txt -o /tmp/china_ip6_route.txt 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_ip6_route.txt" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ispip.clang.cn/all_cn_ipv6.txt -o /tmp/china_ip6_route.txt 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_ip6_route.txt" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$CHNR6_CUSTOM_URL" -o /tmp/china_ip6_route.txt 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_ip6_route.txt" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$CHNR6_CUSTOM_URL" -o /tmp/china_ip6_route.txt 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_ip6_route.txt" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
if [ "${PIPESTATUS[0]}" -eq "0" ] && [ -s "/tmp/china_ip6_route.txt" ]; then
|
||||
LOG_OUT "Chnroute6 Cidr List Download Success, Check Updated..."
|
||||
@ -120,18 +120,18 @@
|
||||
#CN DOMAIN
|
||||
LOG_OUT "Start Downloading The CN Domains List..."
|
||||
if [ -n "$CNDOMAIN_CUSTOM_URL" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$CNDOMAIN_CUSTOM_URL" -o "/tmp/china_domains.list" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_domains.list" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$CNDOMAIN_CUSTOM_URL" -o "/tmp/china_domains.list" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_domains.list" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/felixonmars/dnsmasq-china-list@master/accelerated-domains.china.conf -o "/tmp/china_domains.list" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_domains.list" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/felixonmars/dnsmasq-china-list@master/accelerated-domains.china.conf -o "/tmp/china_domains.list" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_domains.list" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf -o "/tmp/china_domains.list" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_domains.list" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf -o "/tmp/china_domains.list" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_domains.list" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf -o "/tmp/china_domains.list" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_domains.list" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf -o "/tmp/china_domains.list" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_domains.list" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf -o "/tmp/china_domains.list" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_domains.list" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf -o "/tmp/china_domains.list" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_domains.list" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
@ -61,17 +61,17 @@ if [ "$CORE_CV" != "$CORE_LV" ] || [ -z "$CORE_CV" ]; then
|
||||
LOG_OUT "【TUN】Core Downloading, Please Try to Download and Upload Manually If Fails"
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 "$github_address_mod"gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_tun.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_tun.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 https://raw.fastgit.org/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_tun.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_tun.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_tun.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_tun.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_tun.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_tun.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
if [ "${PIPESTATUS[0]}" -ne 0 ]; then
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/o/op/openclash/"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_tun.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/o/op/openclash/"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_tun.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl_status=${PIPESTATUS[0]}
|
||||
else
|
||||
curl_status=0
|
||||
@ -84,17 +84,17 @@ if [ "$CORE_CV" != "$CORE_LV" ] || [ -z "$CORE_CV" ]; then
|
||||
LOG_OUT "【Meta】Core Downloading, Please Try to Download and Upload Manually If Fails"
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 "$github_address_mod"gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core-lateset/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_meta.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core-lateset/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_meta.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 https://raw.fastgit.org/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_meta.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_meta.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_meta.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_meta.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_meta.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_meta.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
if [ "${PIPESTATUS[0]}" -ne 0 ]; then
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/o/op/openclash/"$RELEASE_BRANCH"/core-lateset/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_meta.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/o/op/openclash/"$RELEASE_BRANCH"/core-lateset/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_meta.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl_status=${PIPESTATUS[0]}
|
||||
else
|
||||
curl_status=0
|
||||
@ -107,17 +107,17 @@ if [ "$CORE_CV" != "$CORE_LV" ] || [ -z "$CORE_CV" ]; then
|
||||
LOG_OUT "【Dev】Core Downloading, Please Try to Download and Upload Manually If Fails"
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 "$github_address_mod"gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 https://raw.fastgit.org/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
if [ "${PIPESTATUS[0]}" -ne 0 ]; then
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/o/op/openclash/"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/o/op/openclash/"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl_status=${PIPESTATUS[0]}
|
||||
else
|
||||
curl_status=0
|
||||
|
@ -347,6 +347,9 @@ EOF
|
||||
for nft in "input" "forward" "dstnat" "srcnat" "nat_output" "mangle_prerouting" "mangle_output"; do
|
||||
nft list chain inet fw4 "$nft" >> "$DEBUG_LOG" 2>/dev/null
|
||||
done >/dev/null 2>&1
|
||||
for nft in "openclash" "openclash_mangle" "openclash_mangle_output" "openclash_output" "openclash_post" "openclash_wan_input" "openclash_dns_hijack" "openclash_mangle_v6" "openclash_mangle_output_v6" "openclash_post_v6" "openclash_wan6_input"; do
|
||||
nft list chain inet fw4 "$nft" >> "$DEBUG_LOG" 2>/dev/null
|
||||
done >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
cat >> "$DEBUG_LOG" <<-EOF
|
||||
@ -452,13 +455,15 @@ wan_ip6=$(/usr/share/openclash/openclash_get_network.lua "wanip6")
|
||||
|
||||
if [ -n "$wan_ip" ]; then
|
||||
for i in $wan_ip; do
|
||||
sed -i "s/${wan_ip}/*WAN IP*/g" "$DEBUG_LOG" 2>/dev/null
|
||||
wanip=$(echo "$i" |awk -F '.' '{print $1"."$2"."$3}')
|
||||
sed -i "s/${wanip}/*WAN IP*/g" "$DEBUG_LOG" 2>/dev/null
|
||||
done
|
||||
fi
|
||||
|
||||
if [ -n "$wan_ip6" ]; then
|
||||
for i in $wan_ip6; do
|
||||
sed -i "s/${wan_ip6}/*WAN IP*/g" "$DEBUG_LOG" 2>/dev/null
|
||||
wanip=$(echo "$i" |awk -F: 'OFS=":",NF-=1')
|
||||
sed -i "s/${wanip}/*WAN IP*/g" "$DEBUG_LOG" 2>/dev/null
|
||||
done
|
||||
fi
|
||||
|
||||
|
@ -30,7 +30,7 @@
|
||||
fi
|
||||
fi
|
||||
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$DOWNLOAD_PATH" -o "$DASH_FILE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$DASH_FILE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$DOWNLOAD_PATH" -o "$DASH_FILE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$DASH_FILE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
|
||||
if [ "${PIPESTATUS[0]}" -eq 0 ] && [ -s "$DASH_FILE_DIR" ] && [ -z "$(grep "404: Not Found" "$DASH_FILE_DIR")" ] && [ -z "$(grep "Package size exceeded the configured limit" "$DASH_FILE_DIR")" ]; then
|
||||
unzip -qt "$DASH_FILE_DIR" >/dev/null 2>&1
|
||||
|
@ -3,12 +3,8 @@
|
||||
. /lib/functions.sh
|
||||
|
||||
urlencode() {
|
||||
local data
|
||||
if [ "$#" -eq 1 ]; then
|
||||
data=$(curl -s -o /dev/null -w %{url_effective} --get --data-urlencode "key=$1" "")
|
||||
if [ ! -z "$data" ]; then
|
||||
echo -n "$(echo ${data##/?key=} |sed 's/\//%2f/g' |sed 's/:/%3a/g' |sed 's/?/%3f/g' |sed 's/(/%28/g' |sed 's/)/%29/g' |sed 's/\^/%5e/g' |sed 's/=/%3d/g' |sed 's/|/%7c/g' |sed 's/+/%20/g')"
|
||||
fi
|
||||
echo "$(/usr/share/openclash/openclash_urlencode.lua "$1")"
|
||||
fi
|
||||
}
|
||||
|
||||
@ -67,32 +63,32 @@ urlencode() {
|
||||
[ "$RULE_TYPE" != "netflix" ] && [ "$RULE_TYPE" != "disney" ] && DOWNLOAD_PATH=$(urlencode "$DOWNLOAD_PATH")
|
||||
|
||||
if [ "$RULE_TYPE" = "netflix" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$RULE_TYPE" = "disney" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$RULE_TYPE" = "game" ]; then
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/FQrabbit/SSTap-Rule@master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/FQrabbit/SSTap-Rule@master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"FQrabbit/SSTap-Rule/master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"FQrabbit/SSTap-Rule/master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/FQrabbit/SSTap-Rule/master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/FQrabbit/SSTap-Rule/master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/FQrabbit/SSTap-Rule/master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/FQrabbit/SSTap-Rule/master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
elif [ "$RULE_TYPE" = "provider" ]; then
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/"$(echo "$DOWNLOAD_PATH" |awk -F '/master' '{print $1}' 2>/dev/null)"@master"$(echo "$DOWNLOAD_PATH" |awk -F 'master' '{print $2}')" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/"$(echo "$DOWNLOAD_PATH" |awk -F '/master' '{print $1}' 2>/dev/null)"@master"$(echo "$DOWNLOAD_PATH" |awk -F 'master' '{print $2}')" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod""$(echo "$DOWNLOAD_PATH" |awk -F '/master' '{print $1}' 2>/dev/null)"/master"$(echo "$DOWNLOAD_PATH" |awk -F 'master' '{print $2}')" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod""$(echo "$DOWNLOAD_PATH" |awk -F '/master' '{print $1}' 2>/dev/null)"/master"$(echo "$DOWNLOAD_PATH" |awk -F 'master' '{print $2}')" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
@ -30,22 +30,22 @@
|
||||
if [ -z "$GEOIP_CUSTOM_URL" ]; then
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "${github_address_mod}gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat" -o /tmp/GeoIP.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoIP.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "${github_address_mod}gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat" -o /tmp/GeoIP.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoIP.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "https://raw.fastgit.org/Loyalsoldier/v2ray-rules-dat/release/geoip.dat" -o /tmp/GeoIP.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoIP.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "https://raw.fastgit.org/Loyalsoldier/v2ray-rules-dat/release/geoip.dat" -o /tmp/GeoIP.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoIP.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat -o /tmp/GeoIP.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoIP.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat -o /tmp/GeoIP.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoIP.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat" -o /tmp/GeoIP.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoIP.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat" -o /tmp/GeoIP.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoIP.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
if [ "$?" -ne "0" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/v/v2/v2raya/dists/v2ray-rules-dat/geoip.dat" -o /tmp/GeoIP.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoIP.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
if [ "${PIPESTATUS[0]}" -ne "0" ]; then
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/v/v2/v2raya/dists/v2ray-rules-dat/geoip.dat" -o /tmp/GeoIP.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoIP.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$GEOIP_CUSTOM_URL" -o /tmp/GeoIP.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoIP.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$GEOIP_CUSTOM_URL" -o /tmp/GeoIP.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoIP.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
if [ "${PIPESTATUS[0]}" -eq 0 ] && [ -s "/tmp/GeoIP.dat" ]; then
|
||||
if [ "${PIPESTATUS[0]}" -eq "0" ] && [ -s "/tmp/GeoIP.dat" ]; then
|
||||
LOG_OUT "GeoIP Dat Download Success, Check Updated..."
|
||||
cmp -s /tmp/GeoIP.dat "$geoip_path"
|
||||
if [ "$?" -ne "0" ]; then
|
||||
|
@ -30,22 +30,22 @@
|
||||
if [ -z "$GEOSITE_CUSTOM_URL" ]; then
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/Loyalsoldier/v2ray-rules-dat@release/geosite.dat -o /tmp/GeoSite.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoSite.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/Loyalsoldier/v2ray-rules-dat@release/geosite.dat -o /tmp/GeoSite.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoSite.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/Loyalsoldier/v2ray-rules-dat/release/geosite.dat -o /tmp/GeoSite.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoSite.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/Loyalsoldier/v2ray-rules-dat/release/geosite.dat -o /tmp/GeoSite.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoSite.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat -o /tmp/GeoSite.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoSite.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat -o /tmp/GeoSite.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoSite.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat -o /tmp/GeoSite.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoSite.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat -o /tmp/GeoSite.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoSite.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
if [ "$?" -ne "0" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/v/v2/v2raya/dists/v2ray-rules-dat/geosite.dat" -o /tmp/GeoSite.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoSite.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
if [ "${PIPESTATUS[0]}" -ne "0" ]; then
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/v/v2/v2raya/dists/v2ray-rules-dat/geosite.dat" -o /tmp/GeoSite.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoSite.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$GEOSITE_CUSTOM_URL" -o /tmp/GeoSite.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoSite.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$GEOSITE_CUSTOM_URL" -o /tmp/GeoSite.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoSite.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
if [ "${PIPESTATUS[0]}" -eq 0 ] && [ -s "/tmp/GeoSite.dat" ]; then
|
||||
if [ "${PIPESTATUS[0]}" -eq "0" ] && [ -s "/tmp/GeoSite.dat" ]; then
|
||||
LOG_OUT "GeoSite Database Download Success, Check Updated..."
|
||||
cmp -s /tmp/GeoSite.dat "$geosite_path"
|
||||
if [ "$?" -ne "0" ]; then
|
||||
|
@ -143,7 +143,7 @@ end
|
||||
if type == "wanip6" then
|
||||
if wan6 then
|
||||
for o = 1, #(rv.wan6) do
|
||||
if rv.wan6[o].proto == "pppoe" then
|
||||
if rv.wan6[o].proto == "pppoe" or rv.wan6[o].proto == "dhcpv6" then
|
||||
print(rv.wan6[o].ip6addr)
|
||||
end
|
||||
end
|
||||
|
@ -30,17 +30,17 @@
|
||||
if [ -z "$GEOIP_CUSTOM_URL" ]; then
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/alecthw/mmdb_china_ip_list@release/lite/Country.mmdb -o /tmp/Country.mmdb 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/Country.mmdb" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/alecthw/mmdb_china_ip_list@release/lite/Country.mmdb -o /tmp/Country.mmdb 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/Country.mmdb" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/alecthw/mmdb_china_ip_list/release/lite/Country.mmdb -o /tmp/Country.mmdb 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/Country.mmdb" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/alecthw/mmdb_china_ip_list/release/lite/Country.mmdb -o /tmp/Country.mmdb 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/Country.mmdb" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/alecthw/mmdb_china_ip_list/release/lite/Country.mmdb -o /tmp/Country.mmdb 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/Country.mmdb" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/alecthw/mmdb_china_ip_list/release/lite/Country.mmdb -o /tmp/Country.mmdb 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/Country.mmdb" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/alecthw/mmdb_china_ip_list/release/lite/Country.mmdb -o /tmp/Country.mmdb 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/Country.mmdb" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/alecthw/mmdb_china_ip_list/release/lite/Country.mmdb -o /tmp/Country.mmdb 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/Country.mmdb" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$GEOIP_CUSTOM_URL" -o /tmp/Country.mmdb 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/Country.mmdb" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$GEOIP_CUSTOM_URL" -o /tmp/Country.mmdb 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/Country.mmdb" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
if [ "${PIPESTATUS[0]}" -eq 0 ] && [ -s "/tmp/Country.mmdb" ]; then
|
||||
LOG_OUT "Geoip Database Download Success, Check Updated..."
|
||||
|
@ -36,41 +36,41 @@
|
||||
if [ "$rule_name" = "lhie1" ]; then
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/dler-io/Rules@master/Clash/Rule.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/dler-io/Rules@master/Clash/Rule.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/dler-io/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/dler-io/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/dler-io/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/dler-io/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/dler-io/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/dler-io/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
sed -i '1i rules:' /tmp/rules.yaml
|
||||
elif [ "$rule_name" = "ConnersHua" ]; then
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/DivineEngine/Profiles@master/Clash/Outbound.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/DivineEngine/Profiles@master/Clash/Outbound.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/DivineEngine/Profiles/master/Clash/Outbound.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/DivineEngine/Profiles/master/Clash/Outbound.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Outbound.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Outbound.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Outbound.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Outbound.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
sed -i "s/# - RULE-SET,ChinaIP,DIRECT/- RULE-SET,ChinaIP,DIRECT/g" /tmp/rules.yaml 2>/dev/null
|
||||
sed -i "s/- GEOIP,/#- GEOIP,/g" /tmp/rules.yaml 2>/dev/null
|
||||
elif [ "$rule_name" = "ConnersHua_return" ]; then
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/DivineEngine/Profiles@master/Clash/Inbound.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/DivineEngine/Profiles@master/Clash/Inbound.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/DivineEngine/Profiles/master/Clash/Inbound.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/DivineEngine/Profiles/master/Clash/Inbound.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Inbound.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Inbound.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Inbound.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Inbound.yaml -o /tmp/rules.yaml 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
fi
|
||||
if [ -s "/tmp/rules.yaml" ]; then
|
||||
|
@ -2,22 +2,23 @@
|
||||
|
||||
require "nixio"
|
||||
require "luci.util"
|
||||
require "luci.sys"
|
||||
|
||||
local uci = require("luci.model.uci").cursor()
|
||||
local fs = require "luci.openclash"
|
||||
local json = require "luci.jsonc"
|
||||
local SYS = require "luci.sys"
|
||||
local HTTP = require "luci.http"
|
||||
local UCI = require("luci.model.uci").cursor()
|
||||
local FS = require "luci.openclash"
|
||||
local JSON = require "luci.jsonc"
|
||||
local UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36"
|
||||
local class_type = type
|
||||
local type = arg[1]
|
||||
local all_test
|
||||
local router_self_proxy = tonumber(uci:get("openclash", "config", "router_self_proxy")) or 1
|
||||
local router_self_proxy = tonumber(UCI:get("openclash", "config", "router_self_proxy")) or 1
|
||||
local now_name, group_name, group_type, group_show, status, ip, port, passwd, group_match_name
|
||||
local groups = {}
|
||||
local proxies = {}
|
||||
local tested_proxy = {}
|
||||
local self_status = luci.sys.exec(string.format('ps -w |grep -v grep |grep -c "openclash_streaming_unlock.lua %s"', type))
|
||||
local select_logic = uci:get("openclash", "config", "stream_auto_select_logic") or "urltest"
|
||||
local self_status = SYS.exec(string.format('ps -w |grep -v grep |grep -c "openclash_streaming_unlock.lua %s"', type))
|
||||
local select_logic = UCI:get("openclash", "config", "stream_auto_select_logic") or "urltest"
|
||||
|
||||
if not type then
|
||||
print(os.date("%Y-%m-%d %H:%M:%S").." ".."Error: Streaming Unlock Has No Parameter of Type, Exiting...")
|
||||
@ -74,9 +75,9 @@ function unlock_auto_select()
|
||||
--Get ip port and password
|
||||
get_auth_info()
|
||||
|
||||
info = luci.sys.exec(string.format('curl -sL -m 3 --retry 2 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET http://%s:%s/proxies', passwd, ip, port))
|
||||
info = SYS.exec(string.format('curl -sL -m 3 --retry 2 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET http://%s:%s/proxies', passwd, ip, port))
|
||||
if info then
|
||||
info = json.parse(info)
|
||||
info = JSON.parse(info)
|
||||
if not info or not info.proxies then os.exit(0) end
|
||||
end
|
||||
|
||||
@ -89,31 +90,31 @@ function unlock_auto_select()
|
||||
|
||||
if not auto_get_group then
|
||||
if type == "Netflix" then
|
||||
key_group = uci:get("openclash", "config", "stream_auto_select_group_key_netflix") or "netflix|奈飞"
|
||||
key_group = UCI:get("openclash", "config", "stream_auto_select_group_key_netflix") or "netflix|奈飞"
|
||||
elseif type == "Disney Plus" then
|
||||
key_group = uci:get("openclash", "config", "stream_auto_select_group_key_disney") or "disney|迪士尼"
|
||||
key_group = UCI:get("openclash", "config", "stream_auto_select_group_key_disney") or "disney|迪士尼"
|
||||
elseif type == "HBO Now" then
|
||||
key_group = uci:get("openclash", "config", "stream_auto_select_group_key_hbo_now") or "hbo|hbonow|hbo now"
|
||||
key_group = UCI:get("openclash", "config", "stream_auto_select_group_key_hbo_now") or "hbo|hbonow|hbo now"
|
||||
elseif type == "HBO Max" then
|
||||
key_group = uci:get("openclash", "config", "stream_auto_select_group_key_hbo_max") or "hbo|hbomax|hbo max"
|
||||
key_group = UCI:get("openclash", "config", "stream_auto_select_group_key_hbo_max") or "hbo|hbomax|hbo max"
|
||||
elseif type == "HBO GO Asia" then
|
||||
key_group = uci:get("openclash", "config", "stream_auto_select_group_key_hbo_go_asia") or "hbo|hbogo|hbo go"
|
||||
key_group = UCI:get("openclash", "config", "stream_auto_select_group_key_hbo_go_asia") or "hbo|hbogo|hbo go"
|
||||
elseif type == "YouTube Premium" then
|
||||
key_group = uci:get("openclash", "config", "stream_auto_select_group_key_ytb") or "youtobe|油管"
|
||||
key_group = UCI:get("openclash", "config", "stream_auto_select_group_key_ytb") or "youtobe|油管"
|
||||
elseif type == "TVB Anywhere+" then
|
||||
key_group = uci:get("openclash", "config", "stream_auto_select_group_key_tvb_anywhere") or "tvb"
|
||||
key_group = UCI:get("openclash", "config", "stream_auto_select_group_key_tvb_anywhere") or "tvb"
|
||||
elseif type == "Amazon Prime Video" then
|
||||
key_group = uci:get("openclash", "config", "stream_auto_select_group_key_prime_video") or "prime video|amazon"
|
||||
key_group = UCI:get("openclash", "config", "stream_auto_select_group_key_prime_video") or "prime video|amazon"
|
||||
elseif type == "DAZN" then
|
||||
key_group = uci:get("openclash", "config", "stream_auto_select_group_key_dazn") or "dazn"
|
||||
key_group = UCI:get("openclash", "config", "stream_auto_select_group_key_dazn") or "dazn"
|
||||
elseif type == "Paramount Plus" then
|
||||
key_group = uci:get("openclash", "config", "stream_auto_select_group_key_paramount_plus") or "paramount"
|
||||
key_group = UCI:get("openclash", "config", "stream_auto_select_group_key_paramount_plus") or "paramount"
|
||||
elseif type == "Discovery Plus" then
|
||||
key_group = uci:get("openclash", "config", "stream_auto_select_group_key_discovery_plus") or "discovery"
|
||||
key_group = UCI:get("openclash", "config", "stream_auto_select_group_key_discovery_plus") or "discovery"
|
||||
elseif type == "Bilibili" then
|
||||
key_group = uci:get("openclash", "config", "stream_auto_select_group_key_bilibili") or "bilibili"
|
||||
key_group = UCI:get("openclash", "config", "stream_auto_select_group_key_bilibili") or "bilibili"
|
||||
elseif type == "Google" then
|
||||
key_group = uci:get("openclash", "config", "stream_auto_select_group_key_google_not_cn") or "google|谷歌"
|
||||
key_group = UCI:get("openclash", "config", "stream_auto_select_group_key_google_not_cn") or "google|谷歌"
|
||||
end
|
||||
if not key_group then key_group = type end
|
||||
else
|
||||
@ -163,11 +164,11 @@ function unlock_auto_select()
|
||||
if status == 4 then
|
||||
status = 2
|
||||
if region and region ~= "" then
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
end
|
||||
end
|
||||
if status == 2 and type == "Google" then
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), now_name)
|
||||
FS.writefile(string.format("/tmp/openclash_%s_region", type), now_name)
|
||||
end
|
||||
break
|
||||
else
|
||||
@ -243,7 +244,7 @@ function unlock_auto_select()
|
||||
get_proxy(info, value.all[i], value.name)
|
||||
if group_type == "Selector" then
|
||||
if group_name == value.all[i] then
|
||||
luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, group_name, ip, port, urlencode(value.name)))
|
||||
SYS.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, group_name, ip, port, urlencode(value.name)))
|
||||
end
|
||||
if not all_test then
|
||||
--filter nodes
|
||||
@ -279,7 +280,7 @@ function unlock_auto_select()
|
||||
if proxy == "REJECT" or get_group_now(info, proxy) == "REJECT" then
|
||||
break
|
||||
else
|
||||
luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, proxy, ip, port, urlencode(group_name)))
|
||||
SYS.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, proxy, ip, port, urlencode(group_name)))
|
||||
region, old_region = proxy_unlock_test()
|
||||
if status == 2 then
|
||||
if region and region ~= "" then
|
||||
@ -332,7 +333,7 @@ function unlock_auto_select()
|
||||
if status == 2 and not all_test then
|
||||
break
|
||||
elseif p == #(proxies) and #(proxies) ~= 1 then
|
||||
luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, now_name, ip, port, urlencode(group_name)))
|
||||
SYS.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, now_name, ip, port, urlencode(group_name)))
|
||||
end
|
||||
break
|
||||
end
|
||||
@ -340,7 +341,7 @@ function unlock_auto_select()
|
||||
end
|
||||
else
|
||||
--only group expand
|
||||
luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, value.all[i], ip, port, urlencode(group_name)))
|
||||
SYS.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, value.all[i], ip, port, urlencode(group_name)))
|
||||
while true do
|
||||
if table_include(tested_proxy, now_name) or #nodes_filter(now_name, info) == 0 then
|
||||
break
|
||||
@ -421,7 +422,7 @@ function unlock_auto_select()
|
||||
if #nodes_filter(v[3], info) ~= 0 then
|
||||
if v[4] then
|
||||
table.insert(fallback_select, 1, {v[1], v[2], v[3], v[4]})
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), v[4])
|
||||
FS.writefile(string.format("/tmp/openclash_%s_region", type), v[4])
|
||||
else
|
||||
table.insert(fallback_select, 1, {v[1], v[2], v[3]})
|
||||
end
|
||||
@ -429,8 +430,8 @@ function unlock_auto_select()
|
||||
end
|
||||
end
|
||||
for k, v in pairs(fallback_select) do
|
||||
luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, v[1], ip, port, urlencode(value.name)))
|
||||
luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, v[3], ip, port, urlencode(v[2])))
|
||||
SYS.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, v[1], ip, port, urlencode(value.name)))
|
||||
SYS.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, v[3], ip, port, urlencode(v[2])))
|
||||
if table_include(groups, v[3]) then
|
||||
group_now = "【".. v[3] .. " ➟ " .. get_group_now(info, v[3]) .. "】"
|
||||
else
|
||||
@ -466,7 +467,7 @@ function unlock_auto_select()
|
||||
break
|
||||
end
|
||||
elseif i == #(value.all) then
|
||||
luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, proxy_default, ip, port, urlencode(value.name)))
|
||||
SYS.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, proxy_default, ip, port, urlencode(value.name)))
|
||||
if table_include(groups, proxy_default) then
|
||||
group_now = value.name.." ➟ "..proxy_default.." ➟ "..get_group_now(info, proxy_default)
|
||||
else
|
||||
@ -526,12 +527,12 @@ function unlock_auto_select()
|
||||
end
|
||||
|
||||
function urlencode(data)
|
||||
local data = luci.sys.exec(string.format('curl -s -o /dev/null -w %%{url_effective} --get --data-urlencode "key=%s" ""', data))
|
||||
return luci.sys.exec(string.format("echo -n %s |sed 's/+/%%20/g'", string.match(data, "/%?key=(.+)")))
|
||||
if not data then return end
|
||||
return HTTP.urlencode(data) or data
|
||||
end
|
||||
|
||||
function datamatch(data, regex)
|
||||
local result = luci.sys.exec(string.format('ruby -E UTF-8 -e "x=\'%s\'; if x =~ /%s/i then print \'true\' else print \'false\' end"', data, regex))
|
||||
local result = SYS.exec(string.format('ruby -E UTF-8 -e "x=\'%s\'; if x =~ /%s/i then print \'true\' else print \'false\' end"', data, regex))
|
||||
if result == "true" then return true else return false end
|
||||
end
|
||||
|
||||
@ -544,7 +545,7 @@ function table_rand(t, d)
|
||||
while #t ~= 0 do
|
||||
local n = math.random(0, #t)
|
||||
if t[n] ~= nil then
|
||||
if type == "YouTube Premium" and fs.isfile("/tmp/openclash_Google_region") and fs.readfile("/tmp/openclash_Google_region") == t[n] then
|
||||
if type == "YouTube Premium" and FS.isfile("/tmp/openclash_Google_region") and FS.readfile("/tmp/openclash_Google_region") == t[n] then
|
||||
table.insert(tab, 1, t[n])
|
||||
elseif d ~= nil and table_include(groups, d) and d == t[n] then
|
||||
table.insert(tab, 1, t[n])
|
||||
@ -558,7 +559,7 @@ function table_rand(t, d)
|
||||
end
|
||||
|
||||
function table_sort_by_urltest(t, d)
|
||||
local info, get_delay, group_delay
|
||||
local info, get_delay, group_delay, delay_url
|
||||
local tab = {}
|
||||
local result = {}
|
||||
|
||||
@ -566,9 +567,9 @@ function table_sort_by_urltest(t, d)
|
||||
return
|
||||
end
|
||||
|
||||
info = luci.sys.exec(string.format('curl -sL -m 3 --retry 2 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET http://%s:%s/providers/proxies', passwd, ip, port))
|
||||
info = SYS.exec(string.format('curl -sL -m 3 --retry 2 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET http://%s:%s/providers/proxies', passwd, ip, port))
|
||||
if info then
|
||||
info = json.parse(info)
|
||||
info = JSON.parse(info)
|
||||
if not info or not info.providers then return t end
|
||||
end
|
||||
|
||||
@ -590,9 +591,14 @@ function table_sort_by_urltest(t, d)
|
||||
end
|
||||
if not get_delay then
|
||||
if table_include(groups, t[n]) or t[n] == "DIRECT" then
|
||||
group_delay = luci.sys.exec(string.format('curl -sL -m 5 --retry 2 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET "http://%s:%s/proxies/%s/delay?timeout=5000&url=http%%3A%%2F%%2F%s"', passwd, ip, port, urlencode(t[n]), "www.gstatic.com%2Fgenerate_204"))
|
||||
if UCI:get("openclash", "config", "urltest_address_mod") and UCI:get("openclash", "config", "urltest_address_mod") ~= "0" then
|
||||
delay_url = UCI:get("openclash", "config", "urltest_address_mod")
|
||||
else
|
||||
delay_url = "http://www.gstatic.com/generate_204"
|
||||
end
|
||||
group_delay = SYS.exec(string.format('curl -sL -m 5 --retry 2 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET "http://%s:%s/proxies/%s/delay?timeout=5000&url=%s"', passwd, ip, port, urlencode(t[n]), urlencode(delay_url)))
|
||||
if group_delay then
|
||||
group_delay = json.parse(group_delay)
|
||||
group_delay = JSON.parse(group_delay)
|
||||
end
|
||||
if group_delay and group_delay.delay and group_delay.delay ~= 0 then
|
||||
table.insert(tab, {t[n], group_delay.delay})
|
||||
@ -610,7 +616,7 @@ function table_sort_by_urltest(t, d)
|
||||
end)
|
||||
|
||||
for _, value in pairs(tab) do
|
||||
if type == "YouTube Premium" and fs.isfile("/tmp/openclash_Google_region") and fs.readfile("/tmp/openclash_Google_region") == value[1] then
|
||||
if type == "YouTube Premium" and FS.isfile("/tmp/openclash_Google_region") and FS.readfile("/tmp/openclash_Google_region") == value[1] then
|
||||
table.insert(result, 1, value[1])
|
||||
elseif d ~= nil and table_include(groups, d) and d == value[1] then
|
||||
table.insert(result, 1, value[1])
|
||||
@ -636,16 +642,16 @@ function table_include(table, value)
|
||||
end
|
||||
|
||||
function get_auth_info()
|
||||
port = uci:get("openclash", "config", "cn_port")
|
||||
passwd = uci:get("openclash", "config", "dashboard_password") or ""
|
||||
ip = luci.sys.exec("uci -q get network.lan.ipaddr |awk -F '/' '{print $1}' 2>/dev/null |tr -d '\n'")
|
||||
port = UCI:get("openclash", "config", "cn_port")
|
||||
passwd = UCI:get("openclash", "config", "dashboard_password") or ""
|
||||
ip = SYS.exec("uci -q get network.lan.ipaddr |awk -F '/' '{print $1}' 2>/dev/null |tr -d '\n'")
|
||||
|
||||
if not ip or ip == "" then
|
||||
ip = luci.sys.exec("ip address show $(uci -q -p /tmp/state get network.lan.ifname || uci -q -p /tmp/state get network.lan.device) | grep -w 'inet' 2>/dev/null |grep -Eo 'inet [0-9\.]+' | awk '{print $2}' | tr -d '\n'")
|
||||
ip = SYS.exec("ip address show $(uci -q -p /tmp/state get network.lan.ifname || uci -q -p /tmp/state get network.lan.device) | grep -w 'inet' 2>/dev/null |grep -Eo 'inet [0-9\.]+' | awk '{print $2}' | tr -d '\n'")
|
||||
end
|
||||
|
||||
if not ip or ip == "" then
|
||||
ip = luci.sys.exec("ip addr show 2>/dev/null | grep -w 'inet' | grep 'global' | grep 'brd' | grep -Eo 'inet [0-9\.]+' | awk '{print $2}' | head -n 1 | tr -d '\n'")
|
||||
ip = SYS.exec("ip addr show 2>/dev/null | grep -w 'inet' | grep 'global' | grep 'brd' | grep -Eo 'inet [0-9\.]+' | awk '{print $2}' | head -n 1 | tr -d '\n'")
|
||||
end
|
||||
if not ip or not port then
|
||||
os.exit(0)
|
||||
@ -655,11 +661,11 @@ end
|
||||
function close_connections()
|
||||
local con
|
||||
local group_cons_id = {}
|
||||
local enable = tonumber(uci:get("openclash", "config", "stream_auto_select_close_con")) or 1
|
||||
local enable = tonumber(UCI:get("openclash", "config", "stream_auto_select_close_con")) or 1
|
||||
if enable == 0 then return end
|
||||
con = luci.sys.exec(string.format('curl -sL -m 5 --retry 2 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET http://%s:%s/connections', passwd, ip, port))
|
||||
con = SYS.exec(string.format('curl -sL -m 5 --retry 2 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET http://%s:%s/connections', passwd, ip, port))
|
||||
if con then
|
||||
con = json.parse(con)
|
||||
con = JSON.parse(con)
|
||||
end
|
||||
if con then
|
||||
for i = 1, #(con.connections) do
|
||||
@ -670,7 +676,7 @@ function close_connections()
|
||||
--close connections
|
||||
if #(group_cons_id) > 0 then
|
||||
for i = 1, #(group_cons_id) do
|
||||
luci.sys.exec(string.format('curl -sL -m 3 --retry 2 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -X DELETE http://%s:%s/connections/%s >/dev/null 2>&1 &', passwd, ip, port, group_cons_id[i]))
|
||||
SYS.exec(string.format('curl -sL -m 3 --retry 2 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -X DELETE http://%s:%s/connections/%s >/dev/null 2>&1 &', passwd, ip, port, group_cons_id[i]))
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -682,31 +688,31 @@ function nodes_filter(t, info)
|
||||
local regex, group_now
|
||||
|
||||
if type == "Netflix" then
|
||||
regex = uci:get("openclash", "config", "stream_auto_select_node_key_netflix") or ""
|
||||
regex = UCI:get("openclash", "config", "stream_auto_select_node_key_netflix") or ""
|
||||
elseif type == "Disney Plus" then
|
||||
regex = uci:get("openclash", "config", "stream_auto_select_node_key_disney") or ""
|
||||
regex = UCI:get("openclash", "config", "stream_auto_select_node_key_disney") or ""
|
||||
elseif type == "HBO Now" then
|
||||
regex = uci:get("openclash", "config", "stream_auto_select_node_key_hbo_now") or ""
|
||||
regex = UCI:get("openclash", "config", "stream_auto_select_node_key_hbo_now") or ""
|
||||
elseif type == "HBO Max" then
|
||||
regex = uci:get("openclash", "config", "stream_auto_select_node_key_hbo_max") or ""
|
||||
regex = UCI:get("openclash", "config", "stream_auto_select_node_key_hbo_max") or ""
|
||||
elseif type == "HBO GO Asia" then
|
||||
regex = uci:get("openclash", "config", "stream_auto_select_node_key_hbo_go_asia") or ""
|
||||
regex = UCI:get("openclash", "config", "stream_auto_select_node_key_hbo_go_asia") or ""
|
||||
elseif type == "YouTube Premium" then
|
||||
regex = uci:get("openclash", "config", "stream_auto_select_node_key_ytb") or ""
|
||||
regex = UCI:get("openclash", "config", "stream_auto_select_node_key_ytb") or ""
|
||||
elseif type == "TVB Anywhere+" then
|
||||
regex = uci:get("openclash", "config", "stream_auto_select_node_key_tvb_anywhere") or ""
|
||||
regex = UCI:get("openclash", "config", "stream_auto_select_node_key_tvb_anywhere") or ""
|
||||
elseif type == "Amazon Prime Video" then
|
||||
regex = uci:get("openclash", "config", "stream_auto_select_node_key_prime_video") or ""
|
||||
regex = UCI:get("openclash", "config", "stream_auto_select_node_key_prime_video") or ""
|
||||
elseif type == "DAZN" then
|
||||
regex = uci:get("openclash", "config", "stream_auto_select_node_key_dazn") or ""
|
||||
regex = UCI:get("openclash", "config", "stream_auto_select_node_key_dazn") or ""
|
||||
elseif type == "Paramount Plus" then
|
||||
regex = uci:get("openclash", "config", "stream_auto_select_node_key_paramount_plus") or ""
|
||||
regex = UCI:get("openclash", "config", "stream_auto_select_node_key_paramount_plus") or ""
|
||||
elseif type == "Discovery Plus" then
|
||||
regex = uci:get("openclash", "config", "stream_auto_select_node_key_discovery_plus") or ""
|
||||
regex = UCI:get("openclash", "config", "stream_auto_select_node_key_discovery_plus") or ""
|
||||
elseif type == "Bilibili" then
|
||||
regex = uci:get("openclash", "config", "stream_auto_select_node_key_bilibili") or ""
|
||||
regex = UCI:get("openclash", "config", "stream_auto_select_node_key_bilibili") or ""
|
||||
elseif type == "Google" then
|
||||
regex = uci:get("openclash", "config", "stream_auto_select_node_key_google_not_cn") or ""
|
||||
regex = UCI:get("openclash", "config", "stream_auto_select_node_key_google_not_cn") or ""
|
||||
end
|
||||
|
||||
if class_type(t) == "table" then
|
||||
@ -777,36 +783,36 @@ function auto_get_policy_group(passwd, ip, port)
|
||||
local auto_get_group, con
|
||||
|
||||
if type == "Netflix" then
|
||||
luci.sys.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://www.netflix.com &')
|
||||
SYS.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://www.netflix.com &')
|
||||
elseif type == "Disney Plus" then
|
||||
luci.sys.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://www.disneyplus.com &')
|
||||
SYS.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://www.disneyplus.com &')
|
||||
elseif type == "HBO Now" then
|
||||
luci.sys.call('curl -s -m 5 --limit-rate 50B -o /dev/null https://play.hbonow.com/assets/fonts/Street2-Medium.ttf &')
|
||||
SYS.call('curl -s -m 5 --limit-rate 50B -o /dev/null https://play.hbonow.com/assets/fonts/Street2-Medium.ttf &')
|
||||
elseif type == "HBO Max" then
|
||||
luci.sys.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://www.hbomax.com &')
|
||||
SYS.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://www.hbomax.com &')
|
||||
elseif type == "HBO GO Asia" then
|
||||
luci.sys.call('curl -s -m 5 --limit-rate 50B -o /dev/null https://www.hbogoasia.sg/static/media/GothamLight.8566e233.ttf &')
|
||||
SYS.call('curl -s -m 5 --limit-rate 50B -o /dev/null https://www.hbogoasia.sg/static/media/GothamLight.8566e233.ttf &')
|
||||
elseif type == "YouTube Premium" then
|
||||
luci.sys.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://m.youtube.com/premium &')
|
||||
SYS.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://m.youtube.com/premium &')
|
||||
elseif type == "TVB Anywhere+" then
|
||||
luci.sys.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://uapisfm.tvbanywhere.com.sg &')
|
||||
SYS.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://uapisfm.tvbanywhere.com.sg &')
|
||||
elseif type == "Amazon Prime Video" then
|
||||
luci.sys.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://www.primevideo.com &')
|
||||
SYS.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://www.primevideo.com &')
|
||||
elseif type == "DAZN" then
|
||||
luci.sys.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://www.dazn.com &')
|
||||
SYS.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://www.dazn.com &')
|
||||
elseif type == "Paramount Plus" then
|
||||
luci.sys.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://www.paramountplus.com/ &')
|
||||
SYS.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://www.paramountplus.com/ &')
|
||||
elseif type == "Discovery Plus" then
|
||||
luci.sys.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://www.discoveryplus.com/ &')
|
||||
SYS.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://www.discoveryplus.com/ &')
|
||||
elseif type == "Bilibili" then
|
||||
luci.sys.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://www.bilibili.com/ &')
|
||||
SYS.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://www.bilibili.com/ &')
|
||||
elseif type == "Google" then
|
||||
luci.sys.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://timeline.google.com &')
|
||||
SYS.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://timeline.google.com &')
|
||||
end
|
||||
os.execute("sleep 1")
|
||||
con = luci.sys.exec(string.format('curl -sL -m 5 --retry 2 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET http://%s:%s/connections', passwd, ip, port))
|
||||
con = SYS.exec(string.format('curl -sL -m 5 --retry 2 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET http://%s:%s/connections', passwd, ip, port))
|
||||
if con then
|
||||
con = json.parse(con)
|
||||
con = JSON.parse(con)
|
||||
end
|
||||
if con then
|
||||
for i = 1, #(con.connections) do
|
||||
@ -902,7 +908,7 @@ function get_proxy(info, group, name)
|
||||
--group maybe a proxy
|
||||
proxies = {}
|
||||
group_show = ""
|
||||
local expand_group = tonumber(uci:get("openclash", "config", "stream_auto_select_expand_group")) or 0
|
||||
local expand_group = tonumber(UCI:get("openclash", "config", "stream_auto_select_expand_group")) or 0
|
||||
|
||||
if expand_group == 1 then
|
||||
if table_include(groups, group) then
|
||||
@ -999,13 +1005,13 @@ function netflix_unlock_test()
|
||||
local filmId = 70143836
|
||||
local url = "https://www.netflix.com/title/"..filmId
|
||||
local headers = "User-Agent: "..UA
|
||||
local info = luci.sys.exec(string.format('curl -sLI --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{json} -H "Content-Type: application/json" -H "%s" -XGET %s', headers, url))
|
||||
local info = SYS.exec(string.format('curl -sLI --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{json} -H "Content-Type: application/json" -H "%s" -XGET %s', headers, url))
|
||||
local result = {}
|
||||
local region
|
||||
local old_region = ""
|
||||
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_netflix") or ""
|
||||
local regex = UCI:get("openclash", "config", "stream_auto_select_region_key_netflix") or ""
|
||||
if info then
|
||||
info = json.parse(info)
|
||||
info = JSON.parse(info)
|
||||
end
|
||||
if info then
|
||||
if info.http_code == 200 then
|
||||
@ -1014,8 +1020,8 @@ function netflix_unlock_test()
|
||||
region = string.upper(string.match(result[3], "^%a+"))
|
||||
if region == "TITLE" then region = "US" end
|
||||
if region then
|
||||
if fs.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = fs.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
end
|
||||
if not datamatch(region, regex) then
|
||||
status = 3
|
||||
@ -1023,7 +1029,7 @@ function netflix_unlock_test()
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and not all_test and ((old_region ~= "" and region ~= old_region) or (old_region == "")) then
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
end
|
||||
end
|
||||
return region, old_region
|
||||
@ -1043,38 +1049,38 @@ function disney_unlock_test()
|
||||
local auth = '-H "authorization: Bearer ZGlzbmV5JmJyb3dzZXImMS4wLjA.Cu56AgSfBTDag5NiRA81oLHkDZfu5L3CKadnefEAY84"'
|
||||
local body = '{"query":"mutation registerDevice($input: RegisterDeviceInput!) { registerDevice(registerDevice: $input) { grant { grantType assertion } } }","variables":{"input":{"deviceFamily":"browser","applicationRuntime":"chrome","deviceProfile":"windows","deviceLanguage":"en","attributes":{"osDeviceIds":[],"manufacturer":"microsoft","model":null,"operatingSystem":"windows","operatingSystemVersion":"10.0","browserName":"chrome","browserVersion":"96.0.4606"}}}}'
|
||||
local region, assertion, data, preassertion, disneycookie, tokencontent
|
||||
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_disney") or ""
|
||||
local regex = UCI:get("openclash", "config", "stream_auto_select_region_key_disney") or ""
|
||||
local old_region = ""
|
||||
|
||||
preassertion = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 %s -H 'User-Agent: %s' -H 'content-type: application/json; charset=UTF-8' -d '{\"deviceFamily\":\"browser\",\"applicationRuntime\":\"chrome\",\"deviceProfile\":\"windows\",\"attributes\":{}}' -XPOST %s", auth, UA, url))
|
||||
preassertion = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 %s -H 'User-Agent: %s' -H 'content-type: application/json; charset=UTF-8' -d '{\"deviceFamily\":\"browser\",\"applicationRuntime\":\"chrome\",\"deviceProfile\":\"windows\",\"attributes\":{}}' -XPOST %s", auth, UA, url))
|
||||
|
||||
if preassertion and json.parse(preassertion) then
|
||||
assertion = json.parse(preassertion).assertion
|
||||
if preassertion and JSON.parse(preassertion) then
|
||||
assertion = JSON.parse(preassertion).assertion
|
||||
end
|
||||
|
||||
if not assertion then return end
|
||||
|
||||
disneycookie = "grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange&latitude=0&longitude=0&platform=browser&subject_token="..assertion.."&subject_token_type=urn%3Abamtech%3Aparams%3Aoauth%3Atoken-type%3Adevice"
|
||||
tokencontent = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 %s -H 'User-Agent: %s' -d '%s' -XPOST %s", auth, UA, disneycookie, url2))
|
||||
tokencontent = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 %s -H 'User-Agent: %s' -d '%s' -XPOST %s", auth, UA, disneycookie, url2))
|
||||
|
||||
if tokencontent and json.parse(tokencontent) then
|
||||
if json.parse(tokencontent).error_description then
|
||||
if tokencontent and JSON.parse(tokencontent) then
|
||||
if JSON.parse(tokencontent).error_description then
|
||||
status = 1
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
data = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 %s -H 'User-Agent: %s' -d '%s' -XPOST %s", headers, UA, body, url3))
|
||||
data = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 %s -H 'User-Agent: %s' -d '%s' -XPOST %s", headers, UA, body, url3))
|
||||
|
||||
if data and json.parse(data) then
|
||||
if data and JSON.parse(data) then
|
||||
status = 1
|
||||
if json.parse(data).extensions and json.parse(data).extensions.sdk and json.parse(data).extensions.sdk.session then
|
||||
region = json.parse(data).extensions.sdk.session.location.countryCode or ""
|
||||
inSupportedLocation = json.parse(data).extensions.sdk.session.inSupportedLocation or ""
|
||||
if JSON.parse(data).extensions and JSON.parse(data).extensions.sdk and JSON.parse(data).extensions.sdk.session then
|
||||
region = JSON.parse(data).extensions.sdk.session.location.countryCode or ""
|
||||
inSupportedLocation = JSON.parse(data).extensions.sdk.session.inSupportedLocation or ""
|
||||
if region == "JP" then
|
||||
status = 2
|
||||
if fs.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = fs.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
end
|
||||
if not datamatch(region, regex) then
|
||||
status = 3
|
||||
@ -1082,15 +1088,15 @@ function disney_unlock_test()
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and not all_test and ((old_region ~= "" and not datamatch(region, old_region)) or (old_region == "")) then
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
end
|
||||
return region, old_region
|
||||
end
|
||||
|
||||
if region and region ~= "" and inSupportedLocation then
|
||||
status = 2
|
||||
if fs.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = fs.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
end
|
||||
if not datamatch(region, regex) then
|
||||
status = 3
|
||||
@ -1098,7 +1104,7 @@ function disney_unlock_test()
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and not all_test and ((old_region ~= "" and not datamatch(region, old_region)) or (old_region == "")) then
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
end
|
||||
return region, old_region
|
||||
end
|
||||
@ -1110,9 +1116,9 @@ end
|
||||
function hbo_now_unlock_test()
|
||||
status = 0
|
||||
local url = "https://play.hbonow.com/"
|
||||
local data = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{json} -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
local data = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{json} -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
if data then
|
||||
data = json.parse(data)
|
||||
data = JSON.parse(data)
|
||||
end
|
||||
if data then
|
||||
if data.http_code == 200 then
|
||||
@ -1128,13 +1134,13 @@ end
|
||||
function hbo_max_unlock_test()
|
||||
status = 0
|
||||
local url = "https://www.hbomax.com/"
|
||||
local data = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{json} -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
local data = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{json} -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
local result = {}
|
||||
local region = ""
|
||||
local old_region = ""
|
||||
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_hbo_max") or ""
|
||||
local regex = UCI:get("openclash", "config", "stream_auto_select_region_key_hbo_max") or ""
|
||||
if data then
|
||||
data = json.parse(data)
|
||||
data = JSON.parse(data)
|
||||
end
|
||||
if data then
|
||||
if data.http_code == 200 then
|
||||
@ -1146,8 +1152,8 @@ function hbo_max_unlock_test()
|
||||
region = string.upper(string.match(result[3], "^%a+"))
|
||||
end
|
||||
if region then
|
||||
if fs.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = fs.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
end
|
||||
if not datamatch(region, regex) then
|
||||
status = 3
|
||||
@ -1155,7 +1161,7 @@ function hbo_max_unlock_test()
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and not all_test and ((old_region ~= "" and region ~= old_region) or (old_region == "")) then
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
end
|
||||
end
|
||||
return region, old_region
|
||||
@ -1168,15 +1174,15 @@ end
|
||||
function hbo_go_asia_unlock_test()
|
||||
status = 0
|
||||
local url = "https://api2.hbogoasia.com/v1/geog?lang=undefined&version=0&bundleId=www.hbogoasia.com"
|
||||
local httpcode = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{http_code} -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_hbo_go_asia") or ""
|
||||
local httpcode = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{http_code} -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
local regex = UCI:get("openclash", "config", "stream_auto_select_region_key_hbo_go_asia") or ""
|
||||
local region = ""
|
||||
local old_region = ""
|
||||
if tonumber(httpcode) == 200 then
|
||||
status = 1
|
||||
local data = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
local data = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
if data then
|
||||
data = json.parse(data)
|
||||
data = JSON.parse(data)
|
||||
end
|
||||
if data then
|
||||
if data.territory then
|
||||
@ -1185,8 +1191,8 @@ function hbo_go_asia_unlock_test()
|
||||
region = string.upper(data.country)
|
||||
end
|
||||
if region then
|
||||
if fs.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = fs.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
end
|
||||
if not datamatch(region, regex) then
|
||||
status = 3
|
||||
@ -1194,7 +1200,7 @@ function hbo_go_asia_unlock_test()
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and not all_test and ((old_region ~= "" and region ~= old_region) or (old_region == "")) then
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
end
|
||||
end
|
||||
return region, old_region
|
||||
@ -1207,14 +1213,14 @@ end
|
||||
function ytb_unlock_test()
|
||||
status = 0
|
||||
local url = "https://m.youtube.com/premium"
|
||||
local httpcode = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{http_code} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
local httpcode = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{http_code} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
local region = ""
|
||||
local old_region = ""
|
||||
local data, he_data
|
||||
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_ytb") or ""
|
||||
local regex = UCI:get("openclash", "config", "stream_auto_select_region_key_ytb") or ""
|
||||
if tonumber(httpcode) == 200 then
|
||||
status = 1
|
||||
data = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' -b 'YSC=BiCUU3-5Gdk; CONSENT=YES+cb.20220301-11-p0.en+FX+700; GPS=1; VISITOR_INFO1_LIVE=4VwPMkB7W5A; PREF=tz=Asia.Shanghai; _gcl_au=1.1.1809531354.1646633279' %s", UA, url))
|
||||
data = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' -b 'YSC=BiCUU3-5Gdk; CONSENT=YES+cb.20220301-11-p0.en+FX+700; GPS=1; VISITOR_INFO1_LIVE=4VwPMkB7W5A; PREF=tz=Asia.Shanghai; _gcl_au=1.1.1809531354.1646633279' %s", UA, url))
|
||||
if string.find(data,"www%.google%.cn") or string.find(data, "is not available in your country") then
|
||||
return
|
||||
end
|
||||
@ -1222,7 +1228,7 @@ function ytb_unlock_test()
|
||||
if region then
|
||||
status = 2
|
||||
else
|
||||
he_data = luci.sys.exec(string.format("curl -sIL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
he_data = SYS.exec(string.format("curl -sIL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
region = string.sub(string.match(he_data, "gl=%a+"), 4, -1)
|
||||
if region then
|
||||
status = 2
|
||||
@ -1230,8 +1236,8 @@ function ytb_unlock_test()
|
||||
region = "US"
|
||||
end
|
||||
end
|
||||
if fs.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = fs.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
end
|
||||
if not datamatch(region, regex) then
|
||||
status = 3
|
||||
@ -1239,7 +1245,7 @@ function ytb_unlock_test()
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and not all_test and ((old_region ~= "" and region ~= old_region) or (old_region == "")) then
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
end
|
||||
end
|
||||
return region, old_region
|
||||
@ -1248,15 +1254,15 @@ end
|
||||
function tvb_anywhere_unlock_test()
|
||||
status = 0
|
||||
local url = "https://uapisfm.tvbanywhere.com.sg/geoip/check/platform/android"
|
||||
local httpcode = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{http_code} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
local httpcode = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{http_code} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
local region = ""
|
||||
local old_region = ""
|
||||
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_tvb_anywhere") or ""
|
||||
local regex = UCI:get("openclash", "config", "stream_auto_select_region_key_tvb_anywhere") or ""
|
||||
if tonumber(httpcode) == 200 then
|
||||
status = 1
|
||||
local data = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
local data = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
if data then
|
||||
data = json.parse(data)
|
||||
data = JSON.parse(data)
|
||||
end
|
||||
if data and data.allow_in_this_country then
|
||||
status = 2
|
||||
@ -1264,8 +1270,8 @@ function tvb_anywhere_unlock_test()
|
||||
region = string.upper(data.country)
|
||||
end
|
||||
if region then
|
||||
if fs.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = fs.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
end
|
||||
if not datamatch(region, regex) then
|
||||
status = 3
|
||||
@ -1273,7 +1279,7 @@ function tvb_anywhere_unlock_test()
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and not all_test and ((old_region ~= "" and region ~= old_region) or (old_region == "")) then
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -1284,19 +1290,19 @@ end
|
||||
function prime_video_unlock_test()
|
||||
status = 0
|
||||
local url = "https://www.primevideo.com"
|
||||
local httpcode = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{http_code} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
local httpcode = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{http_code} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
local region
|
||||
local old_region = ""
|
||||
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_prime_video") or ""
|
||||
local regex = UCI:get("openclash", "config", "stream_auto_select_region_key_prime_video") or ""
|
||||
if tonumber(httpcode) == 200 then
|
||||
status = 1
|
||||
local data = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
local data = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
if data then
|
||||
region = string.sub(string.match(data, "\"currentTerritory\":\"%a+\""), 21, -2)
|
||||
if region then
|
||||
status = 2
|
||||
if fs.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = fs.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
end
|
||||
if not datamatch(region, regex) then
|
||||
status = 3
|
||||
@ -1304,7 +1310,7 @@ function prime_video_unlock_test()
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and not all_test and ((old_region ~= "" and region ~= old_region) or (old_region == "")) then
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
end
|
||||
return region, old_region
|
||||
end
|
||||
@ -1317,15 +1323,15 @@ function dazn_unlock_test()
|
||||
status = 0
|
||||
local url = "https://www.dazn.com"
|
||||
local url2 = "https://startup.core.indazn.com/misl/v5/Startup"
|
||||
local httpcode = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{http_code} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
local httpcode = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{http_code} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
local region
|
||||
local old_region = ""
|
||||
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_dazn") or ""
|
||||
local regex = UCI:get("openclash", "config", "stream_auto_select_region_key_dazn") or ""
|
||||
if tonumber(httpcode) == 200 then
|
||||
status = 1
|
||||
local data = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' -X POST -d '{\"LandingPageKey\":\"generic\",\"Languages\":\"zh-CN,zh,en\",\"Platform\":\"web\",\"PlatformAttributes\":{},\"Manufacturer\":\"\",\"PromoCode\":\"\",\"Version\":\"2\"}' %s", UA, url2))
|
||||
local data = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' -X POST -d '{\"LandingPageKey\":\"generic\",\"Languages\":\"zh-CN,zh,en\",\"Platform\":\"web\",\"PlatformAttributes\":{},\"Manufacturer\":\"\",\"PromoCode\":\"\",\"Version\":\"2\"}' %s", UA, url2))
|
||||
if data then
|
||||
data = json.parse(data)
|
||||
data = JSON.parse(data)
|
||||
end
|
||||
if data and data.Region and data.Region.isAllowed then
|
||||
status = 2
|
||||
@ -1333,8 +1339,8 @@ function dazn_unlock_test()
|
||||
region = string.upper(data.Region.GeolocatedCountry)
|
||||
end
|
||||
if region then
|
||||
if fs.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = fs.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
end
|
||||
if not datamatch(region, regex) then
|
||||
status = 3
|
||||
@ -1342,7 +1348,7 @@ function dazn_unlock_test()
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and not all_test and ((old_region ~= "" and region ~= old_region) or (old_region == "")) then
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -1355,18 +1361,18 @@ function paramount_plus_unlock_test()
|
||||
local url = "https://www.paramountplus.com/"
|
||||
local region
|
||||
local old_region = ""
|
||||
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_paramount_plus") or ""
|
||||
local data = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{json} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
data = json.parse(data)
|
||||
local regex = UCI:get("openclash", "config", "stream_auto_select_region_key_paramount_plus") or ""
|
||||
local data = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{json} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
data = JSON.parse(data)
|
||||
if data and tonumber(data.http_code) == 200 then
|
||||
status = 1
|
||||
if not string.find(data.url_effective, "intl") then
|
||||
status = 2
|
||||
data = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
data = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
|
||||
region = string.upper(string.sub(string.match(data, "\"siteEdition\":\"%a+|%a+\""), 19, -1)) or string.upper(string.sub(string.match(data, "property: '%a+'"), 12, -2))
|
||||
if region then
|
||||
if fs.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = fs.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
end
|
||||
if not datamatch(region, regex) then
|
||||
status = 3
|
||||
@ -1374,7 +1380,7 @@ function paramount_plus_unlock_test()
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and not all_test and ((old_region ~= "" and region ~= old_region) or (old_region == "")) then
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
end
|
||||
return region, old_region
|
||||
end
|
||||
@ -1388,19 +1394,19 @@ function discovery_plus_unlock_test()
|
||||
local url1 = "https://us1-prod-direct.discoveryplus.com/users/me"
|
||||
local region
|
||||
local old_region = ""
|
||||
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_discovery_plus") or ""
|
||||
local token = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' '%s'", UA, url))
|
||||
if token and json.parse(token) and json.parse(token).data and json.parse(token).data.attributes then
|
||||
local regex = UCI:get("openclash", "config", "stream_auto_select_region_key_discovery_plus") or ""
|
||||
local token = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' '%s'", UA, url))
|
||||
if token and JSON.parse(token) and JSON.parse(token).data and JSON.parse(token).data.attributes then
|
||||
status = 1
|
||||
token = json.parse(token).data.attributes.token
|
||||
token = JSON.parse(token).data.attributes.token
|
||||
local cookie = string.format("-b \"_gcl_au=1.1.858579665.1632206782; _rdt_uuid=1632206782474.6a9ad4f2-8ef7-4a49-9d60-e071bce45e88; _scid=d154b864-8b7e-4f46-90e0-8b56cff67d05; _pin_unauth=dWlkPU1qWTRNR1ZoTlRBdE1tSXdNaTAwTW1Nd0xUbGxORFV0WWpZMU0yVXdPV1l6WldFeQ; _sctr=1|1632153600000; aam_fw=aam%%3D9354365%%3Baam%%3D9040990; aam_uuid=24382050115125439381416006538140778858; st=%s; gi_ls=0; _uetvid=a25161a01aa711ec92d47775379d5e4d; AMCV_BC501253513148ED0A490D45%%40AdobeOrg=-1124106680%%7CMCIDTS%%7C18894%%7CMCMID%%7C24223296309793747161435877577673078228%%7CMCAAMLH-1633011393%%7C9%%7CMCAAMB-1633011393%%7CRKhpRz8krg2tLO6pguXWp5olkAcUniQYPHaMWWgdJ3xzPWQmdj0y%%7CMCOPTOUT-1632413793s%%7CNONE%%7CvVersion%%7C5.2.0; ass=19ef15da-95d6-4b1d-8fa2-e9e099c9cc38.1632408400.1632406594\"", token)
|
||||
local data = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s %s", UA, cookie, url1))
|
||||
if data and json.parse(data) and json.parse(data).data and json.parse(data).data.attributes and json.parse(data).data.attributes.currentLocationSovereignTerritory then
|
||||
region = string.upper(json.parse(data).data.attributes.currentLocationTerritory) or string.upper(json.parse(data).data.attributes.currentLocationSovereignTerritory)
|
||||
local data = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s %s", UA, cookie, url1))
|
||||
if data and JSON.parse(data) and JSON.parse(data).data and JSON.parse(data).data.attributes and JSON.parse(data).data.attributes.currentLocationSovereignTerritory then
|
||||
region = string.upper(JSON.parse(data).data.attributes.currentLocationTerritory) or string.upper(JSON.parse(data).data.attributes.currentLocationSovereignTerritory)
|
||||
if region then
|
||||
status = 2
|
||||
if fs.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = fs.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
end
|
||||
if not datamatch(region, regex) then
|
||||
status = 3
|
||||
@ -1408,7 +1414,7 @@ function discovery_plus_unlock_test()
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and not all_test and ((old_region ~= "" and region ~= old_region) or (old_region == "")) then
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
end
|
||||
return region, old_region
|
||||
end
|
||||
@ -1418,9 +1424,9 @@ end
|
||||
|
||||
function bilibili_unlock_test()
|
||||
status = 0
|
||||
local randsession = luci.sys.exec("cat /dev/urandom | head -n 32 | md5sum | head -c 32")
|
||||
local randsession = SYS.exec("cat /dev/urandom | head -n 32 | md5sum | head -c 32")
|
||||
local region, httpcode, data, url
|
||||
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_bilibili") or ""
|
||||
local regex = UCI:get("openclash", "config", "stream_auto_select_region_key_bilibili") or ""
|
||||
local old_region = ""
|
||||
if regex == "HK/MO/TW" then
|
||||
url = string.format("https://api.bilibili.com/pgc/player/web/playurl?avid=18281381&cid=29892777&qn=0&type=&otype=json&ep_id=183799&fourk=1&fnver=0&fnval=16&session=%s&module=bangumi", randsession)
|
||||
@ -1432,23 +1438,23 @@ function bilibili_unlock_test()
|
||||
url = string.format("https://api.bilibili.com/pgc/player/web/playurl?avid=82846771&qn=0&type=&otype=json&ep_id=307247&fourk=1&fnver=0&fnval=16&session=%s&module=bangumi", randsession)
|
||||
region = "CN"
|
||||
end
|
||||
httpcode = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{http_code} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' '%s'", UA, url))
|
||||
httpcode = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{http_code} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' '%s'", UA, url))
|
||||
if httpcode and tonumber(httpcode) == 200 then
|
||||
data = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' '%s'", UA, url))
|
||||
data = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' '%s'", UA, url))
|
||||
if data then
|
||||
data = json.parse(data)
|
||||
data = JSON.parse(data)
|
||||
status = 1
|
||||
if data.code then
|
||||
if data.code == 0 then
|
||||
status = 2
|
||||
if fs.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = fs.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
end
|
||||
if old_region ~= "" and region ~= old_region and not all_test then
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and not all_test and ((old_region ~= "" and region ~= old_region) or (old_region == "")) then
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
end
|
||||
return region, old_region
|
||||
end
|
||||
@ -1461,13 +1467,13 @@ function google_not_cn_test()
|
||||
status = 0
|
||||
local url = "https://timeline.google.com"
|
||||
local region
|
||||
local httpcode = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{http_code} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' '%s'", UA, url))
|
||||
local httpcode = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 10 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{http_code} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' '%s'", UA, url))
|
||||
if httpcode then
|
||||
if tonumber(httpcode) == 200 then
|
||||
status = 2
|
||||
region = "NOT CN"
|
||||
if not all_test then
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), tested_proxy[-1])
|
||||
FS.writefile(string.format("/tmp/openclash_%s_region", type), tested_proxy[-1])
|
||||
end
|
||||
else
|
||||
region = "CN"
|
||||
|
@ -34,17 +34,17 @@ if [ -n "$OP_CV" ] && [ -n "$OP_LV" ] && [ "$(expr "$OP_LV" \> "$OP_CV")" -eq 1
|
||||
LOG_OUT "Start Downloading【OpenClash - v$LAST_VER】..."
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 "$github_address_mod"gh/vernesong/OpenClash@"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/openclash.ipk" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/vernesong/OpenClash@"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/openclash.ipk" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 https://raw.fastgit.org/vernesong/OpenClash/"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/openclash.ipk" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/vernesong/OpenClash/"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/openclash.ipk" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/openclash.ipk" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/openclash.ipk" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/openclash.ipk" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/openclash.ipk" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
if [ "${PIPESTATUS[0]}" -ne 0 ]; then
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/o/op/openclash/"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/openclash.ipk" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/o/op/openclash/"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/openclash.ipk" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl_status=${PIPESTATUS[0]}
|
||||
else
|
||||
curl_status=0
|
||||
|
@ -0,0 +1,13 @@
|
||||
#!/usr/bin/lua
|
||||
|
||||
require "nixio"
|
||||
require "luci.util"
|
||||
require "luci.sys"
|
||||
local HTTP = require "luci.http"
|
||||
local url = arg[1]
|
||||
|
||||
if not url then os.exit(0) end
|
||||
|
||||
print(HTTP.urlencode(url) or url)
|
||||
|
||||
os.exit(0)
|
@ -1,5 +1,6 @@
|
||||
#!/bin/bash
|
||||
CKTIME=$(date "+%Y-%m-%d-%H")
|
||||
TIME=$(date "+%Y-%m-%d-%H")
|
||||
CHTIME=$(date "+%Y-%m-%d-%H" -r "/tmp/openclash_last_version")
|
||||
LAST_OPVER="/tmp/openclash_last_version"
|
||||
RELEASE_BRANCH=$(uci -q get openclash.config.release_branch || echo "master")
|
||||
OP_CV=$(rm -f /var/lock/opkg.lock && opkg status luci-app-openclash 2>/dev/null |grep 'Version' |awk -F '-' '{print $1}' |awk -F 'Version: ' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null)
|
||||
@ -7,21 +8,21 @@ OP_LV=$(sed -n 1p $LAST_OPVER 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '
|
||||
github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0)
|
||||
LOG_FILE="/tmp/openclash.log"
|
||||
|
||||
if [ "$CKTIME" != "$(grep "CheckTime" $LAST_OPVER 2>/dev/null |awk -F ':' '{print $2}')" ]; then
|
||||
if [ "$TIME" != "$CHTIME" ]; then
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
|
||||
curl -SsL -m 10 "$github_address_mod"gh/vernesong/OpenClash@"$RELEASE_BRANCH"/version -o $LAST_OPVER 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$LAST_OPVER" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/vernesong/OpenClash@"$RELEASE_BRANCH"/version -o $LAST_OPVER 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$LAST_OPVER" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
curl -SsL -m 10 https://raw.fastgit.org/vernesong/OpenClash/"$RELEASE_BRANCH"/version -o $LAST_OPVER 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$LAST_OPVER" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/vernesong/OpenClash/"$RELEASE_BRANCH"/version -o $LAST_OPVER 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$LAST_OPVER" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -SsL -m 10 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/version -o $LAST_OPVER 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$LAST_OPVER" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/version -o $LAST_OPVER 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$LAST_OPVER" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -SsL -m 10 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/version -o $LAST_OPVER 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$LAST_OPVER" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/version -o $LAST_OPVER 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$LAST_OPVER" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
|
||||
if [ "${PIPESTATUS[0]}" -ne 0 ] || [ -n "$(cat $LAST_OPVER |grep '<html>')" ]; then
|
||||
curl -SsL -m 10 --retry 2 https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/o/op/openclash/"$RELEASE_BRANCH"/version -o $LAST_OPVER 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$LAST_OPVER" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl -SsL --connect-timeout 10 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/o/op/openclash/"$RELEASE_BRANCH"/version -o $LAST_OPVER 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$LAST_OPVER" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl_status=${PIPESTATUS[0]}
|
||||
else
|
||||
curl_status=0
|
||||
@ -29,19 +30,18 @@ if [ "$CKTIME" != "$(grep "CheckTime" $LAST_OPVER 2>/dev/null |awk -F ':' '{prin
|
||||
|
||||
if [ "$curl_status" -eq 0 ] && [ -z "$(cat $LAST_OPVER |grep '<html>')" ]; then
|
||||
OP_LV=$(sed -n 1p $LAST_OPVER 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null)
|
||||
if [ "$(expr "$OP_CV" \>= "$OP_LV")" -eq 1 ]; then
|
||||
sed -i "/^https:/i\CheckTime:${CKTIME}" "$LAST_OPVER" 2>/dev/null
|
||||
if [ "$(expr "$OP_CV" \>= "$OP_LV")" = "1" ]; then
|
||||
sed -i '/^https:/,$d' $LAST_OPVER
|
||||
elif [ "$(expr "$OP_LV" \> "$OP_CV")" -eq 1 ] && [ -n "$OP_LV" ]; then
|
||||
sed -i "/^https:/i\CheckTime:${CKTIME}" "$LAST_OPVER" 2>/dev/null
|
||||
elif [ "$(expr "$OP_LV" \> "$OP_CV")" = "1" ] && [ -n "$OP_LV" ]; then
|
||||
exit 2
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
else
|
||||
rm -rf "$LAST_OPVER"
|
||||
fi
|
||||
elif [ "$(expr "$OP_CV" \>= "$OP_LV")" -eq 1 ]; then
|
||||
sed -i '/^CheckTime:/,$d' $LAST_OPVER
|
||||
echo "CheckTime:$CKTIME" >> $LAST_OPVER
|
||||
elif [ "$(expr "$OP_LV" \> "$OP_CV")" -eq 1 ] && [ -n "$OP_LV" ]; then
|
||||
elif [ "$(expr "$OP_LV" \> "$OP_CV")" = "1" ] && [ -n "$OP_LV" ]; then
|
||||
exit 2
|
||||
else
|
||||
exit 0
|
||||
fi 2>/dev/null
|
||||
|
@ -30,7 +30,7 @@ FW4="$(command -v fw4)"
|
||||
|
||||
check_dnsmasq() {
|
||||
if [ -z "$(echo "$en_mode" |grep "redir-host")" ] && [ "$china_ip_route" -eq 1 ]; then
|
||||
if [ "$(nslookup www.baidu.com 127.0.0.1:5353 >/dev/null 2>&1 || echo $?)" != "1" ]; then
|
||||
if [ "$(nslookup www.baidu.com 127.0.0.1:12353 >/dev/null 2>&1 || echo $?)" != "1" ]; then
|
||||
DNSPORT=$(uci -q get dhcp.@dnsmasq[0].port)
|
||||
if [ -z "$DNSPORT" ]; then
|
||||
DNSPORT=$(netstat -nlp |grep -E '127.0.0.1:.*dnsmasq' |awk -F '127.0.0.1:' '{print $2}' |awk '{print $1}' |head -1 || echo 53)
|
||||
|
@ -37,6 +37,7 @@ rules:
|
||||
- RULE-SET,KKTV,Global TV
|
||||
- RULE-SET,Line TV,Global TV
|
||||
- RULE-SET,myTV SUPER,Global TV
|
||||
- RULE-SET,Niconico,Global TV
|
||||
- RULE-SET,Pandora,Global TV
|
||||
- RULE-SET,PBS,Global TV
|
||||
- RULE-SET,Pornhub,Global TV
|
||||
@ -99,6 +100,7 @@ script:
|
||||
"KKTV": "Global TV",
|
||||
"Line TV": "Global TV",
|
||||
"myTV SUPER": "Global TV",
|
||||
"Niconico": "Global TV",
|
||||
"Pandora": "Global TV",
|
||||
"PBS": "Global TV",
|
||||
"Pornhub": "Global TV",
|
||||
@ -122,12 +124,11 @@ script:
|
||||
|
||||
port = int(metadata["dst_port"])
|
||||
|
||||
if metadata["network"] == "UDP":
|
||||
if port == 443:
|
||||
ctx.log('[Script] matched QUIC traffic use reject')
|
||||
return "REJECT"
|
||||
if metadata["network"] == "UDP" and port == 443:
|
||||
ctx.log('[Script] matched QUIC traffic use reject')
|
||||
return "REJECT"
|
||||
|
||||
port_list = [21, 22, 23, 53, 80, 123, 143, 194, 443, 465, 587, 853, 993, 995, 998, 2052, 2053, 2082, 2083, 2086, 2095, 2096, 5222, 5228, 5229, 5230, 8080, 8443, 8880, 8888, 8889]
|
||||
port_list = [21, 22, 23, 53, 80, 123, 143, 194, 443, 465, 587, 853, 993, 995, 998, 2052, 2053, 2082, 2083, 2086, 2095, 2096, 3389, 5222, 5228, 5229, 5230, 8080, 8443, 8880, 8888, 8889]
|
||||
if port not in port_list:
|
||||
ctx.log('[Script] not common port use direct')
|
||||
return "DIRECT"
|
||||
@ -139,13 +140,11 @@ script:
|
||||
if ctx.rule_providers[ruleset].match(metadata):
|
||||
return ruleset_action[ruleset]
|
||||
|
||||
if metadata["dst_ip"] == "":
|
||||
return "DIRECT"
|
||||
|
||||
code = ctx.geoip(metadata["dst_ip"])
|
||||
if code == "CN":
|
||||
ctx.log('[Script] Geoip CN')
|
||||
return "Domestic"
|
||||
if metadata["dst_ip"] != "":
|
||||
code = ctx.geoip(metadata["dst_ip"])
|
||||
if code == "CN":
|
||||
ctx.log('[Script] Geoip CN')
|
||||
return "Domestic"
|
||||
|
||||
ctx.log('[Script] FINAL')
|
||||
return "Others"
|
||||
@ -378,6 +377,12 @@ rule-providers:
|
||||
url: https://fastly.jsdelivr.net/gh/dler-io/Rules@main/Clash/Provider/Media/myTV%20SUPER.yaml
|
||||
path: "./Rules/Media/myTV_SUPER"
|
||||
interval: 86400
|
||||
Niconico:
|
||||
type: http
|
||||
behavior: classical
|
||||
url: https://fastly.jsdelivr.net/gh/dler-io/Rules@main/Clash/Provider/Media/Niconico.yaml
|
||||
path: "./Rules/Media/Niconico"
|
||||
interval: 86400
|
||||
Pandora:
|
||||
type: http
|
||||
behavior: classical
|
||||
|
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
@ -8,10 +8,10 @@
|
||||
<meta name="description" content="Clash web port" />
|
||||
<!--meta name="external-controller" content="http://secret@example.com:9090"-->
|
||||
<title>Clash</title>
|
||||
<script type="module" crossorigin src="./assets/index.4db75562.js"></script>
|
||||
<link rel="modulepreload" crossorigin href="./assets/vendor.0ded7ffb.js">
|
||||
<script type="module" crossorigin src="./assets/index.4e943808.js"></script>
|
||||
<link rel="modulepreload" crossorigin href="./assets/vendor.df6254b9.js">
|
||||
<link rel="stylesheet" href="./assets/index.7e15a32d.css">
|
||||
<link rel="manifest" href="./manifest.webmanifest"><script>if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('./sw.js', { scope: './' })})}</script></head>
|
||||
<link rel="manifest" href="./manifest.webmanifest"><script id="vite-plugin-pwa:inline-sw">if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('./sw.js', { scope: './' })})}</script></head>
|
||||
<body>
|
||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||
<div id="root"></div>
|
||||
|
@ -1 +1 @@
|
||||
if(!self.define){let e,s={};const n=(n,i)=>(n=new URL(n+".js",i).href,s[n]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()})).then((()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didn’t register its module`);return e})));self.define=(i,t)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(s[r])return;let d={};const o=e=>n(e,r),l={module:{uri:r},exports:d,require:o};s[r]=Promise.all(i.map((e=>l[e]||o(e)))).then((e=>(t(...e),d)))}}define(["./workbox-74eda642"],(function(e){"use strict";self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()})),e.precacheAndRoute([{url:"assets/index.4db75562.js",revision:null},{url:"assets/index.7e15a32d.css",revision:null},{url:"assets/vendor.0ded7ffb.js",revision:null},{url:"index.html",revision:"ccb924b96d21db1a3954a64d986da4e2"},{url:"manifest.webmanifest",revision:"d3dd1da0aa7614180924343e65244285"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))}));
|
||||
if(!self.define){let e,s={};const n=(n,i)=>(n=new URL(n+".js",i).href,s[n]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()})).then((()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didn’t register its module`);return e})));self.define=(i,t)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(s[r])return;let o={};const l=e=>n(e,r),d={module:{uri:r},exports:o,require:l};s[r]=Promise.all(i.map((e=>d[e]||l(e)))).then((e=>(t(...e),o)))}}define(["./workbox-e0782b83"],(function(e){"use strict";self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()})),e.precacheAndRoute([{url:"assets/index.4e943808.js",revision:null},{url:"assets/index.7e15a32d.css",revision:null},{url:"assets/vendor.df6254b9.js",revision:null},{url:"index.html",revision:"691c61e1c61e56c669b5ef67e4b11e33"},{url:"manifest.webmanifest",revision:"d3dd1da0aa7614180924343e65244285"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))}));
|
||||
|
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@
|
||||
._root_v2s4h_1,._section_v2s4h_2{display:grid;grid-template-columns:repeat(auto-fill,minmax(345px,1fr));max-width:900px;gap:5px}@media screen and (min-width: 30em){._root_v2s4h_1,._section_v2s4h_2{gap:15px}}._root_v2s4h_1,._section_v2s4h_2{padding:6px 15px 10px}@media screen and (min-width: 30em){._root_v2s4h_1,._section_v2s4h_2{padding:10px 40px 15px}}._wrapSwitch_v2s4h_26{height:40px;display:flex;align-items:center}._sep_v2s4h_32{max-width:900px;padding:0 15px}@media screen and (min-width: 30em){._sep_v2s4h_32{padding:0 40px}}._sep_v2s4h_32>div{border-top:1px dashed #373737}._label_v2s4h_45{padding:11px 0}._fieldset_1ghjp_1{margin:0;padding:0;border:0;display:flex;flex-wrap:wrap}._input_1ghjp_9+._cnt_1ghjp_9{border:1px solid transparent;border-radius:8px;cursor:pointer;margin-right:5px;margin-bottom:5px}._input_1ghjp_9:focus+._cnt_1ghjp_9{border-color:#387cec}._input_1ghjp_9:checked+._cnt_1ghjp_9{border-color:#387cec}
|
@ -1 +0,0 @@
|
||||
._root_1tdl3_1,._section_1tdl3_2{display:grid;grid-template-columns:repeat(auto-fill,minmax(345px,1fr));max-width:900px;gap:5px}@media screen and (min-width: 30em){._root_1tdl3_1,._section_1tdl3_2{gap:15px}}._root_1tdl3_1,._section_1tdl3_2{padding:6px 15px 10px}@media screen and (min-width: 30em){._root_1tdl3_1,._section_1tdl3_2{padding:10px 40px 15px}}._wrapSwitch_1tdl3_26{height:40px;display:flex;align-items:center}._sep_1tdl3_32{max-width:900px;padding:0 15px}@media screen and (min-width: 30em){._sep_1tdl3_32{padding:0 40px}}._sep_1tdl3_32>div{border-top:1px dashed #373737}._label_1tdl3_45{padding:11px 0}._fieldset_1ghjp_1{margin:0;padding:0;border:0;display:flex;flex-wrap:wrap}._input_1ghjp_9+._cnt_1ghjp_9{border:1px solid transparent;border-radius:8px;cursor:pointer;margin-right:5px;margin-bottom:5px}._input_1ghjp_9:focus+._cnt_1ghjp_9{border-color:#387cec}._input_1ghjp_9:checked+._cnt_1ghjp_9{border-color:#387cec}
|
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
.react-tabs{-webkit-tap-highlight-color:transparent}.react-tabs__tab-list{margin:0 0 10px;padding:0 30px}.react-tabs__tab{display:inline-flex;align-items:center;border:1px solid transparent;border-radius:5px;bottom:-1px;position:relative;list-style:none;padding:6px 10px;cursor:pointer;font-size:1.2em;opacity:.5}.react-tabs__tab--selected{opacity:1}.react-tabs__tab--disabled{color:GrayText;cursor:default}.react-tabs__tab:focus{border-color:#0188fe;outline:none}.react-tabs__tab:focus:after{content:"";position:absolute}.react-tabs__tab-panel{display:none}.react-tabs__tab-panel--selected{display:block}._placeHolder_12xws_1{height:100%;display:flex;align-items:center;justify-content:center;color:var(--color-background);opacity:.1}._connQty_12xws_10{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}._inputWrapper_12xws_22{margin:0 30px;width:100%;max-width:350px;justify-self:flex-end}._input_12xws_22{-webkit-appearance:none;background-color:var(--color-input-bg);background-image:none;border-radius:18px;border:1px solid var(--color-input-border);box-sizing:border-box;color:#c1c1c1;display:inline-block;font-size:inherit;height:36px;outline:none;padding:0 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}._tr_198pq_1{display:grid;grid-template-columns:repeat(11,minmax(-webkit-max-content,auto));grid-template-columns:repeat(11,minmax(max-content,auto))}._th_198pq_7{padding:8px 10px;height:50px;background:var(--color-background);position:-webkit-sticky;position:sticky;top:0;font-size:.8em;text-align:center;-webkit-user-select:none;user-select:none;display:flex;align-items:center;justify-content:space-between}._th_198pq_7:hover{color:var(--color-text-highlight)}._td_198pq_24{padding:8px 13px;font-size:.9em;font-family:var(--font-normal)}._td_198pq_24._odd_198pq_30{background:var(--color-row-odd)}._du_198pq_35{text-align:right}._sortIconContainer_198pq_39{display:inline-flex;margin-left:10px;width:16px;height:16px}._rotate180_198pq_46{-webkit-transform:rotate(180deg);transform:rotate(180deg)}._overlay_148w6_1{background-color:#0009}._cnt_148w6_5{background-color:var(--bg-modal);color:var(--color-text);max-width:300px;line-height:1.4;-webkit-transform:translate(-50%,-50%) scale(1.2);transform:translate(-50%,-50%) scale(1.2);opacity:.6;transition:all .3s ease}._afterOpen_148w6_15{opacity:1;-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}._btngrp_148w6_20{display:flex;align-items:center;justify-content:center;margin-top:30px}
|
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 @@
|
||||
.react-tabs{-webkit-tap-highlight-color:transparent}.react-tabs__tab-list{margin:0 0 10px;padding:0 30px}.react-tabs__tab{display:inline-flex;align-items:center;border:1px solid transparent;border-radius:5px;bottom:-1px;position:relative;list-style:none;padding:6px 10px;cursor:pointer;font-size:1.2em;opacity:.5}.react-tabs__tab--selected{opacity:1}.react-tabs__tab--disabled{color:GrayText;cursor:default}.react-tabs__tab:focus{border-color:#0188fe;outline:none}.react-tabs__tab:focus:after{content:"";position:absolute}.react-tabs__tab-panel{display:none}.react-tabs__tab-panel--selected{display:block}._placeHolder_12xws_1{height:100%;display:flex;align-items:center;justify-content:center;color:var(--color-background);opacity:.1}._connQty_12xws_10{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}._inputWrapper_12xws_22{margin:0 30px;width:100%;max-width:350px;justify-self:flex-end}._input_12xws_22{-webkit-appearance:none;background-color:var(--color-input-bg);background-image:none;border-radius:18px;border:1px solid var(--color-input-border);box-sizing:border-box;color:#c1c1c1;display:inline-block;font-size:inherit;height:36px;outline:none;padding:0 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}._tr_daq0k_1{display:grid;grid-template-columns:repeat(var(--col-count, 11),minmax(-webkit-max-content,auto));grid-template-columns:repeat(var(--col-count, 11),minmax(max-content,auto))}._th_daq0k_6{padding:8px 10px;height:50px;background:var(--color-background);position:-webkit-sticky;position:sticky;top:0;font-size:.8em;text-align:center;-webkit-user-select:none;user-select:none;display:flex;align-items:center;justify-content:space-between}._th_daq0k_6:hover{color:var(--color-text-highlight)}._td_daq0k_23{padding:8px 13px;font-size:.9em;font-family:var(--font-normal)}._td_daq0k_23._odd_daq0k_29{background:var(--color-row-odd)}._du_daq0k_34{text-align:right}._sortIconContainer_daq0k_38{display:inline-flex;margin-left:10px;width:16px;height:16px}._rotate180_daq0k_45{-webkit-transform:rotate(180deg);transform:rotate(180deg)}._overlay_148w6_1{background-color:#0009}._cnt_148w6_5{background-color:var(--bg-modal);color:var(--color-text);max-width:300px;line-height:1.4;-webkit-transform:translate(-50%,-50%) scale(1.2);transform:translate(-50%,-50%) scale(1.2);opacity:.6;transition:all .3s ease}._afterOpen_148w6_15{opacity:1;-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}._btngrp_148w6_20{display:flex;align-items:center;justify-content:center;margin-top:30px}
|
@ -1 +1 @@
|
||||
import{j as e,b,h as y,r as l}from"./index.1428ab75.js";const F="_spining_4i8sg_1",M="_spining_keyframes_4i8sg_1",j={spining:F,spining_keyframes:M},{useState:v}=y;function B({children:s}){return e("span",{className:j.spining,children:s})}const H={right:10,bottom:10},L=({children:s,...n})=>e("button",{type:"button",...n,className:"rtf--ab",children:s}),E=({children:s,...n})=>e("button",{type:"button",className:"rtf--mb",...n,children:s}),O={bottom:24,right:24},R=({event:s="hover",style:n=O,alwaysShowTitle:i=!1,children:f,icon:g,mainButtonStyles:h,onClick:p,text:d,..._})=>{const[a,r]=v(!1),c=i||!a,u=()=>r(!0),m=()=>r(!1),x=()=>s==="hover"&&u(),k=()=>s==="hover"&&m(),N=t=>p?p(t):(t.persist(),s==="click"?a?m():u():null),$=(t,o)=>{t.persist(),r(!1),setTimeout(()=>{o(t)},1)},C=()=>l.exports.Children.map(f,(t,o)=>l.exports.isValidElement(t)?b("li",{className:`rtf--ab__c ${"top"in n?"top":""}`,children:[l.exports.cloneElement(t,{"data-testid":`action-button-${o}`,"aria-label":t.props.text||`Menu button ${o+1}`,"aria-hidden":c,tabIndex:a?0:-1,...t.props,onClick:I=>{t.props.onClick&&$(I,t.props.onClick)}}),t.props.text&&e("span",{className:`${"right"in n?"right":""} ${i?"always-show":""}`,"aria-hidden":c,children:t.props.text})]}):null);return e("ul",{onMouseEnter:x,onMouseLeave:k,className:`rtf ${a?"open":"closed"}`,"data-testid":"fab",style:n,..._,children:b("li",{className:"rtf--mb__c",children:[e(E,{onClick:N,style:h,"data-testid":"main-button",role:"button","aria-label":"Floating menu",tabIndex:0,children:g}),d&&e("span",{className:`${"right"in n?"right":""} ${i?"always-show":""}`,"aria-hidden":c,children:d}),e("ul",{children:C()})]})})};export{L as A,R as F,B as I,H as p};
|
||||
import{j as e,b,i as y,r as l}from"./index.171f553a.js";const F="_spining_4i8sg_1",M="_spining_keyframes_4i8sg_1",j={spining:F,spining_keyframes:M},{useState:v}=y;function B({children:s}){return e("span",{className:j.spining,children:s})}const H={right:10,bottom:10},L=({children:s,...n})=>e("button",{type:"button",...n,className:"rtf--ab",children:s}),E=({children:s,...n})=>e("button",{type:"button",className:"rtf--mb",...n,children:s}),O={bottom:24,right:24},R=({event:s="hover",style:n=O,alwaysShowTitle:o=!1,children:f,icon:g,mainButtonStyles:h,onClick:p,text:d,..._})=>{const[a,r]=v(!1),c=o||!a,u=()=>r(!0),m=()=>r(!1),x=()=>s==="hover"&&u(),k=()=>s==="hover"&&m(),N=t=>p?p(t):(t.persist(),s==="click"?a?m():u():null),$=(t,i)=>{t.persist(),r(!1),setTimeout(()=>{i(t)},1)},C=()=>l.exports.Children.map(f,(t,i)=>l.exports.isValidElement(t)?b("li",{className:`rtf--ab__c ${"top"in n?"top":""}`,children:[l.exports.cloneElement(t,{"data-testid":`action-button-${i}`,"aria-label":t.props.text||`Menu button ${i+1}`,"aria-hidden":c,tabIndex:a?0:-1,...t.props,onClick:I=>{t.props.onClick&&$(I,t.props.onClick)}}),t.props.text&&e("span",{className:`${"right"in n?"right":""} ${o?"always-show":""}`,"aria-hidden":c,children:t.props.text})]}):null);return e("ul",{onMouseEnter:x,onMouseLeave:k,className:`rtf ${a?"open":"closed"}`,"data-testid":"fab",style:n,..._,children:b("li",{className:"rtf--mb__c",children:[e(E,{onClick:N,style:h,"data-testid":"main-button",role:"button","aria-label":"Floating menu",tabIndex:0,children:g}),d&&e("span",{className:`${"right"in n?"right":""} ${o?"always-show":""}`,"aria-hidden":c,children:d}),e("ul",{children:C()})]})})};export{L as A,R as F,B as I,H as p};
|
@ -1 +0,0 @@
|
||||
import{r as m,b as l,j as t,i as u,d as y,H as T,J as b,x as L,K as P,u as R,C as N,S as z,L as C,N as W,g as w,O as k,h as j,c as I}from"./index.1428ab75.js";import{a as O,F}from"./index.esm.7b716043.js";import{r as M,s as $,f as H}from"./logs.6e20f0cf.js";import{d as A}from"./debounce.c2d20996.js";import{u as B}from"./useRemainingViewPortHeight.2e9a6590.js";import{F as D,p as E}from"./Fab.4f6fab8b.js";import{P as K,a as q}from"./play.59a01dbd.js";function J(e,n){if(e==null)return{};var r=V(e,n),a,o;if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(o=0;o<s.length;o++)a=s[o],!(n.indexOf(a)>=0)&&(!Object.prototype.propertyIsEnumerable.call(e,a)||(r[a]=e[a]))}return r}function V(e,n){if(e==null)return{};var r={},a=Object.keys(e),o,s;for(s=0;s<a.length;s++)o=a[s],!(n.indexOf(o)>=0)&&(r[o]=e[o]);return r}var f=m.exports.forwardRef(function(e,n){var r=e.color,a=r===void 0?"currentColor":r,o=e.size,s=o===void 0?24:o,p=J(e,["color","size"]);return l("svg",{ref:n,xmlns:"http://www.w3.org/2000/svg",width:s,height:s,viewBox:"0 0 24 24",fill:"none",stroke:a,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...p,children:[t("circle",{cx:"11",cy:"11",r:"8"}),t("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]})});f.propTypes={color:u.exports.string,size:u.exports.oneOfType([u.exports.string,u.exports.number])};f.displayName="Search";const Y=f,G="_RuleSearch_1oz2t_1",Q="_RuleSearchContainer_1oz2t_5",U="_inputWrapper_1oz2t_10",X="_input_1oz2t_10",Z="_iconWrapper_1oz2t_35",g={RuleSearch:G,RuleSearchContainer:Q,inputWrapper:U,input:X,iconWrapper:Z};function ee({dispatch:e,searchText:n,updateSearchText:r}){const[a,o]=m.exports.useState(n),s=m.exports.useCallback(i=>{e(r(i))},[e,r]),p=m.exports.useMemo(()=>A(s,300),[s]),h=i=>{o(i.target.value),p(i.target.value)};return t("div",{className:g.RuleSearch,children:l("div",{className:g.RuleSearchContainer,children:[t("div",{className:g.inputWrapper,children:t("input",{type:"text",value:a,onChange:h,className:g.input})}),t("div",{className:g.iconWrapper,children:t(Y,{size:20})})]})})}const te=e=>({searchText:T(e),updateSearchText:b}),oe=y(te)(ee),re="_logMeta_7a1x3_1",ae="_logType_7a1x3_8",ne="_logTime_7a1x3_18",se="_logText_7a1x3_24",ce="_logsWrapper_7a1x3_37",ie="_logPlaceholder_7a1x3_51",le="_logPlaceholderIcon_7a1x3_64",pe="_search_7a1x3_68",c={logMeta:re,logType:ae,logTime:ne,logText:se,logsWrapper:ce,logPlaceholder:ie,logPlaceholderIcon:le,search:pe},{useCallback:v,memo:ge,useEffect:he}=j,_=30,de={debug:"#28792c",info:"var(--bg-log-info-tag)",warning:"#b99105",error:"#c11c1c"};function ue({time:e,even:n,payload:r,type:a}){const o=I({even:n},"log");return t("div",{className:o,children:l("div",{className:c.logMeta,children:[t("div",{className:c.logTime,children:e}),t("div",{className:c.logType,style:{backgroundColor:de[a]},children:a}),t("div",{className:c.logText,children:r})]})})}function me(e,n){return n[e].id}const _e=ge(({index:e,style:n,data:r})=>{const a=r[e];return t("div",{style:n,children:t(ue,{...a})})},O);function fe({dispatch:e,logLevel:n,apiConfig:r,logs:a,logStreamingPaused:o}){const s=L(),p=v(()=>{o?M({...r,logLevel:n}):$(),s.app.updateAppConfig("logStreamingPaused",!o)},[r,n,o,s.app]),h=v(S=>e(P(S)),[e]);he(()=>{H({...r,logLevel:n},h)},[r,n,h]);const[i,x]=B(),{t:d}=R();return l("div",{children:[t(N,{title:d("Logs")}),t("div",{className:c.search,children:t(oe,{})}),t("div",{ref:i,style:{paddingBottom:_},children:a.length===0?l("div",{className:c.logPlaceholder,style:{height:x-_},children:[t("div",{className:c.logPlaceholderIcon,children:t(z,{width:200,height:200})}),t("div",{children:d("no_logs")})]}):l("div",{className:c.logsWrapper,children:[t(F,{height:x-_,width:"100%",itemCount:a.length,itemSize:80,itemData:a,itemKey:me,children:_e}),t(D,{icon:o?t(K,{size:16}):t(q,{size:16}),mainButtonStyles:o?{background:"#e74c3c"}:{},style:E,text:d(o?"Resume Refresh":"Pause Refresh"),onClick:p})]})})]})}const xe=e=>({logs:C(e),logLevel:W(e),apiConfig:w(e),logStreamingPaused:k(e)}),Re=y(xe)(fe);export{Re as default};
|
@ -0,0 +1 @@
|
||||
import{r as m,b as l,j as t,k as u,e as y,J as T,K as b,y as P,L,u as R,C as N,S as z,N as C,O as W,h as w,P as k,i as j,c as I}from"./index.171f553a.js";import{a as O,F}from"./index.esm.e4dd1508.js";import{r as M,s as $,f as A}from"./logs.43986220.js";import{d as B}from"./debounce.c2d20996.js";import{u as D}from"./useRemainingViewPortHeight.7395542b.js";import{F as E,p as H}from"./Fab.ef67ff10.js";import{P as K,a as q}from"./play.7b1a5f99.js";function J(e,n){if(e==null)return{};var r=V(e,n),a,o;if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(o=0;o<s.length;o++)a=s[o],!(n.indexOf(a)>=0)&&(!Object.prototype.propertyIsEnumerable.call(e,a)||(r[a]=e[a]))}return r}function V(e,n){if(e==null)return{};var r={},a=Object.keys(e),o,s;for(s=0;s<a.length;s++)o=a[s],!(n.indexOf(o)>=0)&&(r[o]=e[o]);return r}var f=m.exports.forwardRef(function(e,n){var r=e.color,a=r===void 0?"currentColor":r,o=e.size,s=o===void 0?24:o,p=J(e,["color","size"]);return l("svg",{ref:n,xmlns:"http://www.w3.org/2000/svg",width:s,height:s,viewBox:"0 0 24 24",fill:"none",stroke:a,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...p,children:[t("circle",{cx:"11",cy:"11",r:"8"}),t("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]})});f.propTypes={color:u.exports.string,size:u.exports.oneOfType([u.exports.string,u.exports.number])};f.displayName="Search";const Y=f,G="_RuleSearch_1oz2t_1",Q="_RuleSearchContainer_1oz2t_5",U="_inputWrapper_1oz2t_10",X="_input_1oz2t_10",Z="_iconWrapper_1oz2t_35",h={RuleSearch:G,RuleSearchContainer:Q,inputWrapper:U,input:X,iconWrapper:Z};function ee({dispatch:e,searchText:n,updateSearchText:r}){const[a,o]=m.exports.useState(n),s=m.exports.useCallback(i=>{e(r(i))},[e,r]),p=m.exports.useMemo(()=>B(s,300),[s]),g=i=>{o(i.target.value),p(i.target.value)};return t("div",{className:h.RuleSearch,children:l("div",{className:h.RuleSearchContainer,children:[t("div",{className:h.inputWrapper,children:t("input",{type:"text",value:a,onChange:g,className:h.input})}),t("div",{className:h.iconWrapper,children:t(Y,{size:20})})]})})}const te=e=>({searchText:T(e),updateSearchText:b}),oe=y(te)(ee),re="_logMeta_7a1x3_1",ae="_logType_7a1x3_8",ne="_logTime_7a1x3_18",se="_logText_7a1x3_24",ce="_logsWrapper_7a1x3_37",ie="_logPlaceholder_7a1x3_51",le="_logPlaceholderIcon_7a1x3_64",pe="_search_7a1x3_68",c={logMeta:re,logType:ae,logTime:ne,logText:se,logsWrapper:ce,logPlaceholder:ie,logPlaceholderIcon:le,search:pe},{useCallback:v,memo:he,useEffect:ge}=j,_=30,de={debug:"#28792c",info:"var(--bg-log-info-tag)",warning:"#b99105",error:"#c11c1c"};function ue({time:e,even:n,payload:r,type:a}){const o=I({even:n},"log");return t("div",{className:o,children:l("div",{className:c.logMeta,children:[t("div",{className:c.logTime,children:e}),t("div",{className:c.logType,style:{backgroundColor:de[a]},children:a}),t("div",{className:c.logText,children:r})]})})}function me(e,n){return n[e].id}const _e=he(({index:e,style:n,data:r})=>{const a=r[e];return t("div",{style:n,children:t(ue,{...a})})},O);function fe({dispatch:e,logLevel:n,apiConfig:r,logs:a,logStreamingPaused:o}){const s=P(),p=v(()=>{o?M({...r,logLevel:n}):$(),s.app.updateAppConfig("logStreamingPaused",!o)},[r,n,o,s.app]),g=v(S=>e(L(S)),[e]);ge(()=>{A({...r,logLevel:n},g)},[r,n,g]);const[i,x]=D(),{t:d}=R();return l("div",{children:[t(N,{title:d("Logs")}),t("div",{className:c.search,children:t(oe,{})}),t("div",{ref:i,style:{paddingBottom:_},children:a.length===0?l("div",{className:c.logPlaceholder,style:{height:x-_},children:[t("div",{className:c.logPlaceholderIcon,children:t(z,{width:200,height:200})}),t("div",{children:d("no_logs")})]}):l("div",{className:c.logsWrapper,children:[t(F,{height:x-_,width:"100%",itemCount:a.length,itemSize:80,itemData:a,itemKey:me,children:_e}),t(E,{icon:o?t(K,{size:16}):t(q,{size:16}),mainButtonStyles:o?{background:"#e74c3c"}:{},style:H,text:d(o?"Resume Refresh":"Pause Refresh"),onClick:p})]})})]})}const xe=e=>({logs:C(e),logLevel:W(e),apiConfig:w(e),logStreamingPaused:k(e)}),Re=y(xe)(fe);export{Re as default};
|
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 @@
|
||||
import{j as s}from"./index.1428ab75.js";const o="_select_13zm8_1",r={select:o};function i({options:t,selected:c,onChange:l}){return s("select",{className:r.select,value:c,onChange:l,children:t.map(([e,n])=>s("option",{value:e,children:n},e))})}export{i as S};
|
||||
import{j as s}from"./index.171f553a.js";const o="_select_13zm8_1",r={select:o};function i({options:t,selected:c,onChange:l}){return s("select",{className:r.select,value:c,onChange:l,children:t.map(([e,n])=>s("option",{value:e,children:n},e))})}export{i as S};
|
@ -1 +1 @@
|
||||
import{r as u,b as g,j as i,i as c,c as f,V as x,h as d}from"./index.1428ab75.js";import{d as h}from"./debounce.c2d20996.js";function v(t,n){if(t==null)return{};var o=_(t,n),r,e;if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);for(e=0;e<s.length;e++)r=s[e],!(n.indexOf(r)>=0)&&(!Object.prototype.propertyIsEnumerable.call(t,r)||(o[r]=t[r]))}return o}function _(t,n){if(t==null)return{};var o={},r=Object.keys(t),e,s;for(s=0;s<r.length;s++)e=r[s],!(n.indexOf(e)>=0)&&(o[e]=t[e]);return o}var l=u.exports.forwardRef(function(t,n){var o=t.color,r=o===void 0?"currentColor":o,e=t.size,s=e===void 0?24:e,a=v(t,["color","size"]);return g("svg",{ref:n,xmlns:"http://www.w3.org/2000/svg",width:s,height:s,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...a,children:[i("polyline",{points:"23 4 23 10 17 10"}),i("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"})]})});l.propTypes={color:c.exports.string,size:c.exports.oneOfType([c.exports.string,c.exports.number])};l.displayName="RotateCw";const b=l,y="_rotate_1dspl_1",m="_isRotating_1dspl_5",R="_rotating_1dspl_1",p={rotate:y,isRotating:m,rotating:R};function P(t){const n=t.size||16,o=f(p.rotate,{[p.isRotating]:t.isRotating});return i("span",{className:o,children:i(b,{size:n})})}const{useCallback:w,useState:j,useMemo:O}=d;function T(t){const[,n]=x(t),[o,r]=j(""),e=O(()=>h(n,300),[n]);return[w(a=>{r(a.target.value),e(a.target.value)},[e]),o]}const k="_input_16a1f_1",C={input:k};function $(t){const[n,o]=T(t.textAtom);return i("input",{className:C.input,type:"text",value:o,onChange:n,placeholder:t.placeholder})}export{P as R,$ as T,b as a};
|
||||
import{r as u,b as g,j as i,k as c,c as f,V as x,i as d}from"./index.171f553a.js";import{d as h}from"./debounce.c2d20996.js";function v(t,n){if(t==null)return{};var o=_(t,n),r,e;if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);for(e=0;e<s.length;e++)r=s[e],!(n.indexOf(r)>=0)&&(!Object.prototype.propertyIsEnumerable.call(t,r)||(o[r]=t[r]))}return o}function _(t,n){if(t==null)return{};var o={},r=Object.keys(t),e,s;for(s=0;s<r.length;s++)e=r[s],!(n.indexOf(e)>=0)&&(o[e]=t[e]);return o}var l=u.exports.forwardRef(function(t,n){var o=t.color,r=o===void 0?"currentColor":o,e=t.size,s=e===void 0?24:e,a=v(t,["color","size"]);return g("svg",{ref:n,xmlns:"http://www.w3.org/2000/svg",width:s,height:s,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...a,children:[i("polyline",{points:"23 4 23 10 17 10"}),i("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"})]})});l.propTypes={color:c.exports.string,size:c.exports.oneOfType([c.exports.string,c.exports.number])};l.displayName="RotateCw";const b=l,y="_rotate_1dspl_1",m="_isRotating_1dspl_5",R="_rotating_1dspl_1",p={rotate:y,isRotating:m,rotating:R};function P(t){const n=t.size||16,o=f(p.rotate,{[p.isRotating]:t.isRotating});return i("span",{className:o,children:i(b,{size:n})})}const{useCallback:w,useState:j,useMemo:k}=d;function O(t){const[,n]=x(t),[o,r]=j(""),e=k(()=>h(n,300),[n]);return[w(a=>{r(a.target.value),e(a.target.value)},[e]),o]}const T="_input_16a1f_1",C={input:T};function $(t){const[n,o]=O(t.textAtom);return i("input",{className:C.input,type:"text",value:o,onChange:n,placeholder:t.placeholder})}export{P as R,$ as T,b as a};
|
@ -1 +1 @@
|
||||
import{r as f,j as l,i as s}from"./index.1428ab75.js";function c(r,i){if(r==null)return{};var n=v(r,i),o,e;if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(r);for(e=0;e<t.length;e++)o=t[e],!(i.indexOf(o)>=0)&&(!Object.prototype.propertyIsEnumerable.call(r,o)||(n[o]=r[o]))}return n}function v(r,i){if(r==null)return{};var n={},o=Object.keys(r),e,t;for(t=0;t<o.length;t++)e=o[t],!(i.indexOf(e)>=0)&&(n[e]=r[e]);return n}var p=f.exports.forwardRef(function(r,i){var n=r.color,o=n===void 0?"currentColor":n,e=r.size,t=e===void 0?24:e,a=c(r,["color","size"]);return l("svg",{ref:i,xmlns:"http://www.w3.org/2000/svg",width:t,height:t,viewBox:"0 0 24 24",fill:"none",stroke:o,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...a,children:l("polyline",{points:"6 9 12 15 18 9"})})});p.propTypes={color:s.exports.string,size:s.exports.oneOfType([s.exports.string,s.exports.number])};p.displayName="ChevronDown";const u=p;export{u as C};
|
||||
import{r as f,j as l,k as s}from"./index.171f553a.js";function c(r,i){if(r==null)return{};var n=v(r,i),o,e;if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(r);for(e=0;e<t.length;e++)o=t[e],!(i.indexOf(o)>=0)&&(!Object.prototype.propertyIsEnumerable.call(r,o)||(n[o]=r[o]))}return n}function v(r,i){if(r==null)return{};var n={},o=Object.keys(r),e,t;for(t=0;t<o.length;t++)e=o[t],!(i.indexOf(e)>=0)&&(n[e]=r[e]);return n}var p=f.exports.forwardRef(function(r,i){var n=r.color,o=n===void 0?"currentColor":n,e=r.size,t=e===void 0?24:e,a=c(r,["color","size"]);return l("svg",{ref:i,xmlns:"http://www.w3.org/2000/svg",width:t,height:t,viewBox:"0 0 24 24",fill:"none",stroke:o,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...a,children:l("polyline",{points:"6 9 12 15 18 9"})})});p.propTypes={color:s.exports.string,size:s.exports.oneOfType([s.exports.string,s.exports.number])};p.displayName="ChevronDown";const u=p;export{u as C};
|
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
File diff suppressed because one or more lines are too long
@ -0,0 +1,2 @@
|
||||
import{E as w,G as D,H as u}from"./index.171f553a.js";const v="/logs",L=new TextDecoder("utf-8"),M=()=>Math.floor((1+Math.random())*65536).toString(16);let h=!1,i=!1,f="",s,g;function m(e,n){let t;try{t=JSON.parse(e)}catch{console.log("JSON.parse error",JSON.parse(e))}const r=new Date,l=$(r);t.time=l,t.id=+r-0+M(),t.even=h=!h,n(t)}function $(e){const n=e.getFullYear()%100,t=u(e.getMonth()+1,2),r=u(e.getDate(),2),l=u(e.getHours(),2),o=u(e.getMinutes(),2),c=u(e.getSeconds(),2);return`${n}-${t}-${r} ${l}:${o}:${c}`}function p(e,n){return e.read().then(({done:t,value:r})=>{const l=L.decode(r,{stream:!t});f+=l;const o=f.split(`
|
||||
`),c=o[o.length-1];for(let d=0;d<o.length-1;d++)m(o[d],n);if(t){m(c,n),f="",console.log("GET /logs streaming done"),i=!1;return}else f=c;return p(e,n)})}function S(e){const n=Object.keys(e);return n.sort(),n.map(t=>e[t]).join("|")}let b,a;function k(e,n){if(e.logLevel==="uninit"||i||s&&s.readyState===1)return;g=n;const t=w(e,v);s=new WebSocket(t),s.addEventListener("error",()=>{y(e,n)}),s.addEventListener("message",function(r){m(r.data,n)})}function H(){s.close(),a&&a.abort()}function O(e){!g||!s||(s.close(),i=!1,k(e,g))}function y(e,n){if(a&&S(e)!==b)a.abort();else if(i)return;i=!0,b=S(e),a=new AbortController;const t=a.signal,{url:r,init:l}=D(e);fetch(r+v+"?level="+e.logLevel,{...l,signal:t}).then(o=>{const c=o.body.getReader();p(c,n)},o=>{i=!1,!t.aborted&&console.log("GET /logs error:",o.message)})}export{k as f,O as r,H as s};
|
@ -1,2 +0,0 @@
|
||||
import{D,E as w,G as u}from"./index.1428ab75.js";const v="/logs",L=new TextDecoder("utf-8"),M=()=>Math.floor((1+Math.random())*65536).toString(16);let h=!1,i=!1,f="",s,g;function m(e,n){let t;try{t=JSON.parse(e)}catch{console.log("JSON.parse error",JSON.parse(e))}const r=new Date,l=$(r);t.time=l,t.id=+r-0+M(),t.even=h=!h,n(t)}function $(e){const n=e.getFullYear()%100,t=u(e.getMonth()+1,2),r=u(e.getDate(),2),l=u(e.getHours(),2),o=u(e.getMinutes(),2),c=u(e.getSeconds(),2);return`${n}-${t}-${r} ${l}:${o}:${c}`}function p(e,n){return e.read().then(({done:t,value:r})=>{f+=L.decode(r,{stream:!t});const o=f.split(`
|
||||
`),c=o[o.length-1];for(let d=0;d<o.length-1;d++)m(o[d],n);if(t){m(c,n),f="",console.log("GET /logs streaming done"),i=!1;return}else f=c;return p(e,n)})}function S(e){const n=Object.keys(e);return n.sort(),n.map(t=>e[t]).join("|")}let b,a;function k(e,n){if(e.logLevel==="uninit"||i||s&&s.readyState===1)return;g=n;const t=D(e,v);s=new WebSocket(t),s.addEventListener("error",()=>{y(e,n)}),s.addEventListener("message",function(r){m(r.data,n)})}function O(){s.close(),a&&a.abort()}function R(e){!g||!s||(s.close(),i=!1,k(e,g))}function y(e,n){if(a&&S(e)!==b)a.abort();else if(i)return;i=!0,b=S(e),a=new AbortController;const t=a.signal,{url:r,init:l}=w(e);fetch(r+v+"?level="+e.logLevel,{...l,signal:t}).then(o=>{const c=o.body.getReader();p(c,n)},o=>{i=!1,!t.aborted&&console.log("GET /logs error:",o.message)})}export{k as f,R as r,O as s};
|
@ -1 +1 @@
|
||||
import{r as c,b as u,j as p,i as s}from"./index.1428ab75.js";function y(e,n){if(e==null)return{};var i=g(e,n),t,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],!(n.indexOf(t)>=0)&&(!Object.prototype.propertyIsEnumerable.call(e,t)||(i[t]=e[t]))}return i}function g(e,n){if(e==null)return{};var i={},t=Object.keys(e),r,o;for(o=0;o<t.length;o++)r=t[o],!(n.indexOf(r)>=0)&&(i[r]=e[r]);return i}var l=c.exports.forwardRef(function(e,n){var i=e.color,t=i===void 0?"currentColor":i,r=e.size,o=r===void 0?24:r,a=y(e,["color","size"]);return u("svg",{ref:n,xmlns:"http://www.w3.org/2000/svg",width:o,height:o,viewBox:"0 0 24 24",fill:"none",stroke:t,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...a,children:[p("rect",{x:"6",y:"4",width:"4",height:"16"}),p("rect",{x:"14",y:"4",width:"4",height:"16"})]})});l.propTypes={color:s.exports.string,size:s.exports.oneOfType([s.exports.string,s.exports.number])};l.displayName="Pause";const d=l;function h(e,n){if(e==null)return{};var i=v(e,n),t,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],!(n.indexOf(t)>=0)&&(!Object.prototype.propertyIsEnumerable.call(e,t)||(i[t]=e[t]))}return i}function v(e,n){if(e==null)return{};var i={},t=Object.keys(e),r,o;for(o=0;o<t.length;o++)r=t[o],!(n.indexOf(r)>=0)&&(i[r]=e[r]);return i}var f=c.exports.forwardRef(function(e,n){var i=e.color,t=i===void 0?"currentColor":i,r=e.size,o=r===void 0?24:r,a=h(e,["color","size"]);return p("svg",{ref:n,xmlns:"http://www.w3.org/2000/svg",width:o,height:o,viewBox:"0 0 24 24",fill:"none",stroke:t,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...a,children:p("polygon",{points:"5 3 19 12 5 21 5 3"})})});f.propTypes={color:s.exports.string,size:s.exports.oneOfType([s.exports.string,s.exports.number])};f.displayName="Play";const w=f;export{w as P,d as a};
|
||||
import{r as c,b as u,j as p,k as s}from"./index.171f553a.js";function y(e,n){if(e==null)return{};var i=g(e,n),t,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],!(n.indexOf(t)>=0)&&(!Object.prototype.propertyIsEnumerable.call(e,t)||(i[t]=e[t]))}return i}function g(e,n){if(e==null)return{};var i={},t=Object.keys(e),r,o;for(o=0;o<t.length;o++)r=t[o],!(n.indexOf(r)>=0)&&(i[r]=e[r]);return i}var l=c.exports.forwardRef(function(e,n){var i=e.color,t=i===void 0?"currentColor":i,r=e.size,o=r===void 0?24:r,a=y(e,["color","size"]);return u("svg",{ref:n,xmlns:"http://www.w3.org/2000/svg",width:o,height:o,viewBox:"0 0 24 24",fill:"none",stroke:t,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...a,children:[p("rect",{x:"6",y:"4",width:"4",height:"16"}),p("rect",{x:"14",y:"4",width:"4",height:"16"})]})});l.propTypes={color:s.exports.string,size:s.exports.oneOfType([s.exports.string,s.exports.number])};l.displayName="Pause";const d=l;function h(e,n){if(e==null)return{};var i=v(e,n),t,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],!(n.indexOf(t)>=0)&&(!Object.prototype.propertyIsEnumerable.call(e,t)||(i[t]=e[t]))}return i}function v(e,n){if(e==null)return{};var i={},t=Object.keys(e),r,o;for(o=0;o<t.length;o++)r=t[o],!(n.indexOf(r)>=0)&&(i[r]=e[r]);return i}var f=c.exports.forwardRef(function(e,n){var i=e.color,t=i===void 0?"currentColor":i,r=e.size,o=r===void 0?24:r,a=h(e,["color","size"]);return p("svg",{ref:n,xmlns:"http://www.w3.org/2000/svg",width:o,height:o,viewBox:"0 0 24 24",fill:"none",stroke:t,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...a,children:p("polygon",{points:"5 3 19 12 5 21 5 3"})})});f.propTypes={color:s.exports.string,size:s.exports.oneOfType([s.exports.string,s.exports.number])};f.displayName="Play";const w=f;export{w as P,d as a};
|
@ -1 +1 @@
|
||||
import{h as r}from"./index.1428ab75.js";const{useState:s,useRef:u,useCallback:a,useLayoutEffect:c}=r;function d(){const t=u(null),[n,i]=s(200),e=a(()=>{const{top:o}=t.current.getBoundingClientRect();i(window.innerHeight-o)},[]);return c(()=>(e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}),[e]),[t,n]}export{d as u};
|
||||
import{i as r}from"./index.171f553a.js";const{useState:s,useRef:u,useCallback:a,useLayoutEffect:c}=r;function d(){const t=u(null),[n,i]=s(200),e=a(()=>{const{top:o}=t.current.getBoundingClientRect();i(window.innerHeight-o)},[]);return c(()=>(e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}),[e]),[t,n]}export{d as u};
|
@ -14,9 +14,9 @@
|
||||
<meta name="application-name" content="yacd" />
|
||||
<meta name="description" content="Yet Another Clash Dashboard" />
|
||||
<title>yacd</title>
|
||||
<script type="module" crossorigin src="./assets/index.1428ab75.js"></script>
|
||||
<script type="module" crossorigin src="./assets/index.171f553a.js"></script>
|
||||
<link rel="stylesheet" href="./assets/index.b38debfc.css">
|
||||
<link rel="manifest" href="./manifest.webmanifest"><script src="./registerSW.js"></script></head>
|
||||
<link rel="manifest" href="./manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="./registerSW.js"></script></head>
|
||||
<body>
|
||||
<div id="app" data-base-url="http://127.0.0.1:9090"></div>
|
||||
|
||||
|
File diff suppressed because one or more lines are too long
@ -266,9 +266,9 @@ yml_dns_get()
|
||||
interface=""
|
||||
fi
|
||||
|
||||
if [ "$http3" = "1" ] && [ "$enable_meta_core" = "1" ] && [ "$interface" != "" ]; then
|
||||
if [ "$http3" = "1" ] && [ "$enable_meta_core" = "1" ] && [ -n "$specific_group" ]; then
|
||||
http3="&h3=true"
|
||||
elif [ "$http3" = "1" ] && [ "$enable_meta_core" = "1" ] && [ "$interface" = "" ]; then
|
||||
elif [ "$http3" = "1" ] && [ "$enable_meta_core" = "1" ] && [ -z "$specific_group" ]; then
|
||||
http3="#h3=true"
|
||||
elif [ "$http3" = "1" ] && [ "$enable_meta_core" != "1" ]; then
|
||||
LOG_OUT "Warning: Only Meta Core Support Force HTTP/3 to connect, Skip Setting【$dns_type$dns_address】"
|
||||
@ -469,6 +469,7 @@ Thread.new{
|
||||
Value['tun']['stack']='$stack_type';
|
||||
if ${20} == 1 then
|
||||
Value['tun']['device']='utun';
|
||||
Value['tun']['mtu']=65535;
|
||||
end;
|
||||
Value_2={'dns-hijack'=>['tcp://any:53']};
|
||||
Value['tun']['auto-route']=false;
|
||||
|
@ -12,18 +12,6 @@ del_lock() {
|
||||
rm -rf "/tmp/lock/openclash_proxies_get.lock"
|
||||
}
|
||||
|
||||
sub_info_get()
|
||||
{
|
||||
local section="$1" name
|
||||
config_get "name" "$section" "name" ""
|
||||
|
||||
if [ -z "$name" ] || [ "$name" != "${CONFIG_NAME%%.*}" ]; then
|
||||
return
|
||||
else
|
||||
sub_cfg=true
|
||||
fi
|
||||
}
|
||||
|
||||
ruby_read_hash()
|
||||
{
|
||||
RUBY_YAML_PARSE="Thread.new{Value = $1; puts Value$2}.join"
|
||||
@ -68,10 +56,6 @@ elif [ ! -s "$CONFIG_FILE" ] && [ -s "$BACKUP_FILE" ]; then
|
||||
mv "$BACKUP_FILE" "$CONFIG_FILE"
|
||||
fi
|
||||
|
||||
#判断订阅配置
|
||||
config_load "openclash"
|
||||
config_foreach sub_info_get "config_subscribe"
|
||||
|
||||
#提取节点部分
|
||||
proxy_hash=$(ruby_read "$CONFIG_FILE" ".select {|x| 'proxies' == x or 'proxy-providers' == x}")
|
||||
|
||||
@ -223,11 +207,7 @@ do
|
||||
else
|
||||
${uci_set}enabled="1"
|
||||
fi
|
||||
if [ "$servers_if_update" = "1" ] || "$sub_cfg"; then
|
||||
${uci_set}manual="0"
|
||||
else
|
||||
${uci_set}manual="1"
|
||||
fi
|
||||
${uci_set}manual="0"
|
||||
${uci_set}config="$CONFIG_NAME"
|
||||
${uci_set}name="$provider_name"
|
||||
${uci_set}type="$provider_type"
|
||||
@ -342,17 +322,17 @@ done 2>/dev/null
|
||||
|
||||
#删除订阅中已不存在的代理集
|
||||
if [ "$servers_if_update" = "1" ]; then
|
||||
LOG_OUT "Deleting【$CONFIG_NAME】Proxy-providers That no Longer Exists in Subscription"
|
||||
sed -i '/#match#/d' "$match_provider" 2>/dev/null
|
||||
cat $match_provider 2>/dev/null|awk -F '.' '{print $1}' |sort -rn |while read line
|
||||
do
|
||||
if [ -z "$line" ]; then
|
||||
continue
|
||||
fi
|
||||
if [ "$(uci get openclash.@proxy-provider["$line"].manual)" = "0" ] && [ "$(uci get openclash.@proxy-provider["$line"].config)" = "$CONFIG_NAME" ]; then
|
||||
uci delete openclash.@proxy-provider["$line"] 2>/dev/null
|
||||
fi
|
||||
done
|
||||
LOG_OUT "Deleting【$CONFIG_NAME】Proxy-providers That no Longer Exists in Subscription"
|
||||
sed -i '/#match#/d' "$match_provider" 2>/dev/null
|
||||
cat $match_provider 2>/dev/null|awk -F '.' '{print $1}' |sort -rn |while read line
|
||||
do
|
||||
if [ -z "$line" ]; then
|
||||
continue
|
||||
fi
|
||||
if [ "$(uci get openclash.@proxy-provider["$line"].manual)" = "0" ] && [ "$(uci get openclash.@proxy-provider["$line"].config)" = "$CONFIG_NAME" ]; then
|
||||
uci delete openclash.@proxy-provider["$line"] 2>/dev/null
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
@ -425,11 +405,7 @@ do
|
||||
else
|
||||
${uci_set}enabled="1"
|
||||
fi
|
||||
if [ "$servers_if_update" = "1" ] || "$sub_cfg"; then
|
||||
${uci_set}manual="0"
|
||||
else
|
||||
${uci_set}manual="1"
|
||||
fi
|
||||
${uci_set}manual="0"
|
||||
${uci_set}config="$CONFIG_NAME"
|
||||
${uci_set}name="$server_name"
|
||||
${uci_set}type="$server_type"
|
||||
@ -760,6 +736,172 @@ do
|
||||
}.join
|
||||
end;
|
||||
|
||||
#Tuic
|
||||
if '$server_type' == 'tuic' then
|
||||
Thread.new{
|
||||
#tc_ip
|
||||
if Value['proxies'][$count].key?('ip') then
|
||||
tc_ip = '${uci_set}tc_ip=' + Value['proxies'][$count]['ip'].to_s
|
||||
system(tc_ip)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#tc_token
|
||||
if Value['proxies'][$count].key?('token') then
|
||||
tc_token = '${uci_set}tc_token=' + Value['proxies'][$count]['token'].to_s
|
||||
system(tc_token)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#heartbeat_interval
|
||||
if Value['proxies'][$count].key?('heartbeat-interval') then
|
||||
heartbeat_interval = '${uci_set}heartbeat_interval=' + Value['proxies'][$count]['heartbeat-interval'].to_s
|
||||
system(heartbeat_interval)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#tc_alpn
|
||||
if Value['proxies'][$count].key?('alpn') then
|
||||
system '${uci_del}tc_alpn >/dev/null 2>&1'
|
||||
Value['proxies'][$count]['alpn'].each{
|
||||
|x|
|
||||
tc_alpn = '${uci_add}tc_alpn=\"' + x.to_s + '\"'
|
||||
system(tc_alpn)
|
||||
}
|
||||
end;
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#disable_sni
|
||||
if Value['proxies'][$count].key?('disable-sni') then
|
||||
disable_sni = '${uci_set}disable_sni=' + Value['proxies'][$count]['disable-sni'].to_s
|
||||
system(disable_sni)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#reduce_rtt
|
||||
if Value['proxies'][$count].key?('reduce-rtt') then
|
||||
reduce_rtt = '${uci_set}reduce_rtt=' + Value['proxies'][$count]['reduce-rtt'].to_s
|
||||
system(reduce_rtt)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#fast_open
|
||||
if Value['proxies'][$count].key?('fast-open') then
|
||||
fast_open = '${uci_set}fast_open=' + Value['proxies'][$count]['fast-open'].to_s
|
||||
system(fast_open)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#request_timeout
|
||||
if Value['proxies'][$count].key?('request-timeout') then
|
||||
request_timeout = '${uci_set}request_timeout=' + Value['proxies'][$count]['request-timeout'].to_s
|
||||
system(request_timeout)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#udp_relay_mode
|
||||
if Value['proxies'][$count].key?('udp-relay-mode') then
|
||||
udp_relay_mode = '${uci_set}udp_relay_mode=' + Value['proxies'][$count]['udp-relay-mode'].to_s
|
||||
system(udp_relay_mode)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#congestion_controller
|
||||
if Value['proxies'][$count].key?('congestion-controller') then
|
||||
congestion_controller = '${uci_set}congestion_controller=' + Value['proxies'][$count]['congestion-controller'].to_s
|
||||
system(congestion_controller)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#max_udp_relay_packet_size
|
||||
if Value['proxies'][$count].key?('max-udp-relay-packet-size') then
|
||||
max_udp_relay_packet_size = '${uci_set}max_udp_relay_packet_size=' + Value['proxies'][$count]['max-udp-relay-packet-size'].to_s
|
||||
system(max_udp_relay_packet_size)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#max-open-streams
|
||||
if Value['proxies'][$count].key?('max-open-streams') then
|
||||
max_open_streams = '${uci_set}max_open_streams=' + Value['proxies'][$count]['max-open-streams'].to_s
|
||||
system(max_open_streams)
|
||||
end
|
||||
}.join
|
||||
end;
|
||||
|
||||
#WireGuard
|
||||
if '$server_type' == 'wireguard' then
|
||||
Thread.new{
|
||||
#wg_ip
|
||||
if Value['proxies'][$count].key?('ip') then
|
||||
wg_ip = '${uci_set}wg_ip=' + Value['proxies'][$count]['ip'].to_s
|
||||
system(wg_ip)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#wg_ipv6
|
||||
if Value['proxies'][$count].key?('ipv6') then
|
||||
wg_ipv6 = '${uci_set}wg_ipv6=' + Value['proxies'][$count]['ipv6'].to_s
|
||||
system(wg_ipv6)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#private_key
|
||||
if Value['proxies'][$count].key?('private-key') then
|
||||
private_key = '${uci_set}private_key=' + Value['proxies'][$count]['private-key'].to_s
|
||||
system(private_key)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#public_key
|
||||
if Value['proxies'][$count].key?('public-key') then
|
||||
public_key = '${uci_set}public_key=' + Value['proxies'][$count]['public-key'].to_s
|
||||
system(public_key)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#preshared_key
|
||||
if Value['proxies'][$count].key?('preshared-key') then
|
||||
preshared_key = '${uci_set}preshared_key=' + Value['proxies'][$count]['preshared-key'].to_s
|
||||
system(preshared_key)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#wg_mtu
|
||||
if Value['proxies'][$count].key?('mtu') then
|
||||
wg_mtu = '${uci_set}wg_mtu=' + Value['proxies'][$count]['mtu'].to_s
|
||||
system(wg_mtu)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#wg_dns
|
||||
if Value['proxies'][$count].key?('dns') then
|
||||
system '${uci_del}wg_dns >/dev/null 2>&1'
|
||||
Value['proxies'][$count]['dns'].each{
|
||||
|x|
|
||||
wg_dns = '${uci_add}wg_dns=\"' + x.to_s + '\"'
|
||||
system(wg_dns)
|
||||
}
|
||||
end;
|
||||
}.join
|
||||
end;
|
||||
|
||||
if '$server_type' == 'hysteria' then
|
||||
Thread.new{
|
||||
#hysteria_protocol
|
||||
@ -769,22 +911,6 @@ do
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#up_mbps
|
||||
if Value['proxies'][$count].key?('up_mbps') then
|
||||
up_mbps = '${uci_set}up_mbps=' + Value['proxies'][$count]['up_mbps'].to_s
|
||||
system(up_mbps)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#down_mbps
|
||||
if Value['proxies'][$count].key?('down_mbps') then
|
||||
down_mbps = '${uci_set}down_mbps=' + Value['proxies'][$count]['down_mbps'].to_s
|
||||
system(down_mbps)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#hysteria_up
|
||||
if Value['proxies'][$count].key?('up') then
|
||||
@ -821,7 +947,7 @@ do
|
||||
#alpn
|
||||
if Value['proxies'][$count].key?('alpn') then
|
||||
system '${uci_del}hysteria_alpn >/dev/null 2>&1'
|
||||
if Value['proxies'][$count].key?('alpn').class.to_s != 'Array' then
|
||||
if Value['proxies'][$count]['alpn'].class.to_s != 'Array' then
|
||||
alpn = '${uci_add}hysteria_alpn=\"' + Value['proxies'][$count]['alpn'].to_s + '\"'
|
||||
system(alpn)
|
||||
else
|
||||
@ -836,16 +962,16 @@ do
|
||||
|
||||
Thread.new{
|
||||
#recv_window_conn
|
||||
if Value['proxies'][$count].key?('recv_window_conn') then
|
||||
recv_window_conn = '${uci_set}recv_window_conn=' + Value['proxies'][$count]['recv_window_conn'].to_s
|
||||
if Value['proxies'][$count].key?('recv-window-conn') then
|
||||
recv_window_conn = '${uci_set}recv_window_conn=' + Value['proxies'][$count]['recv-window-conn'].to_s
|
||||
system(recv_window_conn)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#recv_window
|
||||
if Value['proxies'][$count].key?('recv_window') then
|
||||
recv_window = '${uci_set}recv_window=' + Value['proxies'][$count]['recv_window'].to_s
|
||||
if Value['proxies'][$count].key?('recv-window') then
|
||||
recv_window = '${uci_set}recv_window=' + Value['proxies'][$count]['recv-window'].to_s
|
||||
system(recv_window)
|
||||
end
|
||||
}.join
|
||||
@ -868,8 +994,8 @@ do
|
||||
|
||||
Thread.new{
|
||||
#hysteria_auth_str
|
||||
if Value['proxies'][$count].key?('auth_str') then
|
||||
hysteria_auth_str = '${uci_set}hysteria_auth_str=' + Value['proxies'][$count]['auth_str'].to_s
|
||||
if Value['proxies'][$count].key?('auth-str') then
|
||||
hysteria_auth_str = '${uci_set}hysteria_auth_str=' + Value['proxies'][$count]['auth-str'].to_s
|
||||
system(hysteria_auth_str)
|
||||
end
|
||||
}.join
|
||||
@ -884,20 +1010,51 @@ do
|
||||
|
||||
Thread.new{
|
||||
#hysteria_ca_str
|
||||
if Value['proxies'][$count].key?('ca_str') then
|
||||
hysteria_ca_str = '${uci_set}hysteria_ca_str=' + Value['proxies'][$count]['ca_str'].to_s
|
||||
if Value['proxies'][$count].key?('ca-str') then
|
||||
hysteria_ca_str = '${uci_set}hysteria_ca_str=' + Value['proxies'][$count]['ca-str'].to_s
|
||||
system(hysteria_ca_str)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#disable_mtu_discovery
|
||||
if Value['proxies'][$count].key?('disable_mtu_discovery') then
|
||||
disable_mtu_discovery = '${uci_set}disable_mtu_discovery=' + Value['proxies'][$count]['disable_mtu_discovery'].to_s
|
||||
if Value['proxies'][$count].key?('disable-mtu-discovery') then
|
||||
disable_mtu_discovery = '${uci_set}disable_mtu_discovery=' + Value['proxies'][$count]['disable-mtu-discovery'].to_s
|
||||
system(disable_mtu_discovery)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#fast_open
|
||||
if Value['proxies'][$count].key?('fast-open') then
|
||||
fast_open = '${uci_set}fast_open=' + Value['proxies'][$count]['fast-open'].to_s
|
||||
system(fast_open)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#fingerprint
|
||||
if Value['proxies'][$count].key?('fingerprint') then
|
||||
fingerprint = '${uci_set}fingerprint=' + Value['proxies'][$count]['fingerprint'].to_s
|
||||
system(fingerprint)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#ports
|
||||
if Value['proxies'][$count].key?('ports') then
|
||||
ports = '${uci_set}ports=' + Value['proxies'][$count]['ports'].to_s
|
||||
system(ports)
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#hop-interval
|
||||
if Value['proxies'][$count].key?('hop-interval') then
|
||||
hop_interval = '${uci_set}hop_interval=' + Value['proxies'][$count]['hop-interval'].to_s
|
||||
system(hop_interval)
|
||||
end
|
||||
}.join
|
||||
end;
|
||||
|
||||
if '$server_type' == 'vless' then
|
||||
|
@ -238,8 +238,6 @@ yml_servers_set()
|
||||
config_get "vless_flow" "$section" "vless_flow" ""
|
||||
config_get "http_headers" "$section" "http_headers" ""
|
||||
config_get "hysteria_protocol" "$section" "hysteria_protocol" ""
|
||||
config_get "up_mbps" "$section" "up_mbps" ""
|
||||
config_get "down_mbps" "$section" "down_mbps" ""
|
||||
config_get "hysteria_up" "$section" "hysteria_up" ""
|
||||
config_get "hysteria_down" "$section" "hysteria_down" ""
|
||||
config_get "hysteria_alpn" "$section" "hysteria_alpn" ""
|
||||
@ -255,7 +253,31 @@ yml_servers_set()
|
||||
config_get "packet_encoding" "$section" "packet_encoding" ""
|
||||
config_get "global_padding" "$section" "global_padding" ""
|
||||
config_get "authenticated_length" "$section" "authenticated_length" ""
|
||||
|
||||
config_get "wg_ip" "$section" "wg_ip" ""
|
||||
config_get "wg_ipv6" "$section" "wg_ipv6" ""
|
||||
config_get "private_key" "$section" "private_key" ""
|
||||
config_get "public_key" "$section" "public_key" ""
|
||||
config_get "preshared_key" "$section" "preshared_key" ""
|
||||
config_get "wg_dns" "$section" "wg_dns" ""
|
||||
config_get "public_key" "$section" "public_key" ""
|
||||
config_get "preshared_key" "$section" "preshared_key" ""
|
||||
config_get "wg_mtu" "$section" "wg_mtu" ""
|
||||
config_get "tc_ip" "$section" "tc_ip" ""
|
||||
config_get "tc_token" "$section" "tc_token" ""
|
||||
config_get "udp_relay_mode" "$section" "udp_relay_mode" ""
|
||||
config_get "congestion_controller" "$section" "congestion_controller" ""
|
||||
config_get "tc_alpn" "$section" "tc_alpn" ""
|
||||
config_get "disable_sni" "$section" "disable_sni" ""
|
||||
config_get "reduce_rtt" "$section" "reduce_rtt" ""
|
||||
config_get "heartbeat_interval" "$section" "heartbeat_interval" ""
|
||||
config_get "request_timeout" "$section" "request_timeout" ""
|
||||
config_get "max_udp_relay_packet_size" "$section" "max_udp_relay_packet_size" ""
|
||||
config_get "fast_open" "$section" "fast_open" ""
|
||||
config_get "fingerprint" "$section" "fingerprint" ""
|
||||
config_get "ports" "$section" "ports" ""
|
||||
config_get "hop_interval" "$section" "hop_interval" ""
|
||||
config_get "max_open_streams" "$section" "max_open_streams" ""
|
||||
|
||||
if [ "$enabled" = "0" ]; then
|
||||
return
|
||||
fi
|
||||
@ -578,6 +600,128 @@ EOF
|
||||
fi
|
||||
fi
|
||||
|
||||
#Tuic
|
||||
if [ "$type" = "tuic" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
- name: "$name"
|
||||
type: $type
|
||||
server: "$server"
|
||||
port: $port
|
||||
EOF
|
||||
if [ -n "$tc_ip" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
ip: "$tc_ip"
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$tc_token" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
token: "$tc_token"
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$udp_relay_mode" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
udp-relay-mode: "$udp_relay_mode"
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$congestion_controller" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
congestion-controller: "$congestion_controller"
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$tc_alpn" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
alpn:
|
||||
EOF
|
||||
config_list_foreach "$section" "tc_alpn" set_alpn
|
||||
fi
|
||||
if [ -n "$disable_sni" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
disable-sni: "$disable_sni"
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$reduce_rtt" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
reduce-rtt: $reduce_rtt
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$fast_open" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
fast-open: $fast_open
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$heartbeat_interval" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
heartbeat-interval: $heartbeat_interval
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$request_timeout" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
request-timeout: $request_timeout
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$max_udp_relay_packet_size" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
max-udp-relay-packet-size: $max_udp_relay_packet_size
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$max_open_streams" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
max-open-streams: $max_open_streams
|
||||
EOF
|
||||
fi
|
||||
fi
|
||||
|
||||
#WireGuard
|
||||
if [ "$type" = "wireguard" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
- name: "$name"
|
||||
type: $type
|
||||
server: "$server"
|
||||
port: $port
|
||||
EOF
|
||||
if [ -n "$wg_ip" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
ip: "$wg_ip"
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$wg_ipv6" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
ipv6: "$wg_ipv6"
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$private_key" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
private-key: "$private_key"
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$public_key" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
public-key: "$public_key"
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$preshared_key" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
preshared-key: "$preshared_key"
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$preshared_key" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
dns:
|
||||
EOF
|
||||
config_list_foreach "$section" "wg_dns" set_alpn
|
||||
fi
|
||||
if [ -n "$wg_mtu" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
mtu: "$wg_mtu"
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$udp" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
udp: $udp
|
||||
EOF
|
||||
fi
|
||||
fi
|
||||
|
||||
#hysteria
|
||||
if [ "$type" = "hysteria" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
@ -587,22 +731,12 @@ cat >> "$SERVER_FILE" <<-EOF
|
||||
port: $port
|
||||
protocol: $hysteria_protocol
|
||||
EOF
|
||||
if [ -n "$up_mbps" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
up_mbps: "$up_mbps"
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$down_mbps" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
down_mbps: "$down_mbps"
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$hysteria_up" ] && [ -z "$up_mbps" ]; then
|
||||
if [ -n "$hysteria_up" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
up: "$hysteria_up"
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$hysteria_down" ] && [ -z "$down_mbps" ]; then
|
||||
if [ -n "$hysteria_down" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
down: "$hysteria_down"
|
||||
EOF
|
||||
@ -642,7 +776,7 @@ EOF
|
||||
fi
|
||||
if [ -n "$hysteria_auth_str" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
auth_str: "$hysteria_auth_str"
|
||||
auth-str: "$hysteria_auth_str"
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$hysteria_ca" ]; then
|
||||
@ -652,22 +786,42 @@ EOF
|
||||
fi
|
||||
if [ -n "$hysteria_ca_str" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
ca_str: "$hysteria_ca_str"
|
||||
ca-str: "$hysteria_ca_str"
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$recv_window_conn" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
recv_window_conn: "$recv_window_conn"
|
||||
recv-window-conn: "$recv_window_conn"
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$recv_window" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
recv_window: "$recv_window"
|
||||
recv-window: "$recv_window"
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$disable_mtu_discovery" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
disable_mtu_discovery: $disable_mtu_discovery
|
||||
disable-mtu-discovery: $disable_mtu_discovery
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$fast_open" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
fast-open: $fast_open
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$fingerprint" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
fingerprint: $fingerprint
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$ports" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
ports: $ports
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$hop_interval" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
hop-interval: $hop_interval
|
||||
EOF
|
||||
fi
|
||||
fi
|
||||
|
@ -8,6 +8,7 @@ LOG_FILE="/tmp/openclash.log"
|
||||
RULE_PROVIDER_FILE="/tmp/yaml_rule_provider.yaml"
|
||||
GAME_RULE_FILE="/tmp/yaml_game_rule.yaml"
|
||||
github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0)
|
||||
urltest_address_mod=$(uci -q get openclash.config.urltest_address_mod || echo 0)
|
||||
CONFIG_NAME="$5"
|
||||
|
||||
#处理自定义规则集
|
||||
@ -809,6 +810,32 @@ yml_other_set()
|
||||
}.join;
|
||||
rescue Exception => e
|
||||
puts '${LOGTIME} Error: Edit Provider Path Failed,【' + e.message + '】';
|
||||
end;
|
||||
|
||||
#修改测速地址
|
||||
begin
|
||||
Thread.new{
|
||||
if '$urltest_address_mod' != '0' then
|
||||
if Value.key?('proxy-providers') then
|
||||
Value['proxy-providers'].values.each{
|
||||
|x|
|
||||
if x['health-check'] and x['health-check']['url'] and x['health-check']['url'] != '$urltest_address_mod' then
|
||||
x['health-check']['url']='$urltest_address_mod';
|
||||
end;
|
||||
};
|
||||
end;
|
||||
if Value.key?('proxy-groups') then
|
||||
Value['proxy-groups'].each{
|
||||
|x|
|
||||
if x['url'] and x['url'] != '$urltest_address_mod' then
|
||||
x['url']='$urltest_address_mod';
|
||||
end;
|
||||
};
|
||||
end;
|
||||
end;
|
||||
}.join;
|
||||
rescue Exception => e
|
||||
puts '${LOGTIME} Error: Edit Speedtest URL Failed,【' + e.message + '】';
|
||||
ensure
|
||||
File.open('$3','w') {|f| YAML.dump(Value, f)};
|
||||
end" 2>/dev/null >> $LOG_FILE
|
||||
|
@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="186" height="20" role="img" aria-label="Current Version: v0.45.70-beta"><title>Current Version: v0.45.70-beta</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="186" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="97" height="20" fill="#555"/><rect x="97" width="89" height="20" fill="#007ec6"/><rect width="186" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="495" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="870">Current Version</text><text x="495" y="140" transform="scale(.1)" fill="#fff" textLength="870">Current Version</text><text aria-hidden="true" x="1405" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="790">v0.45.70-beta</text><text x="1405" y="140" transform="scale(.1)" fill="#fff" textLength="790">v0.45.70-beta</text></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="186" height="20" role="img" aria-label="Current Version: v0.45.78-beta"><title>Current Version: v0.45.78-beta</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="186" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="97" height="20" fill="#555"/><rect x="97" width="89" height="20" fill="#007ec6"/><rect width="186" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="495" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="870">Current Version</text><text x="495" y="140" transform="scale(.1)" fill="#fff" textLength="870">Current Version</text><text aria-hidden="true" x="1405" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="790">v0.45.78-beta</text><text x="1405" y="140" transform="scale(.1)" fill="#fff" textLength="790">v0.45.78-beta</text></g></svg>
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
@ -85,7 +85,23 @@ CodeMirror.defineMode("lua", function(config, parserConfig) {
|
||||
if (ch == "【") {
|
||||
stream.eatWhile(/[^】]/);
|
||||
stream.eat("】");
|
||||
return "string";
|
||||
return "string-2";
|
||||
}
|
||||
if (((ch == "提" && stream.eat("示")) || (ch == "T" && stream.eat("i") && stream.eat("p"))) && (stream.eat(":") || stream.eat(":"))) {
|
||||
stream.skipToEnd();
|
||||
return "tip";
|
||||
}
|
||||
if (((ch == "守" && stream.eat("护") && stream.eat("程") && stream.eat("序")) || (ch == "W" && stream.eat("a") && stream.eat("t") && stream.eat("c") && stream.eat("h") && stream.eat("d") && stream.eat("o") && stream.eat("g"))) && (stream.eat(":") || stream.eat(":"))) {
|
||||
stream.skipToEnd();
|
||||
return "watchdog";
|
||||
}
|
||||
if (((ch == "警" && stream.eat("告")) || (ch == "W" && stream.eat("a") && stream.eat("r") && stream.eat("n") && stream.eat("i") && stream.eat("n") && stream.eat("g"))) && (stream.eat(":") || stream.eat(":"))) {
|
||||
stream.skipToEnd();
|
||||
return "warn";
|
||||
}
|
||||
if (((ch == "错" && stream.eat("误")) || (ch == "E" && stream.eat("r") && stream.eat("r") && stream.eat("o") && stream.eat("r"))) && (stream.eat(":") || stream.eat(":"))) {
|
||||
stream.skipToEnd();
|
||||
return "error";
|
||||
}
|
||||
if (ch == "\"" || ch == "'")
|
||||
return (state.cur = string(ch))(stream, state);
|
||||
|
@ -17,10 +17,13 @@
|
||||
.cm-s-idea span.cm-string { color: #008000; }
|
||||
.cm-s-idea span.cm-string-2 { color: #008000; }
|
||||
.cm-s-idea span.cm-qualifier { color: #555; }
|
||||
.cm-s-idea span.cm-error { color: #FF0000; }
|
||||
.cm-s-idea span.cm-error { line-height: 1em; font-weight: bold; color: #FF0000; }
|
||||
.cm-s-idea span.cm-attribute { color: #0000FF; }
|
||||
.cm-s-idea span.cm-tag { color: #000080; }
|
||||
.cm-s-idea span.cm-link { color: #0000FF; }
|
||||
.cm-s-idea span.cm-tip { color: #ff6f00; }
|
||||
.cm-s-idea span.cm-watchdog { color: #b300ff; }
|
||||
.cm-s-idea span.cm-warn { line-height: 1em; font-weight: bold; color: #ff00bb; }
|
||||
.cm-s-idea .CodeMirror-activeline-background { background: #FFFAE3; }
|
||||
|
||||
.cm-s-idea span.cm-builtin { color: #30a; }
|
||||
|
@ -92,18 +92,30 @@
|
||||
@media (prefers-color-scheme: dark) {
|
||||
<%=dark_css%>
|
||||
}
|
||||
<% if fs.access('/etc/config/argon') then %>
|
||||
:root {
|
||||
--primary: <%=primary%>;
|
||||
--dark-primary: <%=dark_primary%>;
|
||||
--bar-bg: <%=primary%>;
|
||||
--blur-radius:<%=blur_radius%>px;
|
||||
--blur-opacity:<%=blur_opacity%>;
|
||||
--blur-radius-dark:<%=blur_radius_dark%>px;
|
||||
--blur-opacity-dark:<%=blur_opacity_dark%>;
|
||||
}
|
||||
<% end -%>
|
||||
<% elseif mode == 'dark' then %>
|
||||
<%=dark_css%>
|
||||
<% end -%>
|
||||
<% if fs.access('/etc/config/argon') then %>
|
||||
:root {
|
||||
--primary: <%=primary%>;
|
||||
--dark-primary: <%=dark_primary%>;
|
||||
--blur-radius:<%=blur_radius%>px;
|
||||
--blur-opacity:<%=blur_opacity%>;
|
||||
--blur-radius-dark:<%=blur_radius_dark%>px;
|
||||
--blur-opacity-dark:<%=blur_opacity_dark%>;
|
||||
}
|
||||
<% if fs.access('/etc/config/argon') then %>
|
||||
:root {
|
||||
--primary: <%=primary%>;
|
||||
--dark-primary: <%=dark_primary%>;
|
||||
--bar-bg: <%=dark_primary%>;
|
||||
--blur-radius:<%=blur_radius%>px;
|
||||
--blur-opacity:<%=blur_opacity%>;
|
||||
--blur-radius-dark:<%=blur_radius_dark%>px;
|
||||
--blur-opacity-dark:<%=blur_opacity_dark%>;
|
||||
}
|
||||
<% end -%>
|
||||
<% end -%>
|
||||
</style>
|
||||
<link rel="shortcut icon" href="<%=media%>/favicon.ico">
|
||||
|
@ -42,7 +42,7 @@
|
||||
end
|
||||
|
||||
|
||||
local imageTypes = " jpg png gif "
|
||||
local imageTypes = " jpg png gif webp "
|
||||
local videoTypes = " mp4 webm "
|
||||
local allTypes = imageTypes .. videoTypes
|
||||
local function fetchMedia(path,themeDir)
|
||||
|
Loading…
Reference in New Issue
Block a user