From 2bc3fe627e31f0d3563431d32e7373841a948d84 Mon Sep 17 00:00:00 2001 From: xiaorouji <60100640+xiaorouji@users.noreply.github.com> Date: Sat, 13 Jan 2024 15:31:57 +0800 Subject: [PATCH] luci: fix hysteria(2) subscribe --- luci-app-passwall/Makefile | 2 +- .../luasrc/passwall/util_sing-box.lua | 2 -- .../passwall/node_list/link_share_man.htm | 20 +++++++++---- .../root/usr/share/passwall/subscribe.lua | 28 +++++++++++-------- 4 files changed, 32 insertions(+), 20 deletions(-) diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile index 85955cc92..0b37679b1 100644 --- a/luci-app-passwall/Makefile +++ b/luci-app-passwall/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall -PKG_VERSION:=4.72-1 +PKG_VERSION:=4.72-2 PKG_RELEASE:= PKG_CONFIG_DEPENDS:= \ diff --git a/luci-app-passwall/luasrc/passwall/util_sing-box.lua b/luci-app-passwall/luasrc/passwall/util_sing-box.lua index 5f2eb04b3..ab3c8a825 100644 --- a/luci-app-passwall/luasrc/passwall/util_sing-box.lua +++ b/luci-app-passwall/luasrc/passwall/util_sing-box.lua @@ -285,8 +285,6 @@ function gen_outbound(flag, node, tag, proxy_table) if node.protocol == "hysteria" then protocol_table = { - up = node.hysteria_up_mbps .. " Mbps", - down = node.hysteria_down_mbps .. " Mbps", up_mbps = tonumber(node.hysteria_up_mbps), down_mbps = tonumber(node.hysteria_down_mbps), obfs = node.hysteria_obfs, diff --git a/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm b/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm index 12fdebe6b..83985637f 100644 --- a/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm +++ b/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm @@ -1049,6 +1049,11 @@ local api = require "luci.passwall.api" } if (ssu[0] === "hysteria2" || ssu[0] === "hy2") { var m = parseNodeUrl(ssrurl); + var password = m.passwd; + if (password === "") { + s.innerHTML = "<%:Invalid Share URL Format%>"; + return false; + } var queryParam = {}; if (m.search.length > 1) { var query = m.search.split('?'); @@ -1060,20 +1065,23 @@ local api = require "luci.passwall.api" queryParam[decodeURIComponent(params[0])] = decodeURIComponent(params[1] || ''); } } - if (has_singbox) { opt.set('type', "sing-box"); dom_prefix = "singbox_" opt.set(dom_prefix + 'protocol', "hysteria2"); - opt.set(dom_prefix + 'hysteria2_obfs_type', "salamander"); - opt.set(dom_prefix + 'hysteria2_obfs_password', queryParam["obfs-password"]); - opt.set(dom_prefix + 'hysteria2_auth_password', queryParam.auth); + opt.set(dom_prefix + 'hysteria2_auth_password', decodeURIComponent(password)); + if (queryParam["obfs-password"]) { + opt.set(dom_prefix + 'hysteria2_obfs_type', "salamander"); + opt.set(dom_prefix + 'hysteria2_obfs_password', queryParam["obfs-password"]); + } } if (has_hysteria2) { opt.set('type', "Hysteria2"); dom_prefix = "hysteria2_" - opt.set(dom_prefix + 'obfs', queryParam["obfs-password"]); - opt.set(dom_prefix + 'auth_password', queryParam.auth); + opt.set(dom_prefix + 'auth_password', decodeURIComponent(password)); + if (queryParam["obfs-password"]) { + opt.set(dom_prefix + 'obfs', queryParam["obfs-password"]); + } if (queryParam.pinSHA256) { opt.set(dom_prefix + 'tls_pinSHA256', queryParam.pinSHA256); } diff --git a/luci-app-passwall/root/usr/share/passwall/subscribe.lua b/luci-app-passwall/root/usr/share/passwall/subscribe.lua index 00672a7c2..b0d879f22 100755 --- a/luci-app-passwall/root/usr/share/passwall/subscribe.lua +++ b/luci-app-passwall/root/usr/share/passwall/subscribe.lua @@ -873,15 +873,18 @@ local function processData(szType, content, add_mode, add_from) content = content:sub(0, idx_sp - 1) end result.remarks = UrlDecode(alias) - - local dat = split(content, '%?') - local host_port = dat[1] + local Info = content + if content:find("@") then + local contents = split(content, "@") + result.hysteria2_auth_password = UrlDecode(contents[1]) + Info = (contents[2] or ""):gsub("/%?", "?") + end + local query = split(Info, "?") + local host_port = query[1] local params = {} - for _, v in pairs(split(dat[2], '&')) do + for _, v in pairs(split(query[2], '&')) do local t = split(v, '=') - if #t > 0 then - params[t[1]] = t[2] - end + params[string.lower(t[1])] = UrlDecode(t[2]) end -- [2001:4860:4860::8888]:443 -- 8.8.8.8:443 @@ -896,7 +899,6 @@ local function processData(szType, content, add_mode, add_from) else result.address = host_port end - result.hysteria2_auth_password = params.auth result.tls_serverName = params.sni if params.insecure and (params.insecure == "1" or params.insecure == "0") then result.tls_allowInsecure = params.insecure @@ -908,13 +910,17 @@ local function processData(szType, content, add_mode, add_from) if has_hysteria2 then result.type = "Hysteria2" - result.hysteria2_obfs = params["obfs-password"] + if params["obfs-password"] then + result.hysteria2_obfs = params["obfs-password"] + end end if hysteria2_type_default == "sing-box" and has_singbox then result.type = 'sing-box' result.protocol = "hysteria2" - result.hysteria2_obfs_type = "salamander" - result.hysteria2_obfs_password = params["obfs-password"] + if params["obfs-password"] then + result.hysteria2_obfs_type = "salamander" + result.hysteria2_obfs_password = params["obfs-password"] + end end else log('暂时不支持' .. szType .. "类型的节点订阅,跳过此节点。")