diff --git a/fastnet/Makefile b/fastnet/Makefile index 07ee9ce06..75d2ab1d9 100644 --- a/fastnet/Makefile +++ b/fastnet/Makefile @@ -9,8 +9,8 @@ include $(TOPDIR)/rules.mk PKG_ARCH_FASTNET:=$(ARCH) PKG_NAME:=fastnet -PKG_VERSION:=kaiplus-runtime-v1.0.9 -PKG_RELEASE:=3 +PKG_VERSION:=0.7.7 +PKG_RELEASE:=4 PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/istoreos/istoreos-app-hub/releases/download/fastnet-runtime-v$(PKG_VERSION)/ diff --git a/luci-app-frpc/htdocs/luci-static/resources/view/frpc.js b/luci-app-frpc/htdocs/luci-static/resources/view/frpc.js index 6a9af0794..94a79be53 100644 --- a/luci-app-frpc/htdocs/luci-static/resources/view/frpc.js +++ b/luci-app-frpc/htdocs/luci-static/resources/view/frpc.js @@ -1422,7 +1422,7 @@ return view.extend({ }); }); - return E('div', { class: 'cbi-map' }, + return E('div', {}, E('fieldset', { class: 'cbi-section' }, [ E('p', { id: 'service_status' }, _('Collecting data ...')) ]) diff --git a/luci-app-frps/htdocs/luci-static/resources/view/frps.js b/luci-app-frps/htdocs/luci-static/resources/view/frps.js index 100a8adb5..83b08aa14 100644 --- a/luci-app-frps/htdocs/luci-static/resources/view/frps.js +++ b/luci-app-frps/htdocs/luci-static/resources/view/frps.js @@ -982,7 +982,7 @@ return view.extend({ }); }); - return E('div', { class: 'cbi-map' }, + return E('div', {}, E('fieldset', { class: 'cbi-section' }, [ E('p', { id: 'service_status' }, _('Collecting data ...')) ]) diff --git a/luci-app-fwlive/Makefile b/luci-app-fwlive/Makefile index cd1aba68d..570a2569d 100644 --- a/luci-app-fwlive/Makefile +++ b/luci-app-fwlive/Makefile @@ -12,7 +12,7 @@ LUCI_DEPENDS:=+luci-base +logd +jsonfilter LUCI_PKGARCH:=all PKG_VERSION:=0.1.41 -PKG_RELEASE:=12 +PKG_RELEASE:=13 # Reproducible build: honor SOURCE_DATE_EPOCH from the build environment (set by docker-sdk.sh / CI). ifdef SOURCE_DATE_EPOCH diff --git a/luci-app-fwlive/htdocs/luci-static/resources/fwlive/log.js b/luci-app-fwlive/htdocs/luci-static/resources/fwlive/log.js index 2c1394481..a72080d0c 100644 --- a/luci-app-fwlive/htdocs/luci-static/resources/fwlive/log.js +++ b/luci-app-fwlive/htdocs/luci-static/resources/fwlive/log.js @@ -360,6 +360,26 @@ return baseclass.extend({ ].join('|'); }, + extractAddrs: function (kv) { + return { + src: kv.SRC || '', + dst: kv.DST || '', + sport: kv.SPT || '', + dport: kv.DPT || '' + }; + }, + + extractIfaces: function (kv) { + const ifaceIn = kv.IN || ''; + const ifaceOut = kv.OUT || ''; + return { + ifaceIn: ifaceIn, + ifaceOut: ifaceOut, + iface: ifaceIn || ifaceOut || '', + dir: ifaceIn && ifaceOut ? 'forward' : ifaceIn ? 'in' : ifaceOut ? 'out' : 'unknown' + }; + }, + normalizeEntry: function (entry) { const kv = this.parseKeyValueLog(entry.msg || ''); const tsUnix = this.timestampUnix(entry); @@ -371,14 +391,8 @@ return baseclass.extend({ this.detectAction(entry.msg || '') ); const action = this.normalizeAction(actionRaw); - const src = kv.SRC || ''; - const dst = kv.DST || ''; - const sport = kv.SPT || ''; - const dport = kv.DPT || ''; - const ifaceIn = kv.IN || ''; - const ifaceOut = kv.OUT || ''; - const iface = ifaceIn || ifaceOut || ''; - const dir = ifaceIn && ifaceOut ? 'forward' : ifaceIn ? 'in' : ifaceOut ? 'out' : 'unknown'; + const addrs = this.extractAddrs(kv); + const ifs = this.extractIfaces(kv); const flags = this.parseFlags(entry.msg || '', kv); const length = this.parseLength(kv); const ruleHint = this.parseRuleHint(entry.msg || ''); @@ -389,13 +403,13 @@ return baseclass.extend({ entry, tsUnix, action, - src, - dst, - sport, - dport, + addrs.src, + addrs.dst, + addrs.sport, + addrs.dport, proto, - ifaceIn, - ifaceOut + ifs.ifaceIn, + ifs.ifaceOut ), log_id: entry && entry.id != null ? Number(entry.id) : null, timestamp: tsUnix, @@ -404,15 +418,15 @@ return baseclass.extend({ rule_label: ruleLabel, action: action, action_raw: actionRaw, - interface: iface, - interface_in: ifaceIn, - interface_out: ifaceOut, - direction: dir, + interface: ifs.iface, + interface_in: ifs.ifaceIn, + interface_out: ifs.ifaceOut, + direction: ifs.dir, proto: proto, - src: src, - sport: sport, - dst: dst, - dport: dport, + src: addrs.src, + sport: addrs.sport, + dst: addrs.dst, + dport: addrs.dport, flags: flags, length: length, message: entry.msg || '' @@ -467,42 +481,42 @@ return baseclass.extend({ return p.negate ? !hit : hit; }, + matchesQueryField: function (row, spec) { + const p = this.parseFilterValue(spec); + if (!p.value) return true; + + const keys = Object.keys(row); + const parts = []; + for (let i = 0; i < keys.length; i++) parts.push(row[keys[i]]); + const blob = parts.join(' ').toLowerCase(); + const hit = blob.indexOf(p.value.toLowerCase()) !== -1; + return p.negate ? !hit : hit; + }, + + matchesActionField: function (row, spec) { + const p = this.parseFilterValue(spec); + if (!p.value) return true; + + const want = p.value.toLowerCase(); + const hit = + row.action === want || (row.action_raw || '').toUpperCase() === p.value.toUpperCase(); + return p.negate ? !hit : hit; + }, + + matchesInterfaceField: function (row, spec) { + const p = this.parseFilterValue(spec); + if (!p.value) return true; + + const iface = p.value; + const hit = + row.interface === iface || row.interface_in === iface || row.interface_out === iface; + return p.negate ? !hit : hit; + }, + matchesFilter: function (row, filters) { - if (filters.q) { - const p = this.parseFilterValue(filters.q); - if (p.value) { - const keys = Object.keys(row); - const parts = []; - for (let i = 0; i < keys.length; i++) parts.push(row[keys[i]]); - const blob = parts.join(' ').toLowerCase(); - const hit = blob.indexOf(p.value.toLowerCase()) !== -1; - if (p.negate ? hit : !hit) return false; - } - } - - if (filters.action) { - const p = this.parseFilterValue(filters.action); - if (p.value) { - const want = p.value.toLowerCase(); - const hit = - row.action === want || - (row.action_raw || '').toUpperCase() === p.value.toUpperCase(); - if (p.negate ? hit : !hit) return false; - } - } - - if (filters.interface) { - const p = this.parseFilterValue(filters.interface); - if (p.value) { - const iface = p.value; - const hit = - row.interface === iface || - row.interface_in === iface || - row.interface_out === iface; - if (p.negate ? hit : !hit) return false; - } - } - + if (filters.q && !this.matchesQueryField(row, filters.q)) return false; + if (filters.action && !this.matchesActionField(row, filters.action)) return false; + if (filters.interface && !this.matchesInterfaceField(row, filters.interface)) return false; if (filters.proto && !this.matchesExactField(row.proto, filters.proto)) return false; if (filters.src && !this.matchesTextField(row.src, filters.src)) return false; if (filters.dst && !this.matchesTextField(row.dst, filters.dst)) return false; diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile index 3d8b2dae4..8af62e7e2 100644 --- a/luci-app-passwall/Makefile +++ b/luci-app-passwall/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall PKG_VERSION:=26.9.9 -PKG_RELEASE:=268 +PKG_RELEASE:=269 PKG_PO_VERSION:=$(PKG_VERSION) PKG_CONFIG_DEPENDS:= \ diff --git a/luci-app-passwall/htdocs/luci-static/resources/view/passwall/func.js b/luci-app-passwall/htdocs/luci-static/resources/view/passwall/func.js index 26eeabb7e..3b5a43bce 100644 --- a/luci-app-passwall/htdocs/luci-static/resources/view/passwall/func.js +++ b/luci-app-passwall/htdocs/luci-static/resources/view/passwall/func.js @@ -61,14 +61,11 @@ function getOption(config, section, opt) { const id = `cbid.${config}.${section}.${opt}`; obj = document.getElementsByName(id)[0] || document.getElementById(id); if (obj) { + //lua luci combobox const combobox = document.getElementById('cbi.combobox.' + id); if (combobox) { obj.combobox = combobox; } - const div = document.getElementById(id); - if (div && div.getElementsByTagName("li").length > 0) { - obj = div; - } return obj; } else { return null; diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/1_sing-box.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/1_sing-box.lua index 3008a5143..468484cba 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/1_sing-box.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/1_sing-box.lua @@ -620,6 +620,7 @@ if singbox_tags:find("with_utls") then o:depends({ protocol = "shadowsocks", tls = true }) o:depends({ protocol = "trojan", tls = true }) o:depends({ protocol = "anytls", tls = true }) + o:depends({ protocol = "http", tls = true }) o = s:option(Value, "reality_publicKey", translate("Public Key")) o:depends({ reality = true }) diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/2_xray.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/2_xray.lua index 5684127dd..52d5df673 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/2_xray.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/2_xray.lua @@ -401,6 +401,7 @@ o = s:option(Flag, "tls", translate("TLS")) o.default = 0 o:depends({ protocol = "vmess" }) o:depends({ protocol = "vless" }) +o:depends({ protocol = "http" }) o:depends({ protocol = "trojan" }) o:depends({ protocol = "shadowsocks" }) @@ -719,6 +720,8 @@ o:depends({ protocol = "vless", transport = "raw" }) o:depends({ protocol = "vless", transport = "ws" }) o:depends({ protocol = "vless", transport = "grpc" }) o:depends({ protocol = "vless", transport = "httpupgrade" }) +o:depends({ protocol = "http" }) +o:depends({ protocol = "socks" }) o:depends({ protocol = "shadowsocks" }) o:depends({ protocol = "trojan" }) diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/type/2_xray.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/type/2_xray.lua index 02dfc68d1..078de237b 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/server/type/2_xray.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/server/type/2_xray.lua @@ -206,13 +206,18 @@ o.validate = function(self, value, t) end o:depends({ protocol = "vmess" }) o:depends({ protocol = "vless" }) +o:depends({ protocol = "http" }) o:depends({ protocol = "shadowsocks" }) o:depends({ protocol = "trojan" }) -- [[ REALITY部分 ]] -- o = s:option(Flag, "reality", translate("REALITY")) o.default = 0 -o:depends({ tls = true }) +o:depends({ tls = true, transport = "raw" }) +o:depends({ tls = true, transport = "ws" }) +o:depends({ tls = true, transport = "grpc" }) +o:depends({ tls = true, transport = "httpupgrade" }) +o:depends({ tls = true, transport = "xhttp" }) o = s:option(Value, "reality_private_key", translate("Private Key")) o:depends({ reality = true }) diff --git a/luci-app-passwall/luasrc/passwall/util_sing-box.lua b/luci-app-passwall/luasrc/passwall/util_sing-box.lua index 6c0b8da4f..ee91ac350 100644 --- a/luci-app-passwall/luasrc/passwall/util_sing-box.lua +++ b/luci-app-passwall/luasrc/passwall/util_sing-box.lua @@ -481,9 +481,9 @@ function gen_outbound(flag, node, tag, proxy_table) obfs = node.hysteria_obfs, auth = (node.hysteria_auth_type == "base64") and node.hysteria_auth_password or nil, auth_str = (node.hysteria_auth_type == "string") and node.hysteria_auth_password or nil, - recv_window_conn = tonumber(node.hysteria_recv_window_conn), --1.14 将变更为 stream_receive_window - recv_window = tonumber(node.hysteria_recv_window), --1.14 将变更为 connection_receive_window - disable_mtu_discovery = (node.hysteria_disable_mtu_discovery == "1") and true or false, --1.14 将变更为 disable_path_mtu_discovery + stream_receive_window = tonumber(node.hysteria_recv_window_conn), + connection_receive_window = tonumber(node.hysteria_recv_window), + disable_path_mtu_discovery = (node.hysteria_disable_mtu_discovery == "1") and true or false, tls = tls } end @@ -910,10 +910,10 @@ function gen_config_server(node) down_mbps = tonumber(node.hysteria_down_mbps), obfs = node.hysteria_obfs, users = users, - recv_window_conn = node.hysteria_recv_window_conn and tonumber(node.hysteria_recv_window_conn) or nil, --1.14 to stream_receive_window - recv_window_client = node.hysteria_recv_window_client and tonumber(node.hysteria_recv_window_client) or nil, --1.14 to connection_receive_window - max_conn_client = node.hysteria_max_conn_client and tonumber(node.hysteria_max_conn_client) or nil, --1.14 to max_concurrent_streams - disable_mtu_discovery = (node.hysteria_disable_mtu_discovery == "1") and true or false, --1.14 to disable_path_mtu_discover + stream_receive_window = node.hysteria_recv_window_conn and tonumber(node.hysteria_recv_window_conn) or nil, + connection_receive_window = node.hysteria_recv_window_client and tonumber(node.hysteria_recv_window_client) or nil, + max_concurrent_streams = node.hysteria_max_conn_client and tonumber(node.hysteria_max_conn_client) or nil, + disable_path_mtu_discover = (node.hysteria_disable_mtu_discovery == "1") and true or false, tls = tls } end diff --git a/luci-app-passwall/luasrc/passwall/util_xray.lua b/luci-app-passwall/luasrc/passwall/util_xray.lua index 519497ddd..73c890179 100644 --- a/luci-app-passwall/luasrc/passwall/util_xray.lua +++ b/luci-app-passwall/luasrc/passwall/util_xray.lua @@ -120,6 +120,10 @@ function gen_outbound(flag, node, tag, proxy_table) node.stream_security = "tls" end + if node.protocol == "http" and node.stream_security == "tls" then + node.transport = "raw" + end + if remarks then tag = tag .. ":" .. remarks end @@ -138,7 +142,7 @@ function gen_outbound(flag, node, tag, proxy_table) xudpConcurrency = (node.mux == "1" and ((node.xudp_concurrency) and tonumber(node.xudp_concurrency) or 8)) or nil } or nil, -- 底层传输配置 - streamSettings = (node.streamSettings or dialer_proxy_tag or node.protocol == "vmess" or node.protocol == "vless" or node.protocol == "socks" or node.protocol == "shadowsocks" or node.protocol == "trojan" or node.protocol == "hysteria") and { + streamSettings = (node.streamSettings or dialer_proxy_tag or node.protocol == "vmess" or node.protocol == "vless" or node.protocol == "socks" or node.protocol == "shadowsocks" or node.protocol == "trojan" or node.protocol == "hysteria" or node.protocol == "http") and { sockopt = { mark = 255, domainStrategy = node.domain_strategy or "UseIP", @@ -544,7 +548,7 @@ function gen_config_server(node) allowTransparent = false, users = users } - node.transport = "tcp" + node.transport = "raw" node.tcp_guise = "none" elseif node.protocol == "shadowsocks" then settings = { diff --git a/luci-app-passwall/luasrc/view/passwall/node_config/footer.htm b/luci-app-passwall/luasrc/view/passwall/node_config/footer.htm index cfe03b1cb..c825cc9ec 100644 --- a/luci-app-passwall/luasrc/view/passwall/node_config/footer.htm +++ b/luci-app-passwall/luasrc/view/passwall/node_config/footer.htm @@ -26,12 +26,18 @@ local config = map.config update_config(node_id, { remarks: getOption("<%=config%>", "<%=sid%>", "remarks").value, group: getOption("<%=config%>", "<%=sid%>", "group").value, - type: getOption("<%=config%>", "<%=sid%>", "type").value, + type: el.value, //protocol: '' }, node_config_url); } } }); + const fromUrlCache = JSON.parse(sessionStorage.getItem("fromUrl")); + if (fromUrlCache && fromUrlCache.savetime && (Date.now() - fromUrlCache.timestamp) < fromUrlCache.savetime) { + fromUrl(fromUrlCache.link, true) + } else { + sessionStorage.removeItem("fromUrl"); + } }); waitForElement('select[name*="<%=config%>"][name*="protocol"]', function(el) { let o_val = el.value; @@ -56,7 +62,7 @@ local config = map.config update_config(node_id, { remarks: getOption("<%=config%>", "<%=sid%>", "remarks").value, group: getOption("<%=config%>", "<%=sid%>", "group").value, - protocol: getOption("<%=config%>", "<%=sid%>", name).value, + protocol: el.value, }, node_config_url); */ } diff --git a/luci-app-passwall/luasrc/view/passwall/node_config/link_share_man.htm b/luci-app-passwall/luasrc/view/passwall/node_config/link_share_man.htm index b489e0f4f..c806e5690 100644 --- a/luci-app-passwall/luasrc/view/passwall/node_config/link_share_man.htm +++ b/luci-app-passwall/luasrc/view/passwall/node_config/link_share_man.htm @@ -1,8 +1,8 @@ <%+cbi/valueheader%> <% -local api = require "luci.passwall.api" -local appname = api.appname local map = self.map +local api = map.api +local config = map.config local has_ss_rust = api.is_finded("sslocal") local has_singbox = api.finded_com("sing-box") @@ -17,7 +17,7 @@ local hysteria2_type = api.get_core("hysteria2_type", {{has_hysteria2,"hysteria2 local current_node = map:get(section) -%> - +