luci: fix know bugs

This commit is contained in:
xiaorouji 2023-09-09 20:54:11 +08:00 committed by sbwml
parent 4790e2551d
commit 9e4b4d7fdc
5 changed files with 102 additions and 85 deletions

View File

@ -384,7 +384,11 @@ end
function finded_com(e) function finded_com(e)
local bin = get_app_path(e) local bin = get_app_path(e)
if not bin then return end if not bin then return end
return luci.sys.exec('echo -n $(type -t -p "%s" | head -n1)' % { bin }) local s = luci.sys.exec('echo -n $(type -t -p "%s" | head -n1)' % { bin })
if s == "" then
s = nil
end
return s
end end
function finded(e) function finded(e)

View File

@ -1129,6 +1129,7 @@ function gen_config(var)
tag = dns_tag, tag = dns_tag,
address_strategy = "prefer_ipv4", address_strategy = "prefer_ipv4",
strategy = remote_strategy, strategy = remote_strategy,
address_resolver = "direct",
detour = dns_outTag, detour = dns_outTag,
} }
@ -1147,7 +1148,9 @@ function gen_config(var)
server.address = remote_dns_doh_url server.address = remote_dns_doh_url
end end
table.insert(dns.servers, server) if server.address then
table.insert(dns.servers, server)
end
if remote_dns_fake then if remote_dns_fake then
dns.fakeip = { dns.fakeip = {
@ -1156,13 +1159,19 @@ function gen_config(var)
inet6_range = "fc00::/18", inet6_range = "fc00::/18",
} }
local fakedns_tag = dns_tag .. "_fakeip"
if not server.address then
fakedns_tag = dns_tag
end
table.insert(dns.servers, { table.insert(dns.servers, {
tag = dns_tag .. "_fakeip", tag = fakedns_tag,
address = "fakeip", address = "fakeip",
strategy = remote_strategy, strategy = remote_strategy,
}) })
rule_server = dns_tag .. "_fakeip" rule_server = fakedns_tag
if tags and tags:find("with_clash_api") then if tags and tags:find("with_clash_api") then
if not experimental then if not experimental then

View File

