luci-app-clash: bump to 1.6.9
This commit is contained in:
parent
7c72abff89
commit
5213ce7da2
@ -1,7 +1,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-clash
|
||||
PKG_VERSION:=1.6.8
|
||||
PKG_VERSION:=1.6.9b
|
||||
PKG_MAINTAINER:=frainzy1477
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@ define Package/luci-app-clash
|
||||
CATEGORY:=LuCI
|
||||
SUBMENU:=3. Applications
|
||||
TITLE:=LuCI app for clash
|
||||
DEPENDS:=+luci-compat +luci-base +wget +iptables +coreutils-base64 +coreutils +coreutils-nohup +bash +ipset +libustream-openssl +openssl-util +curl +jsonfilter +ca-certificates +iptables-mod-tproxy
|
||||
DEPENDS:=+luci-compat +luci-base +wget +iptables +coreutils-base64 +coreutils +coreutils-nohup +bash +ipset +libustream-openssl +curl +jsonfilter +ca-certificates +iptables-mod-tproxy
|
||||
PKGARCH:=all
|
||||
MAINTAINER:=frainzy1477
|
||||
endef
|
||||
@ -101,6 +101,8 @@ define Package/$(PKG_NAME)/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib/lua/luci
|
||||
$(INSTALL_DIR) $(1)/usr/share/
|
||||
$(INSTALL_DIR) $(1)/usr/share/clash
|
||||
$(INSTALL_DIR) $(1)/usr/rpcd
|
||||
$(INSTALL_DIR) $(1)/usr/rpcd/acl.d
|
||||
$(INSTALL_DIR) $(1)/usr/share/clash/rules
|
||||
$(INSTALL_DIR) $(1)/usr/share/clash/rules/g_rules
|
||||
$(INSTALL_DIR) $(1)/usr/share/clash/dashboard
|
||||
@ -137,11 +139,13 @@ define Package/$(PKG_NAME)/install
|
||||
$(INSTALL_BIN) ./root/usr/share/clash/logstatus_check $(1)/usr/share/clash/
|
||||
$(INSTALL_BIN) ./root/usr/share/clash/clash.txt $(1)/usr/share/clash/
|
||||
|
||||
$(INSTALL_BIN) ./root/usr/rpcd/acl.d/luci-app-clash.json $(1)/usr/rpcd/acl.d/
|
||||
|
||||
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/index.html $(1)/usr/share/clash/dashboard/
|
||||
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/main.693efc9234a08d249710.css $(1)/usr/share/clash/dashboard/
|
||||
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/main.1560b07adc97ac0ac265.css $(1)/usr/share/clash/dashboard/
|
||||
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/img/ffac0fa1d89f15922b4594863b8b32e9.png $(1)/usr/share/clash/dashboard/img/
|
||||
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/js/1.bundle.693efc9234a08d249710.min.js $(1)/usr/share/clash/dashboard/js/
|
||||
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/js/bundle.693efc9234a08d249710.min.js $(1)/usr/share/clash/dashboard/js/
|
||||
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/js/1.bundle.1560b07adc97ac0ac265.min.js $(1)/usr/share/clash/dashboard/js/
|
||||
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/js/bundle.1560b07adc97ac0ac265.min.js $(1)/usr/share/clash/dashboard/js/
|
||||
$(INSTALL_BIN) ./root/usr/share/clash/yacd/* $(1)/usr/share/clash/yacd/
|
||||
|
||||
$(INSTALL_DATA) ./luasrc/clash.lua $(1)/usr/lib/lua/luci/
|
||||
|
||||
@ -11,7 +11,9 @@ function index()
|
||||
return
|
||||
end
|
||||
|
||||
entry({"admin", "services", "clash"},alias("admin", "services", "clash", "overview"), _("Clash"), 10).dependent = false
|
||||
entry({"admin", "services", "clash"},alias("admin", "services", "clash", "overview"), _("Clash"), 5)
|
||||
page.dependent = true
|
||||
page.acl_depends = { "luci-app-openclash" }
|
||||
entry({"admin", "services", "clash", "overview"},cbi("clash/overview"),_("Overview"), 10).leaf = true
|
||||
entry({"admin", "services", "clash", "client"},cbi("clash/client"),_("Client"), 20).leaf = true
|
||||
|
||||
@ -62,6 +64,13 @@ end
|
||||
|
||||
local fss = require "luci.clash"
|
||||
|
||||
local function uhttp_port()
|
||||
local uhttp_port = luci.sys.exec("uci get uhttpd.main.listen_http |awk -F ':' '{print $NF}'")
|
||||
if uhttp_port ~= "80" then
|
||||
return ":" .. uhttp_port
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local function download_rule()
|
||||
local filename = luci.http.formvalue("filename")
|
||||
@ -82,7 +91,7 @@ function action_update_rule()
|
||||
end
|
||||
|
||||
function action_update()
|
||||
luci.sys.exec("kill $(pgrep /usr/share/clash/update.sh) ; (bash /usr/share/clash/update.sh >/tmp/clash.txt 2>&1) &")
|
||||
luci.sys.exec("kill $(pgrep /usr/share/clash/update.sh) ; (bash /usr/share/clash/update.sh >>/usr/share/clash/clash.txt 2>&1) &")
|
||||
end
|
||||
|
||||
|
||||
@ -310,6 +319,7 @@ function action_status()
|
||||
web = is_web(),
|
||||
clash = is_running(),
|
||||
localip = localip(),
|
||||
uhttp_port = uhttp_port(),
|
||||
dash_port = dash_port(),
|
||||
current_version = current_version(),
|
||||
clash_core = clash_core(),
|
||||
@ -382,15 +392,11 @@ function check_geoip_log()
|
||||
local fdp=tonumber(fs.readfile("/var/run/geoiplog")) or 0
|
||||
local f=io.open("/tmp/geoip_update.txt", "r+")
|
||||
f:seek("set",fdp)
|
||||
local a=f:read(2048000) or ""
|
||||
local a=f:read(2048000) or "."
|
||||
fdp=f:seek()
|
||||
fs.writefile("/var/run/geoiplog",tostring(fdp))
|
||||
f:close()
|
||||
if fs.access("/var/run/geoip_update") then
|
||||
luci.http.write(a)
|
||||
else
|
||||
luci.http.write(a.."\0")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
@ -48,7 +48,7 @@ o:value("1", translate("Enable"))
|
||||
o.description = translate("Set custom rules under Setting=>Others , will take effect when client start")
|
||||
|
||||
o = s:option(Button, "Apply")
|
||||
o.title = translate("Save & Apply")
|
||||
o.title = luci.util.pcdata(translate("Save & Apply"))
|
||||
o.inputtitle = translate("Save & Apply")
|
||||
o.inputstyle = "apply"
|
||||
o.write = function()
|
||||
|
||||
@ -28,7 +28,7 @@ o.description = translate("Download Rule")
|
||||
o.inputstyle = "reload"
|
||||
o.write = function()
|
||||
uci:commit("clash")
|
||||
luci.sys.call("bash /usr/share/clash/rule.sh >>/tmp/clash.txt >/dev/null 2>&1 &")
|
||||
luci.sys.call("bash /usr/share/clash/rule.sh >>/usr/share/clash/clash.txt >/dev/null 2>&1 &")
|
||||
HTTP.redirect(DISP.build_url("admin", "services", "clash", "create"))
|
||||
end
|
||||
|
||||
|
||||
@ -93,7 +93,7 @@ o:depends("tun_mode", 1)
|
||||
|
||||
|
||||
o = s:option(Button, "Apply")
|
||||
o.title = translate("Save & Apply")
|
||||
o.title = luci.util.pcdata(translate("Save & Apply"))
|
||||
o.inputtitle = translate("Save & Apply")
|
||||
o.inputstyle = "apply"
|
||||
o.write = function()
|
||||
|
||||
@ -126,7 +126,7 @@ o.rmempty = true
|
||||
|
||||
o=s:option(Button,"update_geoip")
|
||||
o.inputtitle = translate("Save & Apply")
|
||||
o.title = translate("Save & Apply")
|
||||
o.title = luci.util.pcdata(translate("Save & Apply"))
|
||||
o.inputstyle = "reload"
|
||||
o.write = function()
|
||||
m.uci:commit("clash")
|
||||
|
||||
@ -25,7 +25,7 @@ o:value("24", translate("Every 24 Hours"))
|
||||
o.description = translate("Daily Server subscription update time. Only update config in use")
|
||||
|
||||
o = s:option(Button, "Apply")
|
||||
o.title = translate("Save & Apply")
|
||||
o.title = luci.util.pcdata(translate("Save & Apply"))
|
||||
o.inputtitle = translate("Save & Apply")
|
||||
o.inputstyle = "apply"
|
||||
o.write = function()
|
||||
@ -52,7 +52,7 @@ o.description = translate("Clear Log Time")
|
||||
|
||||
o=s:option(Button,"clear_clear")
|
||||
o.inputtitle = translate("Save & Apply")
|
||||
o.title = translate("Save & Apply")
|
||||
o.title = luci.util.pcdata(translate("Save & Apply"))
|
||||
o.inputstyle = "reload"
|
||||
o.write = function()
|
||||
m.uci:commit("clash")
|
||||
|
||||
@ -87,7 +87,7 @@ o:value("error", "error")
|
||||
o:value("debug", "debug")
|
||||
|
||||
o = s:option(Button, "Apply")
|
||||
o.title = translate("Save & Apply")
|
||||
o.title = luci.util.pcdata(translate("Save & Apply"))
|
||||
o.inputtitle = translate("Save & Apply")
|
||||
o.inputstyle = "apply"
|
||||
o.write = function()
|
||||
|
||||
@ -141,7 +141,7 @@ o:value("linux-mipsle-hardfloat")
|
||||
|
||||
o=s:option(Button,"down_core")
|
||||
o.inputtitle = translate("Save & Apply")
|
||||
o.title = translate("Save & Apply")
|
||||
o.title = luci.util.pcdata(translate("Save & Apply"))
|
||||
o.inputstyle = "reload"
|
||||
o.write = function()
|
||||
k.uci:commit("clash")
|
||||
|
||||
@ -63,13 +63,9 @@ let IP = {
|
||||
throw error;
|
||||
}),
|
||||
parseIPIpip: (ip, elID) => {
|
||||
IP.get(`https://api.skk.moe/network/parseIp/ipip/v3/${ip}`, 'json')
|
||||
IP.get(`https://qqwry.api.skk.moe/${ip}`, 'json')
|
||||
.then(resp => {
|
||||
let x = '';
|
||||
for (let i of resp.data) {
|
||||
x += (i !== '') ? `${i} ` : '';
|
||||
}
|
||||
document.getElementById(elID).innerHTML = x;
|
||||
document.getElementById(elID).innerHTML = resp.data.geo;
|
||||
//$$.getElementById(elID).innerHTML = `${resp.data.country} ${resp.data.regionName} ${resp.data.city} ${resp.data.isp}`;
|
||||
})
|
||||
},
|
||||
@ -126,8 +122,8 @@ var HTTP = {
|
||||
|
||||
}
|
||||
|
||||
function Load()
|
||||
{
|
||||
function Load()
|
||||
{
|
||||
var tbip = document.getElementsByTagName('HEAD').item(0);
|
||||
var tbipScript= document.createElement("script");
|
||||
tbipScript.async = "async";
|
||||
@ -137,7 +133,7 @@ var HTTP = {
|
||||
var sbip = document.getElementsByTagName('HEAD').item(0);
|
||||
var sbipScript= document.createElement("script");
|
||||
sbipScript.async = "async";
|
||||
sbipScript.src='https://api.skk.moe/network/parseIp/ipip/v3';
|
||||
sbipScript.src='https://qqwry.api.skk.moe/';
|
||||
sbip.appendChild( sbipScript);
|
||||
|
||||
|
||||
@ -145,7 +141,11 @@ var HTTP = {
|
||||
const $$ = document;
|
||||
random = parseInt(Math.random() * 100000000);
|
||||
setTimeout("Load()",1000*8);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
var web = document.getElementById('_web');
|
||||
var webb = document.getElementById('_webb');
|
||||
var clash = document.getElementById('_clash');
|
||||
@ -160,14 +160,15 @@ var HTTP = {
|
||||
|
||||
XHR.poll(1, '<%=luci.dispatcher.build_url("admin", "services", "clash", "status")%>', null, function(x, status) {
|
||||
if ( x && x.status == 200 ) {
|
||||
web.innerHTML = status.clash ? '<a type="button" class="btn" style="background-color:black;padding: 5px;" href="http://'+window.location.hostname+':'+status.dash_port+'/ui" target="_blank"/><b><font color="green"><%:DASHBOARD%></font></b></a>' : '<b><font color="red"><%:NOT RUNNING%></font></b>';
|
||||
webb.innerHTML = status.clash ? '<a type="button" class="btn" style="background-color:black;padding: 5px;" href="http://'+window.location.hostname+'/luci-static/yacd?hostname='+ status.localip + '&port=' + status.dash_port + '&secret=' + status.dash_pass +'" target="_blank"/><b><font color="green"><%:DASHBOARD%></font></b></a>' : '<b><font color="red"><%:NOT RUNNING%></font></b>';
|
||||
web.innerHTML = status.clash ? '<a type="button" class="btn" style="background-color:black;padding: 5px;" href="http://'+window.location.hostname+':'+status.dash_port+'/ui" target="_blank"><b><font color="green"><%:DASHBOARD%></font></b></a>' : '<b><font color="red"><%:NOT RUNNING%></font></b>';
|
||||
webb.innerHTML = status.clash ? '<a type="button" class="btn" style="background-color:black;padding: 5px;" href="http://'+window.location.hostname+status.uhttp_port+'/luci-static/yacd?hostname='+ status.localip + '&port=' + status.dash_port + '&secret=' + status.dash_pass +'" target="_blank"><b><font color="green"><%:DASHBOARD%></font></b></a>' : '<b><font color="red"><%:NOT RUNNING%></font></b>';
|
||||
clash.innerHTML = status.clash ? '<b><font color="green"><%:RUNNING%></font> </b>' : '<b><font color="red"><%:NOT RUNNING%></font></b>';
|
||||
ip.innerHTML = status.localip ? '<b><font color="green">'+status.localip+'</font> </b>' : '<em><b><font color="red"><%:NOT SET%></font></b></em>';
|
||||
port.innerHTML = status.dash_port ? '<b><font color="green">'+status.dash_port+'</font> </b>' : '<em><b><font color="red"><%:NOT SET%></font></b></em>';
|
||||
secret.innerHTML = status.dash_pass ? '<b><font color="green">'+status.dash_pass+'</font> </b>' : '<em><b><font color="red"><%:NOT SET%></font></b></em>';
|
||||
emode.innerHTML = status.clash ? '<b><font color="green" style="text-transform: uppercase;">'+status.e_mode+'</font> </b>' : '<b><font color="red"><%:NOT RUNNING%></font></b>'; if(status.typeconf != 0 || status.typeconf != ''){
|
||||
conf.innerHTML = status.typeconf ? '<b><input type="button" class="btn" style="background-color:black;padding: 5px;font-color:green;color:green;font-weight:bold" value="<%:VIEW CONFIG%>" onclick="return view(this)"/></b>' : '<b><font color="red"><%:NOT RUNNING%></font></b>';
|
||||
emode.innerHTML = status.clash ? '<b><font color="green" style="text-transform: uppercase;">'+status.e_mode+'</font> </b>' : '<b><font color="red"><%:NOT RUNNING%></font></b>';
|
||||
if(status.typeconf != 0 || status.typeconf != ''){
|
||||
conf.innerHTML = status.typeconf ? '<b><input type="button" class="btn" style="background-color:black;padding: 5px;font-color:green;color:green;font-weight:bold" value="<%:VIEW CONFIG%>" onclick="return view(this)" /></b>' : '<b><font color="red"><%:NOT RUNNING%></font></b>';
|
||||
}
|
||||
if(status.typeconf==1){
|
||||
conf_path.innerHTML = status.clash ? '<b><font color="green"><%:SUBSCRIBE%> </font></b>' : '<b><font color="red"><%:NOT RUNNING%></font></b>';
|
||||
@ -306,19 +307,20 @@ var HTTP = {
|
||||
<div class="modals-bg">
|
||||
|
||||
<div class="modals">
|
||||
<span><input type="button" class="cbi-button cbi-button-apply" value="<%:Download%>" style=" display:inline;" onclick=" return download_conf()" /></span><br/><span class="close">×</span>
|
||||
<br/><h3 style="margin-left:0;"><%:If config does not show refresh page%></h3><br/>
|
||||
<span><textarea id="cbid.logview.1.conf" style="width:100%;height:80%; font-family:'Lucida Console'; font-size:12px;padding-left:3px;padding-right:22px;" readonly="readonly" wrap="off" rows="25"><%=nixio.fs.readfile("/etc/clash/config.yaml")%></textarea></span>
|
||||
<span><input type="button" class="cbi-button cbi-button-apply" value="<%:Download%>" style=" display:inline;" onclick=" return download_conf()" /></span><br /><span class="close">×</span>
|
||||
<br /><h3 style="margin-left:0;"><%:If config does not show refresh page%></h3><br />
|
||||
<span><textarea id="cbid.logview.1.conf" style="width:100%;height:80%; font-family:'Lucida Console'; font-size:12px;padding-left:3px;padding-right:22px;" readonly="readonly" wrap="off" rows="25"><%=pcdata(nixio.fs.readfile("/etc/clash/config.yaml"))%></textarea></span>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
var btn = document.getElementById("myBtn");
|
||||
var span = document.getElementsByClassName("close")[0];
|
||||
var cfg = document.getElementsByClassName("modals-bg")[0];
|
||||
span.onclick = function() {
|
||||
$(".modals-bg").hide();
|
||||
cfg.style.display = "none";
|
||||
}
|
||||
function view(btn) {
|
||||
$(".modals-bg").show();
|
||||
cfg.style.display = "inline";
|
||||
}
|
||||
|
||||
function createAndDownloadFile(fileName, content) {
|
||||
|
||||
@ -1,26 +1,18 @@
|
||||
<%+cbi/valueheader%>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
|
||||
<textarea id="log" class="cbi-input-textarea" style="width: 100%;" data-update="change" rows="29" readonly="readonly" > </textarea>
|
||||
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
|
||||
var lv = document.getElementById('log');
|
||||
lv.innerText = "Reading..."
|
||||
lv.style.display="inline"
|
||||
XHR.poll(1, '<%=url([[admin]], [[services]], [[clash]], [[logstatus]])%>', null,
|
||||
XHR.poll(3, '<%=url([[admin]], [[services]], [[clash]], [[logstatus]])%>', null,
|
||||
function(x, data) {
|
||||
scroll();
|
||||
var lv = document.getElementById('log');
|
||||
if (x.responseText && lv) {
|
||||
lv.innerHTML += x.responseText;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
function scroll(){
|
||||
var textarea = document.getElementById('log');
|
||||
textarea.scrollTop = textarea.scrollHeight;
|
||||
}
|
||||
scroll();
|
||||
if(x && x.status === 200) {
|
||||
if(typeof(x.responseText) === "string") {
|
||||
lv.insertAdjacentText("beforeend", x.responseText);
|
||||
lv.scrollTop = lv.scrollHeight;
|
||||
}}});
|
||||
//]]>
|
||||
</script>
|
||||
<%+cbi/valuefooter%>
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
#!/bin/bash /etc/rc.common
|
||||
|
||||
START=99
|
||||
STOP=15
|
||||
@ -255,8 +255,8 @@ rules(){
|
||||
|
||||
if [ "${enable_udp}" -eq 1 ]; then
|
||||
|
||||
ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" pref 789
|
||||
ip route add local default dev lo table "$PROXY_ROUTE_TABLE"
|
||||
ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE"
|
||||
ip route add local 0.0.0.0/0 dev lo table "$PROXY_ROUTE_TABLE"
|
||||
|
||||
iptables -t mangle -N clash
|
||||
iptables -t mangle -A clash -d 0.0.0.0/8 -j RETURN
|
||||
@ -273,7 +273,7 @@ rules(){
|
||||
done
|
||||
fi
|
||||
|
||||
iptables -t mangle -A clash -p udp -j TPROXY --on-port "${redir_port}" --tproxy-mark "$PROXY_FWMARK"
|
||||
iptables -t mangle -A clash -p udp -j TPROXY --on-port "${redir_port}" --on-ip 0.0.0.0 --tproxy-mark "$PROXY_FWMARK"
|
||||
iptables -t mangle -A PREROUTING -p udp -j clash
|
||||
|
||||
fi
|
||||
@ -283,13 +283,11 @@ rules(){
|
||||
if [ ! -z "${fake_ip_range}" ];then
|
||||
if [ "${enable_udp}" -eq 1 ]; then
|
||||
iptables -t nat -A OUTPUT -p tcp -d $fake_ip_range -j REDIRECT --to-ports "${redir_port}"
|
||||
iptables -t mangle -A OUTPUT -p udp -d $fake_ip_range -j MARK --set-mark "$PROXY_FWMARK"
|
||||
iptables -t mangle -A OUTPUT -p udp -d $fake_ip_range -j MARK --set-mark "$PROXY_FWMARK"
|
||||
fi
|
||||
else
|
||||
iptables -t nat -A OUTPUT -p tcp -d 198.18.0.1/16 -j REDIRECT --to-ports "${redir_port}"
|
||||
if [ "${enable_udp}" -eq 1 ]; then
|
||||
iptables -t mangle -A OUTPUT -p udp -d 198.18.0.1/16 -j MARK --set-mark "$PROXY_FWMARK"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
|
||||
@ -308,7 +306,7 @@ rules(){
|
||||
fi
|
||||
done
|
||||
fi
|
||||
ip6tables -t mangle -A clash -p udp -j TPROXY --on-port "$proxy_port" --tproxy-mark "$PROXY_FWMARK"
|
||||
ip6tables -t mangle -A clash -p udp -j TPROXY --on-port "$proxy_port" --on-ip 0.0.0.0 --tproxy-mark "$PROXY_FWMARK"
|
||||
ip6tables -t mangle -A PREROUTING -p udp -j clash
|
||||
fi
|
||||
|
||||
|
||||
@ -0,0 +1,11 @@
|
||||
{
|
||||
"luci-app-clash": {
|
||||
"description": "Grant UCI access for luci-app-clash",
|
||||
"read": {
|
||||
"uci": [ "clash" ]
|
||||
},
|
||||
"write": {
|
||||
"uci": [ "clash" ]
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/bash /etc/rc.common
|
||||
. /lib/functions.sh
|
||||
#!/bin/sh
|
||||
. /lib/functions.sh
|
||||
|
||||
CURL_GROUP_CACHE="/usr/share/clashbackup/clash_gorup.json"
|
||||
CURL_NOW_CACHE="/usr/share/clashbackup/clash_now.json"
|
||||
@ -9,10 +9,11 @@ SECRET=$(uci get clash.config.dash_pass 2>/dev/null)
|
||||
LAN_IP=$(uci get network.lan.ipaddr 2>/dev/null |awk -F '/' '{print $1}' 2>/dev/null)
|
||||
PORT=$(uci get clash.config.dash_port 2>/dev/null)
|
||||
|
||||
curl -w %{http_code}"\n" -H "Authorization: Bearer ${SECRET}" -H "Content-Type:application/json" -X GET http://"$LAN_IP":"$PORT"/proxies > "$CURL_CACHE" 2>/dev/null
|
||||
if [ "$(sed -n '$p' "$CURL_CACHE")" -eq "200" ]; then
|
||||
curl -m 5 --retry 2 -w %{http_code}"\n" -H "Authorization: Bearer ${SECRET}" -H "Content-Type:application/json" -X GET http://"$LAN_IP":"$PORT"/proxies > "$CURL_CACHE" 2>/dev/null
|
||||
if [ "$(sed -n '$p' "$CURL_CACHE" 2>/dev/null)" = "200" ]; then
|
||||
mkdir -p /etc/openclash/history 2>/dev/null
|
||||
cat "$CURL_CACHE" |jsonfilter -e '@["proxies"][@.type="Selector"]["name"]' > "$CURL_GROUP_CACHE" 2>/dev/null
|
||||
cat "$CURL_CACHE" |jsonfilter -e '@["proxies"][@.type="Selector"]["now"]' > "$CURL_NOW_CACHE" 2>/dev/null
|
||||
awk 'NR==FNR{a[i]=$0;i++}NR>FNR{print a[j]"#*#"$0;j++}' "$CURL_GROUP_CACHE" "$CURL_NOW_CACHE" > "$HISTORY_PATH" 2>/dev/null
|
||||
awk 'NR==FNR{a[i]=$0;i++}NR>FNR{print a[j]"#*#"$0;j++}' "$CURL_GROUP_CACHE" "$CURL_NOW_CACHE" > "$HISTORY_PATH" 2>/dev/null
|
||||
fi
|
||||
rm -rf /usr/share/clashbackup/clash_*.json 2>/dev/null
|
||||
|
||||
@ -48,14 +48,14 @@ else
|
||||
sleep 1
|
||||
|
||||
if [ "$subtype" = "clash" ];then
|
||||
wget -c4 --no-check-certificate --user-agent="Clash/OpenWRT" $clash_url -O 2>&1 >1 $CONFIG_YAML
|
||||
curl -sL --connect-timeout 10 --retry 2 "$clash_url" -O 2>&1 >1 $CONFIG_YAML
|
||||
if [ "$?" -eq "0" ]; then
|
||||
echo "${config_name}.yaml#$clash_url#$subtype" >>/usr/share/clashbackup/confit_list.conf
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$subtype" = "ssr2clash" ];then
|
||||
wget -c4 --no-check-certificate --user-agent="Clash/OpenWRT" "https://ssrsub2clashr.herokuapp.com/ssrsub2clash?sub=$ssr_url" -O 2>&1 >1 $CONFIG_YAML
|
||||
curl -sL --connect-timeout 10 --retry 2 "https://ssrsub2clashr.herokuapp.com/ssrsub2clash?sub=$ssr_url" -O 2>&1 >1 $CONFIG_YAML
|
||||
if [ "$?" -eq "0" ]; then
|
||||
echo "${config_name}.yaml#$ssr_url#$subtype" >>/usr/share/clashbackup/confit_list.conf
|
||||
CONFIG_YAMLL="/tmp/conf"
|
||||
@ -100,7 +100,7 @@ else
|
||||
fi
|
||||
|
||||
if [ "$subtype" = "v2clash" ];then
|
||||
wget -c4 --no-check-certificate --user-agent="Clash/OpenWRT" "https://tgbot.lbyczf.com/v2rayn2clash?url=$v2_url" -O 2>&1 >1 $CONFIG_YAML
|
||||
curl -sL --connect-timeout 10 --retry 2 "https://tgbot.lbyczf.com/v2rayn2clash?url=$v2_url" -O 2>&1 >1 $CONFIG_YAML
|
||||
if [ "$?" -eq "0" ]; then
|
||||
echo "${config_name}.yaml#$v2_url#$subtype" >>/usr/share/clashbackup/confit_list.conf
|
||||
fi
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
fi
|
||||
RULE_FILE_DIR="/usr/share/clash/rules/g_rules/$RULE_FILE_NAME"
|
||||
TMP_RULE_DIR="/tmp/$RULE_FILE_NAME"
|
||||
LOG_FILE="/tmp/clash.txt"
|
||||
LOG_FILE="/usr/share/clash/clash.txt"
|
||||
REAL_LOG="/usr/share/clash/clash_real.txt"
|
||||
|
||||
|
||||
|
||||
@ -1 +1 @@
|
||||
<!doctype html><html lang="en" dir="ltr"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel="icon" type="image/x-icon" href="https://cdn.jsdelivr.net/gh/Dreamacro/clash/docs/logo.png"/><title>Clash Dashboard</title><link href="main.693efc9234a08d249710.css" rel="stylesheet"></head><body><div id="root"></div><script src="js/1.bundle.693efc9234a08d249710.min.js"></script><script src="js/bundle.693efc9234a08d249710.min.js"></script></body></html>
|
||||
<!doctype html><html lang="en" dir="ltr"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel="icon" type="image/x-icon" href="https://cdn.jsdelivr.net/gh/Dreamacro/clash/docs/logo.png"/><title>Clash Dashboard</title><link href="main.1560b07adc97ac0ac265.css" rel="stylesheet"></head><body><div id="root"></div><script src="js/1.bundle.1560b07adc97ac0ac265.min.js"></script><script src="js/bundle.1560b07adc97ac0ac265.min.js"></script></body></html>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
1.6.8
|
||||
1.6.9b
|
||||
|
||||
@ -48,7 +48,7 @@ fi
|
||||
if [ "${create}" -eq 1 ];then
|
||||
|
||||
if [ $lang == "en" ] || [ $lang == "auto" ];then
|
||||
echo "Strating to Create Custom Config.. " >$REAL_LOG
|
||||
echo "Starting to Create Custom Config.. " >$REAL_LOG
|
||||
elif [ $lang == "zh_cn" ];then
|
||||
echo "开始创建自定义配置..." >$REAL_LOG
|
||||
fi
|
||||
|
||||
@ -1,31 +1,37 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
if [ -f /usr/share/clashbackup/history ];then
|
||||
|
||||
HISTORY_PATH="/usr/share/clashbackup/history"
|
||||
SECRET=$(uci get clash.config.dash_pass 2>/dev/null)
|
||||
LAN_IP=$(uci get network.lan.ipaddr 2>/dev/null |awk -F '/' '{print $1}' 2>/dev/null)
|
||||
PORT=$(uci get clash.config.dash_port 2>/dev/null)
|
||||
|
||||
urlencode() {
|
||||
local data
|
||||
if [ "$#" != 1 ]; then
|
||||
return 1
|
||||
if [ "$#" -eq "1" ]; then
|
||||
data=$(curl -s -o /dev/null -w %{url_effective} --get --data-urlencode "$1" "")
|
||||
if [ ! -z "$data" ]; then
|
||||
echo "${data##/?}"
|
||||
fi
|
||||
fi
|
||||
data=$(curl -s -o /dev/null -w %{url_effective} --get --data-urlencode "$1" "")
|
||||
if [ ! -z "$data" ]; then
|
||||
echo "${data##/?}"
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
cat $HISTORY_PATH |while read line
|
||||
do
|
||||
if [ -z "$(echo $line |grep "#*#")" ]; then
|
||||
continue
|
||||
else
|
||||
GORUP_NAME=$(urlencode "$(echo $line |awk -F '#*#' '{print $1}')")
|
||||
NOW_NAME=$(echo $line |awk -F '#*#' '{print $3}')
|
||||
curl -H "Authorization: Bearer ${SECRET}" -H "Content-Type:application/json" -X PUT -d '{"name":"'"$NOW_NAME"'"}' http://"$LAN_IP":"$PORT"/proxies/"$GORUP_NAME" >/dev/null 2>&1
|
||||
fi
|
||||
done >/dev/null 2>&1
|
||||
|
||||
fi
|
||||
|
||||
GROUP_STATE() {
|
||||
echo "$(curl -m 5 -w %{http_code}"\n" -H "Authorization: Bearer ${SECRET}" -H "Content-Type:application/json" -X GET http://"$LAN_IP":"$PORT"/proxies/"$1" 2>/dev/null |sed -n '$p' 2>/dev/null)"
|
||||
}
|
||||
|
||||
restore_history() {
|
||||
GROUP_NAME=$(urlencode "$GROUP_NAME")
|
||||
NOW_NAME=$(echo $line |awk -F '#*#' '{print $3}')
|
||||
GROUP_STATE=$(GROUP_STATE "$GROUP_NAME")
|
||||
GROUP_STATE_NUM=0
|
||||
while ( [ ! -z "$(pidof clash)" ] && [ "$GROUP_STATE" != "200" ] && [ "$GROUP_STATE_NUM" -le 1 ] )
|
||||
do
|
||||
sleep 3
|
||||
GROUP_STATE_NUM=$(expr "$GROUP_STATE_NUM" + 1)
|
||||
GROUP_STATE=$(GROUP_STATE "$GROUP_NAME")
|
||||
done
|
||||
curl -m 5 --retry 2 -H "Authorization: Bearer ${SECRET}" -H "Content-Type:application/json" -X PUT -d '{"name":"'"$NOW_NAME"'"}' http://"$LAN_IP":"$PORT"/proxies/"$GROUP_NAME" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
fi
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
rule=$(uci get clash.config.rule_url 2>/dev/null)
|
||||
RULE_YAML="/tmp/Rule"
|
||||
|
||||
wget --no-check-certificate $rule -O 2>&1 >1 $RULE_YAML
|
||||
curl -sL --connect-timeout 10 --retry 2 "$rule" -O 2>&1 >1 $RULE_YAML
|
||||
|
||||
if [ -f "$RULE_YAML" ]; then
|
||||
status=$(egrep '^ {0,}Rule:' /tmp/Rule)
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,42 +1 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<link rel="shortcut icon" href="yacd.ico">
|
||||
<link rel="icon" type="image/png" sizes="64x64" href="yacd-64.png">
|
||||
<link rel="icon" type="image/png" sizes="128x128" href="yacd-128.png">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name=viewport content="width=device-width, initial-scale=1">
|
||||
<meta name="application-name" content="yacd">
|
||||
<meta name="description" content="Yet Another Clash Dashboard">
|
||||
<meta name="theme-color" content="#202020">
|
||||
<title>yacd - Yet Another Clash Dashboard</title>
|
||||
<link href="https://fonts.loli.net/css?family=Merriweather+Sans:400,700|Roboto+Mono&display=swap" rel="stylesheet">
|
||||
<!-- <link rel="prefetch" href="https://cdn.jsdelivr.net/npm/@hsjs/fonts@0.0.1/robotomono/v5/L0x5DF4xlVMF-BfR8bXMIjhLq3-cXbKD.woff2"> -->
|
||||
<!-- <link rel="prefetch" href="https://fonts.loli.net/css?family=Merriweather+Sans:400,700&display=swap" rel="stylesheet"> -->
|
||||
<meta property="og:image" content="https://user-images.githubusercontent.com/1166872/47304841-536f3d80-d65a-11e8-8908-1917127dafc5.png">
|
||||
<meta property="og:site_name" content="yacd">
|
||||
<meta property="og:type" content="object">
|
||||
<meta property="og:title" content="yacd">
|
||||
<meta property="og:url" content="http://yacd.haishan.me">
|
||||
<meta property="og:description" content="Yet Another Clash Dashboard">
|
||||
|
||||
|
||||
<link href="app.f7858f54039721e8f8e8.css" rel="stylesheet">
|
||||
|
||||
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
||||
|
||||
<script src="runtime.c72e8723983b31413a8e.js" type="text/javascript"></script>
|
||||
|
||||
<script src="core-js~app.e768d5b23b7e7ef5d68d.js" type="text/javascript"></script>
|
||||
|
||||
<script src="react~app.71e146262a2c1f21d27e.js" type="text/javascript"></script>
|
||||
|
||||
<script src="app.97da0bf63bfa93de767f.js" type="text/javascript"></script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
<!doctype html><html lang="en"><head><meta charset="UTF-8"><link rel="shortcut icon" href="yacd.ico"><link rel="icon" type="image/png" sizes="64x64" href="yacd-64.png"><link rel="icon" type="image/png" sizes="128x128" href="yacd-128.png"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="application-name" content="yacd"><meta name="description" content="Yet Another Clash Dashboard"><meta name="theme-color" content="#202020"><title>yacd - Yet Another Clash Dashboard</title><link href="https://fonts.googleapis.com/css2?family=Merriweather+Sans:wght@400;700&family=Roboto+Mono&display=swap" rel="stylesheet"><meta property="og:image" content="https://user-images.githubusercontent.com/1166872/47304841-536f3d80-d65a-11e8-8908-1917127dafc5.png"><meta property="og:site_name" content="yacd"><meta property="og:type" content="object"><meta property="og:title" content="yacd"><meta property="og:url" content="http://yacd.haishan.me"><meta property="og:description" content="Yet Another Clash Dashboard"><script defer="defer" src="runtime.19a1a1c098f3d2fbd54e.js"></script><script defer="defer" src="core-js~app.b214178cdb71012cd622.js"></script><script defer="defer" src="react~app.e2d573992419eb24e61b.js"></script><script defer="defer" src="app.1de83e4934f843dc8d9b.js"></script><link href="app.6c8a97d4cbae5f4b8f38.css" rel="stylesheet"></head><body><div id="app"></div></body></html>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,7 +0,0 @@
|
||||
._37wt2_a2Gx{display:flex;align-items:center}._37wt2_a2Gx .L80zPM0Rx0{display:inline-flex;transform:rotate(0deg);transition:transform .3s}._37wt2_a2Gx .L80zPM0Rx0._36RO7_wtuv{transform:rotate(180deg)}._37wt2_a2Gx .L80zPM0Rx0:focus{outline:var(--color-focus-blue) solid 1px}._2XKN3NArpV{margin-left:5px}._1s98xvUoBx{font-family:var(--font-normal);font-size:.75em;margin-left:3px;padding:2px 7px;display:inline-flex;justify-content:center;align-items:center;background-color:var(--bg-near-transparent);border-radius:30px}
|
||||
._2V-RqIAl7n{border-radius:20px;color:#eee;font-size:.6em}@media screen and (min-width:30em){._2V-RqIAl7n{font-size:1em}}
|
||||
.NpfXwxWAxo{position:relative;padding:5px;border-radius:8px;overflow:hidden;max-width:280px;background-color:var(--color-bg-proxy)}@media screen and (min-width:30em){.NpfXwxWAxo{min-width:200px;border-radius:10px;padding:10px}}.NpfXwxWAxo._2zD7drviYH{background-color:var(--color-focus-blue);color:#ddd}.NpfXwxWAxo._2bylJNYYdN{opacity:.5}._1rVl-Kdmss{font-family:var(--font-mono);font-size:.6em}@media screen and (min-width:30em){._1rVl-Kdmss{font-size:1em}}.aS2noEcBcP{display:flex;align-items:center;justify-content:space-between}._3kdi5nima5{width:100%;overflow:hidden;text-overflow:ellipsis;margin-bottom:5px;font-size:.85em}@media screen and (min-width:30em){._3kdi5nima5{font-size:1.1em}}._3NpxWygDxO{width:12px;height:12px;border-radius:8px}._3NpxWygDxO ._2zD7drviYH{outline:1px solid pink}
|
||||
._3PCSxT0l14{margin-bottom:12px}._1yYRIyvlRd{display:flex;flex-wrap:wrap;margin-top:8px}._1OcDlvlM5R{margin-right:5px;margin-bottom:5px;transition:transform .2s ease-in-out}@media screen and (min-width:30em){._1OcDlvlM5R{margin-right:10px;margin-bottom:10px}}._1OcDlvlM5R._3oAxPKtZFv{cursor:pointer}._1OcDlvlM5R._3oAxPKtZFv:hover{transform:translateY(-2px)}
|
||||
._3GVE9k27aM{margin-bottom:12px}._3GVE9k27aM small{color:#777}._1PV2l5z2zN{padding:10px 15px}@media screen and (min-width:30em){._1PV2l5z2zN{padding:10px 40px}}._1b5XrAhEUm{display:flex}._1b5XrAhEUm button{margin:0 5px}._1b5XrAhEUm button:first-child{margin-left:0}._2t6Q6BkZ73{display:flex;justify-content:center;align-items:center;cursor:pointer}
|
||||
.rtf{box-sizing:border-box;margin:25px;position:fixed;white-space:nowrap;z-index:9998;padding-left:0;list-style:none}.rtf.open .rtf--mb>*{transform-origin:center center;transform:rotate(315deg);transition:transform .2s ease-in-out}.rtf.open .rtf--mb>ul{list-style:none;margin:0;padding:0}.rtf.open .rtf--ab__c:hover>span,.rtf.open .rtf--ab__c>span.always-show{transition:opacity .2s ease-in-out;opacity:.9}.rtf.open .rtf--ab__c:first-child{transform:translateY(-60px) scale(1);transition-delay:.03s}.rtf.open .rtf--ab__c:first-child.top{transform:translateY(60px) scale(1)}.rtf.open .rtf--ab__c:nth-child(2){transform:translateY(-120px) scale(1);transition-delay:.09s}.rtf.open .rtf--ab__c:nth-child(2).top{transform:translateY(120px) scale(1)}.rtf.open .rtf--ab__c:nth-child(3){transform:translateY(-180px) scale(1);transition-delay:.12s}.rtf.open .rtf--ab__c:nth-child(3).top{transform:translateY(180px) scale(1)}.rtf.open .rtf--ab__c:nth-child(4){transform:translateY(-240px) scale(1);transition-delay:.15s}.rtf.open .rtf--ab__c:nth-child(4).top{transform:translateY(240px) scale(1)}.rtf.open .rtf--ab__c:nth-child(5){transform:translateY(-300px) scale(1);transition-delay:.18s}.rtf.open .rtf--ab__c:nth-child(5).top{transform:translateY(300px) scale(1)}.rtf.open .rtf--ab__c:nth-child(6){transform:translateY(-360px) scale(1);transition-delay:.21s}.rtf.open .rtf--ab__c:nth-child(6).top{transform:translateY(360px) scale(1)}.rtf--mb__c{padding:25px;margin:-25px}.rtf--mb__c :last-child{margin-bottom:0}.rtf--mb__c:hover>span,.rtf--mb__c>span.always-show{transition:opacity .2s ease-in-out;opacity:.9}.rtf--mb__c>span{opacity:0;transition:opacity .2s ease-in-out;position:absolute;top:50%;transform:translateY(-50%);margin-right:6px;margin-left:4px;background:rgba(0,0,0,.75);padding:2px 4px;border-radius:2px;color:#fff;font-size:13px;box-shadow:0 0 4px rgba(0,0,0,.14),0 4px 8px rgba(0,0,0,.28)}.rtf--mb__c>span.right{right:100%}.rtf--mb{height:56px;width:56px;z-index:9999;background:#387cec;display:inline-flex;justify-content:center;align-items:center;position:relative;border:none;border-radius:50%;box-shadow:0 0 4px rgba(0,0,0,.14),0 4px 8px rgba(0,0,0,.28);cursor:pointer;outline:none;padding:0;-webkit-user-drag:none;font-weight:700;color:#f1f1f1;font-size:18px}.rtf--ab__c,.rtf--mb>*{transition:transform .2s ease-in-out}.rtf--ab__c{display:block;position:absolute;top:0;right:1px;padding:10px 0;margin:-10px 0}.rtf--ab__c>span{opacity:0;transition:opacity .2s ease-in-out;position:absolute;top:50%;transform:translateY(-50%);margin-right:6px;background:rgba(0,0,0,.75);padding:2px 4px;border-radius:2px;color:#fff;font-size:13px;box-shadow:0 0 4px rgba(0,0,0,.14),0 4px 8px rgba(0,0,0,.28)}.rtf--ab__c>span.right{right:100%}.rtf--ab__c:first-child{transform:translateY(-60px) scale(0);transition-delay:.21s}.rtf--ab__c:first-child.top{transform:translateY(60px) scale(0)}.rtf--ab__c:nth-child(2){transform:translateY(-120px) scale(0);transition-delay:.18s}.rtf--ab__c:nth-child(2).top{transform:translateY(120px) scale(0)}.rtf--ab__c:nth-child(3){transform:translateY(-180px) scale(0);transition-delay:.15s}.rtf--ab__c:nth-child(3).top{transform:translateY(180px) scale(0)}.rtf--ab__c:nth-child(4){transform:translateY(-240px) scale(0);transition-delay:.12s}.rtf--ab__c:nth-child(4).top{transform:translateY(240px) scale(0)}.rtf--ab__c:nth-child(5){transform:translateY(-300px) scale(0);transition-delay:.09s}.rtf--ab__c:nth-child(5).top{transform:translateY(300px) scale(0)}.rtf--ab__c:nth-child(6){transform:translateY(-360px) scale(0);transition-delay:.03s}.rtf--ab__c:nth-child(6).top{transform:translateY(360px) scale(0)}.rtf--ab{height:48px;width:48px;background-color:#aaa;display:inline-flex;justify-content:center;align-items:center;position:relative;border:none;border-radius:50%;box-shadow:0 0 4px rgba(0,0,0,.14),0 4px 8px rgba(0,0,0,.28);cursor:pointer;outline:none;padding:0;-webkit-user-drag:none;font-weight:700;color:#f1f1f1;margin-right:4px;font-size:16px;z-index:10000}.rtf--ab:hover{background:#387cec;border:1px solid #387cec;color:#fff}.rtf--ab:focus{border-color:var(--color-focus-blue)}
|
||||
._1myfcMimT9{padding:10px 15px}@media screen and (min-width:30em){._1myfcMimT9{padding:10px 40px}}
|
||||
@ -0,0 +1,9 @@
|
||||
._37wt2_a2Gx{display:flex;align-items:center}._37wt2_a2Gx .L80zPM0Rx0{display:inline-flex;-ms-transform:rotate(0deg);transform:rotate(0deg);transition:transform .3s}._37wt2_a2Gx .L80zPM0Rx0._36RO7_wtuv{-ms-transform:rotate(180deg);transform:rotate(180deg)}._37wt2_a2Gx .L80zPM0Rx0:focus{outline:var(--color-focus-blue) solid 1px}._2XKN3NArpV{margin-left:5px}._1s98xvUoBx{font-family:var(--font-normal);font-size:.75em;margin-left:3px;padding:2px 7px;display:inline-flex;justify-content:center;align-items:center;background-color:var(--bg-near-transparent);border-radius:30px}
|
||||
._2V-RqIAl7n{border-radius:20px;color:#eee;font-size:.6em}@media screen and (min-width:30em){._2V-RqIAl7n{font-size:1em}}
|
||||
.NpfXwxWAxo{position:relative;padding:5px;border-radius:8px;overflow:hidden;max-width:280px;background-color:var(--color-bg-proxy)}@media screen and (min-width:30em){.NpfXwxWAxo{min-width:200px;border-radius:10px;padding:10px}}.NpfXwxWAxo._2zD7drviYH{background-color:var(--color-focus-blue);color:#ddd}.NpfXwxWAxo._2bylJNYYdN{opacity:.5}._1rVl-Kdmss{font-family:var(--font-mono);font-size:.6em}@media screen and (min-width:30em){._1rVl-Kdmss{font-size:1em}}.aS2noEcBcP{display:flex;align-items:center;justify-content:space-between}._3kdi5nima5{width:100%;overflow:hidden;text-overflow:ellipsis;margin-bottom:5px;font-size:.85em}@media screen and (min-width:30em){._3kdi5nima5{font-size:1.1em}}._3NpxWygDxO{width:12px;height:12px;border-radius:8px}._3NpxWygDxO ._2zD7drviYH{outline:1px solid pink}
|
||||
._3PCSxT0l14{margin-bottom:12px}._1yYRIyvlRd{display:flex;flex-wrap:wrap;margin-top:8px}._1OcDlvlM5R{margin-right:5px;margin-bottom:5px;transition:transform .2s ease-in-out}@media screen and (min-width:30em){._1OcDlvlM5R{margin-right:10px;margin-bottom:10px}}._1OcDlvlM5R._3oAxPKtZFv{cursor:pointer}._1OcDlvlM5R._3oAxPKtZFv:hover{-ms-transform:translateY(-2px);transform:translateY(-2px)}
|
||||
._2OKIZuCJtW{background-color:rgba(0,0,0,.6)}._1y6NeshM4O{position:absolute;background-color:var(--bg-modal);color:var(--color-text);line-height:1.4;opacity:.6;transition:all .3s ease;-ms-transform:translate(-50%,-50%) scale(1.2);transform:translate(-50%,-50%) scale(1.2);box-shadow:0 4px 4px rgba(0,0,0,.12),0 16px 32px rgba(0,0,0,.24)}._25KARE4UsT{opacity:1;-ms-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}
|
||||
.t6lsDKNXTK{height:30px;width:100%;padding-left:8px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--color-background);color:var(--color-text);padding-right:20px;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='8' height='24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 7l3 4H1l3-4zM4 17l-3-4h6l-3 4z' fill='%23999'/%3E%3C/svg%3E");border-radius:4px;border-image:initial;border:1px solid var(--select-border-color);transition:all .1s ease 0s;background-position:calc(100% - 8px) 50%;background-repeat:no-repeat}.t6lsDKNXTK:focus,.t6lsDKNXTK:hover{border-color:#343434;outline:none!important;color:var(--color-text-highlight);background-image:var(--select-bg-hover)}.t6lsDKNXTK option{background-color:var(--color-background)}
|
||||
._1h4Qixiwxj{max-width:85vw;width:400px;display:flex;justify-content:space-between;align-items:center;font-size:13px;padding:13px 0}hr{height:1px;background-color:var(--color-separator);border:none;outline:none;margin:1rem 0}
|
||||
._3GVE9k27aM{margin-bottom:12px}._3GVE9k27aM small{color:#777}._1PV2l5z2zN{padding:10px 15px}@media screen and (min-width:30em){._1PV2l5z2zN{padding:10px 40px}}._1b5XrAhEUm{display:flex}._1b5XrAhEUm button{margin:0 5px}._1b5XrAhEUm button:first-child{margin-left:0}._2t6Q6BkZ73{display:flex;justify-content:center;align-items:center;cursor:pointer}
|
||||
._39uWX_-wQq{position:-webkit-sticky;position:sticky;top:0;z-index:1;background:var(--color-background);display:flex;justify-content:flex-end;padding:5px 5px 2px 0}._1myfcMimT9{padding:10px 15px}@media screen and (min-width:30em){._1myfcMimT9{padding:10px 40px}}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{BVyM:function(e,t,a){"use strict";a.r(t);var r=a("ODXe"),n=a("q1tI"),i=a.n(n),o=a("iR1w"),c=a("OAQO"),l=a("9cvt"),u=a("WfPo"),s=a("OADI"),f=a("DKqX"),p=a("17x9"),d=a.n(p),m=a("xrux"),v=a.n(m),b={_default:"#59caf9",DIRECT:"#f5bc41",REJECT:"#cb3166"};function y(e){var t=e.type,a=e.payload,r=e.proxy,n=e.id,o=function(e){var t=e.proxy,a=b._default;return b[t]&&(a=b[t]),{color:a}}({proxy:r});return i.a.createElement("div",{className:v.a.rule},i.a.createElement("div",{className:v.a.left},n),i.a.createElement("div",null,i.a.createElement("div",{className:v.a.b},a),i.a.createElement("div",{className:v.a.a},i.a.createElement("div",{className:v.a.type},t),i.a.createElement("div",{style:o},r))))}y.propTypes={id:d.a.number,type:d.a.string,payload:d.a.string,proxy:d.a.string};var O=y,E=a("II4a"),h=a("EwbC"),w=Object(u.a)((function(e){return{searchText:Object(h.d)(e),updateSearchText:h.f}}))(E.a),g=a("Kv4h"),x=i.a.memo,j=i.a.useEffect,k=i.a.useMemo,C=i.a.useCallback;function N(e,t){return t[e].id}var I=x((function(e){var t=e.index,a=e.style,r=e.data[t];return i.a.createElement("div",{style:a},i.a.createElement(O,r))}),o.b);t.default=Object(u.a)((function(e){return{apiConfig:Object(s.b)(e),rules:Object(h.c)(e)}}))((function(e){var t=e.dispatch,a=e.apiConfig,n=e.rules,u=C((function(){t(Object(h.a)(a))}),[a,t]);j((function(){t(Object(h.b)(a))}),[t,a]);var s=Object(g.a)(),p=Object(r.a)(s,2),d=p[0],m=p[1],v=k((function(){return i.a.createElement(c.a,{width:16})}),[]);return i.a.createElement("div",null,i.a.createElement(f.a,{title:"Rules"}),i.a.createElement(w,null),i.a.createElement("div",{ref:d,style:{paddingBottom:30}},i.a.createElement(o.a,{height:m-30,width:"100%",itemCount:n.length,itemSize:80,itemData:n,itemKey:N},I)),i.a.createElement(l.b,{icon:v,text:"Refresh",onClick:u,position:l.c}))}))},OAQO:function(e,t,a){"use strict";var r=a("q1tI"),n=a.n(r),i=a("17x9"),o=a.n(i);function c(){return(c=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var r in a)Object.prototype.hasOwnProperty.call(a,r)&&(e[r]=a[r])}return e}).apply(this,arguments)}function l(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},i=Object.keys(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var u=Object(r.forwardRef)((function(e,t){var a=e.color,r=void 0===a?"currentColor":a,i=e.size,o=void 0===i?24:i,u=l(e,["color","size"]);return n.a.createElement("svg",c({ref:t,xmlns:"http://www.w3.org/2000/svg",width:o,height:o,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},u),n.a.createElement("polyline",{points:"23 4 23 10 17 10"}),n.a.createElement("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"}))}));u.propTypes={color:o.a.string,size:o.a.oneOfType([o.a.string,o.a.number])},u.displayName="RotateCw",t.a=u},xrux:function(e,t,a){e.exports={rule:"_3eSLieOhVX",left:"_2n1pW09UvV",a:"t1XJIwvW7A",b:"_1fNf8kj0HA",type:"_3yJmN0tON0"}}}]);
|
||||
@ -1 +0,0 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{BVyM:function(e,t,a){"use strict";a.r(t);var r=a("ODXe"),n=a("q1tI"),c=a.n(n),i=a("5Wrh"),l=a("iR1w"),o=a("OAQO"),u=a("WfPo"),s=a("OADI"),f=a("DKqX"),p=a("17x9"),m=a.n(p),d=a("xrux"),v=a.n(d),b={_default:"#59caf9",DIRECT:"#f5bc41",REJECT:"#cb3166"};function y(e){var t=e.type,a=e.payload,r=e.proxy,n=e.id,i=function(e){var t=e.proxy,a=b._default;return b[t]&&(a=b[t]),{color:a}}({proxy:r});return c.a.createElement("div",{className:v.a.rule},c.a.createElement("div",{className:v.a.left},n),c.a.createElement("div",null,c.a.createElement("div",{className:v.a.b},a),c.a.createElement("div",{className:v.a.a},c.a.createElement("div",{className:v.a.type},t),c.a.createElement("div",{style:i},r))))}y.propTypes={id:m.a.number,type:m.a.string,payload:m.a.string,proxy:m.a.string};var O=y,E=a("II4a"),h=a("EwbC"),g=Object(u.a)((function(e){return{searchText:Object(h.d)(e),updateSearchText:h.f}}))(E.a),w=a("Kv4h"),x=c.a.memo,j=c.a.useEffect,k=c.a.useMemo,C=c.a.useCallback;function N(e,t){return t[e].id}var I=x((function(e){var t=e.index,a=e.style,r=e.data[t];return c.a.createElement("div",{style:a},c.a.createElement(O,r))}),l.b);t.default=Object(u.a)((function(e){return{apiConfig:Object(s.b)(e),rules:Object(h.c)(e)}}))((function(e){var t=e.dispatch,a=e.apiConfig,n=e.rules,u=C((function(){t(Object(h.a)(a))}),[a,t]);j((function(){t(Object(h.b)(a))}),[t,a]);var s=Object(w.a)(),p=Object(r.a)(s,2),m=p[0],d=p[1],v=k((function(){return c.a.createElement(o.a,{width:16})}),[]);return c.a.createElement("div",null,c.a.createElement(f.a,{title:"Rules"}),c.a.createElement(g,null),c.a.createElement("div",{ref:m,style:{paddingBottom:30}},c.a.createElement(l.a,{height:d-30,width:"100%",itemCount:n.length,itemSize:80,itemData:n,itemKey:N},I)),c.a.createElement("div",{className:"fabgrp"},c.a.createElement(i.a,{text:"Refresh",start:v,onClick:u})))}))},OAQO:function(e,t,a){"use strict";var r=a("q1tI"),n=a.n(r),c=a("17x9"),i=a.n(c);function l(){return(l=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var r in a)Object.prototype.hasOwnProperty.call(a,r)&&(e[r]=a[r])}return e}).apply(this,arguments)}function o(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},c=Object.keys(e);for(r=0;r<c.length;r++)a=c[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)a=c[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var u=function(e){var t=e.color,a=e.size,r=o(e,["color","size"]);return n.a.createElement("svg",l({xmlns:"http://www.w3.org/2000/svg",width:a,height:a,viewBox:"0 0 24 24",fill:"none",stroke:t,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},r),n.a.createElement("polyline",{points:"23 4 23 10 17 10"}),n.a.createElement("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"}))};u.propTypes={color:i.a.string,size:i.a.oneOfType([i.a.string,i.a.number])},u.defaultProps={color:"currentColor",size:"24"},t.a=u},xrux:function(e,t,a){e.exports={rule:"_3eSLieOhVX",left:"_2n1pW09UvV",a:"t1XJIwvW7A",b:"_1fNf8kj0HA",type:"_3yJmN0tON0"}}}]);
|
||||
@ -1 +1 @@
|
||||
!function(e){function t(t){for(var n,o,i=t[0],l=t[1],s=t[2],f=t[3]||[],d=0,h=[];d<i.length;d++)o=i[d],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&h.push(a[o][0]),a[o]=0;for(n in l)Object.prototype.hasOwnProperty.call(l,n)&&(e[n]=l[n]);for(p&&p(t),u.push.apply(u,f);h.length;)h.shift()();return c.push.apply(c,s||[]),r()}function r(){for(var e,t=0;t<c.length;t++){for(var r=c[t],n=!0,o=1;o<r.length;o++){var s=r[o];0!==a[s]&&(n=!1)}n&&(c.splice(t--,1),e=l(l.s=r[0]))}return 0===c.length&&(u.forEach((function(e){if(void 0===a[e]){a[e]=null;var t=document.createElement("link");l.nc&&t.setAttribute("nonce",l.nc),t.rel="prefetch",t.as="script",t.href=i(e),document.head.appendChild(t)}})),u.length=0),e}var n={},o={5:0},a={5:0},c=[],u=[];function i(e){return l.p+""+({2:"proxies",4:"rules",6:"vendors~chartjs",7:"vendors~proxies"}[e]||e)+"."+{2:"bdb3659841c50b543b0e",4:"efdab873e544c5738c5c",6:"7079553c634b376d7c1c",7:"0ab0478edefe25bc30a4",8:"cfac5eece126ce875152"}[e]+".js"}function l(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,l),r.l=!0,r.exports}l.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{2:1,4:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({2:"proxies",4:"rules",6:"vendors~chartjs",7:"vendors~proxies"}[e]||e)+"."+{2:"cea47222a686cf441cb9",4:"664f8b737878361937cb",6:"31d6cfe0d16ae931b73c",7:"31d6cfe0d16ae931b73c",8:"31d6cfe0d16ae931b73c"}[e]+".css",a=l.p+n,c=document.getElementsByTagName("link"),u=0;u<c.length;u++){var i=(f=c[u]).getAttribute("data-href")||f.getAttribute("href");if("stylesheet"===f.rel&&(i===n||i===a))return t()}var s=document.getElementsByTagName("style");for(u=0;u<s.length;u++){var f;if((i=(f=s[u]).getAttribute("data-href"))===n||i===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,c=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");c.code="CSS_CHUNK_LOAD_FAILED",c.request=n,delete o[e],d.parentNode.removeChild(d),r(c)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var c,u=document.createElement("script");u.charset="utf-8",u.timeout=120,l.nc&&u.setAttribute("nonce",l.nc),u.src=i(e);var s=new Error;c=function(t){u.onerror=u.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;s.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",s.name="ChunkLoadError",s.type=n,s.request=o,r[1](s)}a[e]=void 0}};var f=setTimeout((function(){c({type:"timeout",target:u})}),12e4);u.onerror=u.onload=c,document.head.appendChild(u)}return Promise.all(t)},l.m=e,l.c=n,l.d=function(e,t,r){l.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,t){if(1&t&&(e=l(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(l.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)l.d(r,n,function(t){return e[t]}.bind(null,n));return r},l.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(t,"a",t),t},l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},l.p="",l.oe=function(e){throw console.error(e),e};var s=window.webpackJsonp=window.webpackJsonp||[],f=s.push.bind(s);s.push=t,s=s.slice();for(var d=0;d<s.length;d++)t(s[d]);var p=f;r()}([]);
|
||||
!function(e){function t(t){for(var n,o,i=t[0],l=t[1],f=t[2],s=t[3]||[],d=0,h=[];d<i.length;d++)o=i[d],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&h.push(a[o][0]),a[o]=0;for(n in l)Object.prototype.hasOwnProperty.call(l,n)&&(e[n]=l[n]);for(p&&p(t),u.push.apply(u,s);h.length;)h.shift()();return c.push.apply(c,f||[]),r()}function r(){for(var e,t=0;t<c.length;t++){for(var r=c[t],n=!0,o=1;o<r.length;o++){var f=r[o];0!==a[f]&&(n=!1)}n&&(c.splice(t--,1),e=l(l.s=r[0]))}return 0===c.length&&(u.forEach((function(e){if(void 0===a[e]){a[e]=null;var t=document.createElement("link");l.nc&&t.setAttribute("nonce",l.nc),t.rel="prefetch",t.as="script",t.href=i(e),document.head.appendChild(t)}})),u.length=0),e}var n={},o={5:0},a={5:0},c=[],u=[];function i(e){return l.p+""+({2:"proxies",4:"rules",6:"vendors~chartjs",7:"vendors~proxies"}[e]||e)+"."+{2:"98cabc7dc53e642492d1",4:"5123c4f00bc3b0a54628",6:"fa4d4e9c5ca3297a0d20",7:"cd3f974bfcc521d59a74",8:"7958f6e20b89d91ec605"}[e]+".js"}function l(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,l),r.l=!0,r.exports}l.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{2:1,4:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({2:"proxies",4:"rules",6:"vendors~chartjs",7:"vendors~proxies"}[e]||e)+"."+{2:"f2fb2adff629251cabb9",4:"664f8b737878361937cb",6:"31d6cfe0d16ae931b73c",7:"31d6cfe0d16ae931b73c",8:"31d6cfe0d16ae931b73c"}[e]+".css",a=l.p+n,c=document.getElementsByTagName("link"),u=0;u<c.length;u++){var i=(s=c[u]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(i===n||i===a))return t()}var f=document.getElementsByTagName("style");for(u=0;u<f.length;u++){var s;if((i=(s=f[u]).getAttribute("data-href"))===n||i===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,c=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");c.code="CSS_CHUNK_LOAD_FAILED",c.request=n,delete o[e],d.parentNode.removeChild(d),r(c)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var c,u=document.createElement("script");u.charset="utf-8",u.timeout=120,l.nc&&u.setAttribute("nonce",l.nc),u.src=i(e);var f=new Error;c=function(t){u.onerror=u.onload=null,clearTimeout(s);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;f.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",f.name="ChunkLoadError",f.type=n,f.request=o,r[1](f)}a[e]=void 0}};var s=setTimeout((function(){c({type:"timeout",target:u})}),12e4);u.onerror=u.onload=c,document.head.appendChild(u)}return Promise.all(t)},l.m=e,l.c=n,l.d=function(e,t,r){l.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,t){if(1&t&&(e=l(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(l.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)l.d(r,n,function(t){return e[t]}.bind(null,n));return r},l.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(t,"a",t),t},l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},l.p="",l.oe=function(e){throw console.error(e),e};var f=window.webpackJsonp=window.webpackJsonp||[],s=f.push.bind(f);f.push=t,f=f.slice();for(var d=0;d<f.length;d++)t(f[d]);var p=s;r()}([]);
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,11 +1,11 @@
|
||||
{
|
||||
"luci-app-clash": {
|
||||
"description": "Grant UCI access for luci-app-clash",
|
||||
"read": {
|
||||
"uci": [ "clash" ]
|
||||
"description": "Grant UCI access for luci-app-clash",
|
||||
"read": {
|
||||
"uci": [ "clash" ]
|
||||
},
|
||||
"write": {
|
||||
"uci": [ "clash" ]
|
||||
"write": {
|
||||
"uci": [ "clash" ]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user