@ -1,10 +1,11 @@
<%+cbi/valueheader%> <%+cbi/valueheader%>
<% <%
local api = require "luci.passwall2.api" local api = require "luci.passwall2.api"
local has_singbox = api.finded_com("singbox")
local has_xray = api.finded_com("xray")
-%> -%>
<script type="text/javascript">//<![CDATA[ <script type="text/javascript">//<![CDATA[
let has_singbox = "<%=api.finded_com("singbox")%>"
let has_xray = "<%=api.finded_com("xray")%>"
function padright(str, cnt, pad) { function padright(str, cnt, pad) {
return str + Array(cnt + 1).join(pad); return str + Array(cnt + 1).join(pad);
} }
@ -242,7 +243,7 @@ local has_xray = api.finded_com("xray")
info.port = opt.get(dom_prefix + "port").value; info.port = opt.get(dom_prefix + "port").value;
info.id = opt.get(dom_prefix + "uuid").value; info.id = opt.get(dom_prefix + "uuid").value;
var v_transport = opt.get("transport").value; var v_transport = opt.get(dom_prefix + "transport").value;
if (v_transport === "ws") { if (v_transport === "ws") {
info.host = opt.get(dom_prefix + "ws_host").value; info.host = opt.get(dom_prefix + "ws_host").value;
info.path = opt.get(dom_prefix + "ws_path").value; info.path = opt.get(dom_prefix + "ws_path").value;
@ -250,27 +251,27 @@ local has_xray = api.finded_com("xray")
info.host = opt.get(dom_prefix + "h2_host").value; info.host = opt.get(dom_prefix + "h2_host").value;
info.path = opt.get(dom_prefix + "h2_path").value; info.path = opt.get(dom_prefix + "h2_path").value;
} else if (v_transport === "tcp") { } else if (v_transport === "tcp") {
info.type = opt.get("tcp_guise").value; info.type = opt.get(dom_prefix + "tcp_guise").value;
if (info.type === "http") { if (info.type === "http") {
info.host = opt.get("tcp_guise_http_host").value; info.host = opt.get(dom_prefix + "tcp_guise_http_host").value;
info.path = opt.get("tcp_guise_http_path").value; info.path = opt.get(dom_prefix + "tcp_guise_http_path").value;
} }
} else if (v_transport === "mkcp") { } else if (v_transport === "mkcp") {
v_transport = "kcp"; v_transport = "kcp";
info.type = opt.get("mkcp_guise").value; info.type = opt.get(dom_prefix + "mkcp_guise").value;
} else if (v_transport === "quic") { } else if (v_transport === "quic") {
info.type = opt.get("quic_guise").value; info.type = opt.get(dom_prefix + "quic_guise").value;
info.key = opt.get("quic_key").value; info.key = opt.get(dom_prefix + "quic_key").value;
info.securty = opt.get("quic_security").value; info.securty = opt.get(dom_prefix + "quic_security").value;
} else if (v_transport === "grpc") { } else if (v_transport === "grpc") {
info.path = opt.get("grpc_serviceName").value; info.path = opt.get(dom_prefix + "grpc_serviceName").value;
} }
if (info.path && info.path != "") { if (info.path && info.path != "") {
info.path = encodeURI(info.path); info.path = encodeURI(info.path);
} }
info.net = v_transport; info.net = v_transport;
info.security = opt.get("security").value || "auto"; info.security = opt.get(dom_prefix + "security").value || "auto";
if (opt.get(dom_prefix + "tls").checked) { if (opt.get(dom_prefix + "tls").checked) {
var v_security = "tls"; var v_security = "tls";
info.tls = "tls"; info.tls = "tls";
@ -286,7 +287,7 @@ local has_xray = api.finded_com("xray")
":" + v_port.value + "?"; ":" + v_port.value + "?";
var params = ""; var params = "";
var v_transport = opt.get("transport").value; var v_transport = opt.get(dom_prefix + "transport").value;
if (v_transport === "ws") { if (v_transport === "ws") {
params += opt.query("host", dom_prefix + "ws_host"); params += opt.query("host", dom_prefix + "ws_host");
params += opt.query("path", dom_prefix + "ws_path"); params += opt.query("path", dom_prefix + "ws_path");
@ -295,24 +296,24 @@ local has_xray = api.finded_com("xray")
params += opt.query("host", dom_prefix + "h2_host"); params += opt.query("host", dom_prefix + "h2_host");
params += opt.query("path", dom_prefix + "h2_path"); params += opt.query("path", dom_prefix + "h2_path");
} else if (v_transport === "tcp") { } else if (v_transport === "tcp") {
params += opt.query("headerType", "tcp_guise"); params += opt.query("headerType", dom_prefix + "tcp_guise");
params += opt.query("host", "tcp_guise_http_host"); params += opt.query("host", dom_prefix + "tcp_guise_http_host");
params += opt.query("path", "tcp_guise_http_path"); params += opt.query("path", dom_prefix + "tcp_guise_http_path");
} else if (v_transport === "mkcp") { } else if (v_transport === "mkcp") {
v_transport = "kcp"; v_transport = "kcp";
params += opt.query("headerType", "mkcp_guise"); params += opt.query("headerType", dom_prefix + "mkcp_guise");
} else if (v_transport === "quic") { } else if (v_transport === "quic") {
params += opt.query("headerType", "quic_guise"); params += opt.query("headerType", dom_prefix + "quic_guise");
params += opt.query("key", "quic_key"); params += opt.query("key", dom_prefix + "quic_key");
params += opt.query("quicSecurity", "quic_security"); params += opt.query("quicSecurity", dom_prefix + "quic_security");
} else if (v_transport === "grpc") { } else if (v_transport === "grpc") {
params += opt.query("path", "grpc_serviceName"); params += opt.query("path", dom_prefix + "grpc_serviceName");
params += opt.query("serviceName", "grpc_serviceName"); params += opt.query("serviceName", dom_prefix + "grpc_serviceName");
params += opt.query("mode", "grpc_mode"); params += opt.query("mode", dom_prefix + "grpc_mode");
} }
params += "&type=" + v_transport; params += "&type=" + v_transport;
params += opt.query("encryption", "encryption"); params += opt.query("encryption", dom_prefix + "encryption");
if (opt.get(dom_prefix + "tls").checked) { if (opt.get(dom_prefix + "tls").checked) {
var v_security = "tls"; var v_security = "tls";
@ -320,15 +321,15 @@ local has_xray = api.finded_com("xray")
let v_fp = opt.get(dom_prefix + "fingerprint").value; let v_fp = opt.get(dom_prefix + "fingerprint").value;
params += "&fp=" + v_fp; params += "&fp=" + v_fp;
} }
if (opt.get("reality") && opt.get("reality").checked) { if (opt.get(dom_prefix + "reality") && opt.get(dom_prefix + "reality").checked) {
v_security = "reality"; v_security = "reality";
if (opt.get("reality_fingerprint") && opt.get("reality_fingerprint").value != "") { if (opt.get(dom_prefix + "fingerprint") && opt.get(dom_prefix + "fingerprint").value != "") {
let v_fp = opt.get("reality_fingerprint").value; let v_fp = opt.get(dom_prefix + "fingerprint").value;
params += "&fp=" + v_fp; params += "&fp=" + v_fp;
} }
params += opt.query("pbk", "reality_publicKey"); params += opt.query("pbk", dom_prefix + "reality_publicKey");
params += opt.query("sid", "reality_shortId"); params += opt.query("sid", dom_prefix + "reality_shortId");
params += opt.query("spx", "reality_spiderX"); params += opt.query("spx", dom_prefix + "reality_spiderX");
} }
if (opt.get(dom_prefix + "flow") && opt.get(dom_prefix + "flow").value) { if (opt.get(dom_prefix + "flow") && opt.get(dom_prefix + "flow").value) {
let v_flow = opt.get(dom_prefix + "flow").value; let v_flow = opt.get(dom_prefix + "flow").value;
@ -598,7 +599,7 @@ local has_xray = api.finded_com("xray")
method = userInfo.substr(0, userInfoSplitIndex); method = userInfo.substr(0, userInfoSplitIndex);
password = userInfo.substr(userInfoSplitIndex + 1); password = userInfo.substr(userInfoSplitIndex + 1);
} }
if (["2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha8-poly1305", "2022-blake3-chacha20-poly1305"].includes(method)) { if (["2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305"].includes(method)) {
opt.set('type', "SS-Rust"); opt.set('type', "SS-Rust");
dom_prefix = "ssrust_" dom_prefix = "ssrust_"
} else { } else {
@ -650,13 +651,13 @@ local has_xray = api.finded_com("xray")
queryParam[decodeURIComponent(params[0]).toLowerCase()] = decodeURIComponent(params[1] || ''); queryParam[decodeURIComponent(params[0]).toLowerCase()] = decodeURIComponent(params[1] || '');
} }
} }
<% if has_singbox then %> if (has_singbox) {
opt.set('type', "sing-box"); opt.set('type', "sing-box");
dom_prefix = "singbox_" dom_prefix = "singbox_"
<% elseif has_xray then %> } else if (has_xray) {
opt.set('type', "Xray"); opt.set('type', "Xray");
dom_prefix = "xray_" dom_prefix = "xray_"
<% end %> }
opt.set(dom_prefix + 'protocol', "trojan"); opt.set(dom_prefix + 'protocol', "trojan");
opt.set(dom_prefix + 'address', m.hostname); opt.set(dom_prefix + 'address', m.hostname);
opt.set(dom_prefix + 'port', m.port || "443"); opt.set(dom_prefix + 'port', m.port || "443");
@ -672,13 +673,13 @@ local has_xray = api.finded_com("xray")
if (ssu[0] === "vmess") { if (ssu[0] === "vmess") {
var sstr = b64DecodeUnicode(ssu[1]); var sstr = b64DecodeUnicode(ssu[1]);
var ploc = sstr.indexOf("/?"); var ploc = sstr.indexOf("/?");
<% if has_singbox then %> if (has_singbox) {
opt.set('type', "sing-box"); opt.set('type', "sing-box");
dom_prefix = "singbox_" dom_prefix = "singbox_"
<% elseif has_xray then %> } else if (has_xray) {
opt.set('type', "Xray"); opt.set('type', "Xray");
dom_prefix = "xray_" dom_prefix = "xray_"
<% end %> }
opt.set(dom_prefix + 'protocol', "vmess"); opt.set(dom_prefix + 'protocol', "vmess");
var url0, param = ""; var url0, param = "";
if (ploc > 0) { if (ploc > 0) {
@ -701,12 +702,12 @@ local has_xray = api.finded_com("xray")
ssm.net = ssm.net.toLowerCase(); ssm.net = ssm.net.toLowerCase();
if (ssm.net === "kcp" || ssm.net === "mkcp") if (ssm.net === "kcp" || ssm.net === "mkcp")
ssm.net = "mkcp" ssm.net = "mkcp"
opt.set('transport', ssm.net); opt.set(dom_prefix + 'transport', ssm.net);
if (ssm.net === "tcp") { if (ssm.net === "tcp") {
opt.set('tcp_guise', (ssm.host && ssm.path) ? "http" : "none"); opt.set(dom_prefix + 'tcp_guise', (ssm.host && ssm.path) ? "http" : "none");
if (ssm.host && ssm.path) { if (ssm.host && ssm.path) {
opt.set('tcp_guise_http_host', ssm.host); opt.set(dom_prefix + 'tcp_guise_http_host', ssm.host);
opt.set('tcp_guise_http_path', ssm.path); opt.set(dom_prefix + 'tcp_guise_http_path', ssm.path);
} }
} else if (ssm.net === "ws") { } else if (ssm.net === "ws") {
opt.set(dom_prefix + 'ws_host', ssm.host); opt.set(dom_prefix + 'ws_host', ssm.host);
@ -715,22 +716,23 @@ local has_xray = api.finded_com("xray")
opt.set(dom_prefix + 'h2_host', ssm.host); opt.set(dom_prefix + 'h2_host', ssm.host);
opt.set(dom_prefix + 'h2_path', ssm.path); opt.set(dom_prefix + 'h2_path', ssm.path);
} else if (ssm.net === "quic") { } else if (ssm.net === "quic") {
opt.set('quic_security', ssm.securty); opt.set(dom_prefix + 'quic_security', ssm.securty);
opt.set('quic_key', ssm.key); opt.set(dom_prefix + 'quic_key', ssm.key);
} else if (ssm.net === "kcp" || ssm.net === "mkcp") { } else if (ssm.net === "kcp" || ssm.net === "mkcp") {
opt.set('mkcp_guise', ssm.type); opt.set(dom_prefix + 'mkcp_guise', ssm.type);
} else if (ssm.net === "grpc") { } else if (ssm.net === "grpc") {
opt.set('grpc_serviceName', ssm.path); opt.set(dom_prefix + 'grpc_serviceName', ssm.path);
} }
} }
if (ssu[0] === "vless") { if (ssu[0] === "vless") {
<% if has_singbox then %> if (has_singbox) {
opt.set('type', "sing-box"); opt.set('type', "sing-box");
dom_prefix = "singbox_" dom_prefix = "singbox_"
<% elseif has_xray then %> }
opt.set('type', "Xray"); if (has_xray) {
dom_prefix = "xray_" opt.set('type', "Xray");
<% end %> dom_prefix = "xray_"
}
opt.set(dom_prefix + 'protocol', "vless"); opt.set(dom_prefix + 'protocol', "vless");
var m = parseNodeUrl(ssrurl); var m = parseNodeUrl(ssrurl);
var password = m.passwd; var password = m.passwd;
@ -753,11 +755,11 @@ local has_xray = api.finded_com("xray")
} }
} }
opt.set('encryption', queryParam.encryption); opt.set(dom_prefix + 'encryption', queryParam.encryption);
if (queryParam.security) { if (queryParam.security) {
if (queryParam.security == "tls") { if (queryParam.security == "tls") {
opt.set(dom_prefix + 'tls', true); opt.set(dom_prefix + 'tls', true);
opt.set('reality', false) opt.set(dom_prefix + 'reality', false)
opt.set(dom_prefix + 'flow', queryParam.flow || ''); opt.set(dom_prefix + 'flow', queryParam.flow || '');
opt.set(dom_prefix + 'tls_serverName', queryParam.sni || ''); opt.set(dom_prefix + 'tls_serverName', queryParam.sni || '');
opt.set(dom_prefix + 'tls_allowInsecure', true); opt.set(dom_prefix + 'tls_allowInsecure', true);
@ -771,15 +773,15 @@ local has_xray = api.finded_com("xray")
if (queryParam.security == "reality") { if (queryParam.security == "reality") {
opt.set(dom_prefix + 'tls', true); opt.set(dom_prefix + 'tls', true);
opt.set('reality', true) opt.set(dom_prefix + 'reality', true)
opt.set(dom_prefix + 'flow', queryParam.flow || ''); opt.set(dom_prefix + 'flow', queryParam.flow || '');
opt.set(dom_prefix + 'tls_serverName', queryParam.sni || ''); opt.set(dom_prefix + 'tls_serverName', queryParam.sni || '');
if (queryParam.fp && queryParam.fp.trim() != "") { if (queryParam.fp && queryParam.fp.trim() != "") {
opt.set('reality_fingerprint', queryParam.fp); opt.set(dom_prefix + 'fingerprint', queryParam.fp);
} }
opt.set('reality_publicKey', queryParam.pbk || ''); opt.set(dom_prefix + 'reality_publicKey', queryParam.pbk || '');
opt.set('reality_shortId', queryParam.sid || ''); opt.set(dom_prefix + 'reality_shortId', queryParam.sid || '');
opt.set('reality_spiderX', queryParam.spx || ''); opt.set(dom_prefix + 'reality_spiderX', queryParam.spx || '');
} }
} }
@ -789,12 +791,12 @@ local has_xray = api.finded_com("xray")
queryParam.type = "mkcp" queryParam.type = "mkcp"
if (queryParam.type === "h2" || queryParam.type === "http") if (queryParam.type === "h2" || queryParam.type === "http")
queryParam.type = "h2" queryParam.type = "h2"
opt.set('transport', queryParam.type); opt.set(dom_prefix + 'transport', queryParam.type);
if (queryParam.type === "tcp") { if (queryParam.type === "tcp") {
opt.set('tcp_guise', queryParam.headerType || "none"); opt.set(dom_prefix + 'tcp_guise', queryParam.headerType || "none");
if (queryParam.headerType && queryParam.headerType != "none") { if (queryParam.headerType && queryParam.headerType != "none") {
opt.set('tcp_guise_http_host', queryParam.host || ""); opt.set(dom_prefix + 'tcp_guise_http_host', queryParam.host || "");
opt.set('tcp_guise_http_path', queryParam.path || ""); opt.set(dom_prefix + 'tcp_guise_http_path', queryParam.path || "");
} }
} else if (queryParam.type === "ws") { } else if (queryParam.type === "ws") {
opt.set(dom_prefix + 'ws_host', queryParam.host || ""); opt.set(dom_prefix + 'ws_host', queryParam.host || "");
@ -803,14 +805,14 @@ local has_xray = api.finded_com("xray")
opt.set(dom_prefix + 'h2_host', queryParam.host || ""); opt.set(dom_prefix + 'h2_host', queryParam.host || "");
opt.set(dom_prefix + 'h2_path', queryParam.path || ""); opt.set(dom_prefix + 'h2_path', queryParam.path || "");
} else if (queryParam.type === "quic") { } else if (queryParam.type === "quic") {
opt.set('quic_guise', queryParam.headerType || "none"); opt.set(dom_prefix + 'quic_guise', queryParam.headerType || "none");
opt.set('quic_security', queryParam.quicSecurity); opt.set(dom_prefix + 'quic_security', queryParam.quicSecurity);
opt.set('quic_key', queryParam.key); opt.set(dom_prefix + 'quic_key', queryParam.key);
} else if (queryParam.type === "kcp" || queryParam.type === "mkcp") { } else if (queryParam.type === "kcp" || queryParam.type === "mkcp") {
opt.set('mkcp_guise', queryParam.headerType || "none"); opt.set(dom_prefix + 'mkcp_guise', queryParam.headerType || "none");
} else if (queryParam.type === "grpc") { } else if (queryParam.type === "grpc") {
opt.set('grpc_serviceName', (queryParam.serviceName || queryParam.path) || ""); opt.set(dom_prefix + 'grpc_serviceName', (queryParam.serviceName || queryParam.path) || "");
opt.set('grpc_mode', queryParam.mode); opt.set(dom_prefix + 'grpc_mode', queryParam.mode);
} }
if (m.hash) { if (m.hash) {

View File

@ -67,6 +67,8 @@ global_singbox=$(uci -q get passwall2.@global_singbox[0])
uci -q commit passwall2 uci -q commit passwall2
} }
chmod +x /usr/share/passwall2/*.sh
rm -f /tmp/luci-indexcache rm -f /tmp/luci-indexcache
rm -rf /tmp/luci-modulecache/ rm -rf /tmp/luci-modulecache/
killall -HUP rpcd 2>/dev/null killall -HUP rpcd 2>/dev/null

View File

@ -622,12 +622,12 @@ local function processData(szType, content, add_mode, add_from)
result.group = content.airport result.group = content.airport
result.remarks = content.remarks result.remarks = content.remarks
elseif szType == "vless" then elseif szType == "vless" then
if has_xray then
result.type = 'Xray'
end
if has_singbox then if has_singbox then
result.type = 'sing-box' result.type = 'sing-box'
end end
if has_xray then
result.type = 'Xray'
end
result.protocol = "vless" result.protocol = "vless"
local alias = "" local alias = ""
if content:find("#") then if content:find("#") then