From 55475397087ef91825cb60c54a5bedc5195dfb9f Mon Sep 17 00:00:00 2001 From: sbwml Date: Wed, 6 Sep 2023 23:39:56 +0800 Subject: [PATCH] luci-app-passwall2: sync upstream * d2d0f8e080b89f4d5651650d681949eb5961b769 --- luci-app-passwall2/Makefile | 2 +- .../model/cbi/passwall2/client/global.lua | 4 +- .../cbi/passwall2/client/node_subscribe.lua | 4 +- .../client/node_subscribe_config.lua | 4 +- .../model/cbi/passwall2/client/other.lua | 4 +- .../cbi/passwall2/client/socks_config.lua | 4 +- .../model/cbi/passwall2/client/type/brook.lua | 2 +- .../cbi/passwall2/client/type/hysteria.lua | 2 +- .../model/cbi/passwall2/client/type/ray.lua | 2 +- .../cbi/passwall2/client/type/sing-box.lua | 6 +- .../model/cbi/passwall2/server/type/brook.lua | 2 +- .../cbi/passwall2/server/type/hysteria.lua | 2 +- .../model/cbi/passwall2/server/type/ray.lua | 2 +- .../cbi/passwall2/server/type/sing-box.lua | 6 +- luci-app-passwall2/luasrc/passwall2/api.lua | 58 ++++++++++++++----- luci-app-passwall2/luasrc/passwall2/com.lua | 1 + .../luasrc/passwall2/util_sing-box.lua | 6 +- .../passwall2/node_list/link_share_man.htm | 32 ++++++---- luci-app-passwall2/po/zh-cn/passwall2.po | 4 +- .../root/usr/share/passwall2/0_default_config | 4 +- .../root/usr/share/passwall2/app.sh | 24 ++++++-- .../root/usr/share/passwall2/iptables.sh | 1 + .../root/usr/share/passwall2/nftables.sh | 3 +- .../root/usr/share/passwall2/subscribe.lua | 4 +- 24 files changed, 123 insertions(+), 60 deletions(-) diff --git a/luci-app-passwall2/Makefile b/luci-app-passwall2/Makefile index 7d64fba3a..8cc395e46 100644 --- a/luci-app-passwall2/Makefile +++ b/luci-app-passwall2/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall2 -PKG_VERSION:=1.20-4 +PKG_VERSION:=1.20-5 PKG_RELEASE:= PKG_CONFIG_DEPENDS:= \ diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua index da57fc056..1c6fe11b8 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua @@ -2,8 +2,8 @@ local api = require "luci.passwall2.api" local appname = api.appname local uci = api.uci local datatypes = api.datatypes -local has_singbox = api.is_finded("sing-box") -local has_xray = api.is_finded("xray") +local has_singbox = api.finded_com("singbox") +local has_xray = api.finded_com("xray") m = Map(appname) diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe.lua index 824ef1e28..c539fb1ab 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe.lua @@ -2,8 +2,8 @@ local api = require "luci.passwall2.api" local appname = api.appname local has_ss = api.is_finded("ss-redir") local has_ss_rust = api.is_finded("sslocal") -local has_singbox = api.is_finded("sing-box") -local has_xray = api.is_finded("xray") +local has_singbox = api.finded_com("singbox") +local has_xray = api.finded_com("xray") local ss_aead_type = {} if has_ss then ss_aead_type[#ss_aead_type + 1] = "shadowsocks-libev" diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe_config.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe_config.lua index a833c186b..a9b7ef011 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe_config.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe_config.lua @@ -3,8 +3,8 @@ local appname = api.appname local sys = api.sys local has_ss = api.is_finded("ss-redir") local has_ss_rust = api.is_finded("sslocal") -local has_singbox = api.is_finded("sing-box") -local has_xray = api.is_finded("xray") +local has_singbox = api.finded_com("singbox") +local has_xray = api.finded_com("xray") local ss_aead_type = {} if has_ss then ss_aead_type[#ss_aead_type + 1] = "shadowsocks-libev" diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua index 41a4e4817..81c95f471 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua @@ -2,8 +2,8 @@ local api = require "luci.passwall2.api" local appname = api.appname local fs = api.fs local uci = api.uci -local has_singbox = api.is_finded("sing-box") -local has_xray = api.is_finded("xray") +local has_singbox = api.finded_com("singbox") +local has_xray = api.finded_com("xray") local has_fw3 = api.is_finded("fw3") local has_fw4 = api.is_finded("fw4") diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/socks_config.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/socks_config.lua index bb4d2763e..0bd346dec 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/socks_config.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/socks_config.lua @@ -1,8 +1,8 @@ local api = require "luci.passwall2.api" local appname = api.appname local uci = api.uci -local has_singbox = api.is_finded("sing-box") -local has_xray = api.is_finded("xray") +local has_singbox = api.finded_com("singbox") +local has_xray = api.finded_com("xray") m = Map(appname) diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/brook.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/brook.lua index 8dc46bc29..0958529f0 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/brook.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/brook.lua @@ -2,7 +2,7 @@ local m, s = ... local api = require "luci.passwall2.api" -if not api.is_finded("brook") then +if not api.finded_com("brook") then return end diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/hysteria.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/hysteria.lua index 0ae9c2023..ad77ab658 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/hysteria.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/hysteria.lua @@ -2,7 +2,7 @@ local m, s = ... local api = require "luci.passwall2.api" -if not api.is_finded("hysteria") then +if not api.finded_com("hysteria") then return end diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua index ebbd61e0f..839b5c44e 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua @@ -2,7 +2,7 @@ local m, s = ... local api = require "luci.passwall2.api" -if not api.is_finded("xray") then +if not api.finded_com("xray") then return end diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua index d460a639f..b6c1eac39 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua @@ -2,11 +2,13 @@ local m, s = ... local api = require "luci.passwall2.api" -if not api.is_finded("sing-box") then +local singbox_bin = api.finded_com("singbox") + +if not singbox_bin then return end -local singbox_tags = luci.sys.exec(api.finded("sing-box") .. " version | grep 'Tags:' | awk '{print $2}'") +local singbox_tags = luci.sys.exec(singbox_bin .. " version | grep 'Tags:' | awk '{print $2}'") local appname = api.appname local uci = api.uci diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/brook.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/brook.lua index 4809d1dfc..b0383d0f1 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/brook.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/brook.lua @@ -2,7 +2,7 @@ local m, s = ... local api = require "luci.passwall2.api" -if not api.is_finded("brook") then +if not api.finded_com("brook") then return end diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/hysteria.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/hysteria.lua index e234c17d8..6207a459d 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/hysteria.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/hysteria.lua @@ -2,7 +2,7 @@ local m, s = ... local api = require "luci.passwall2.api" -if not api.is_finded("hysteria") then +if not api.finded_com("hysteria") then return end diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua index 5b82782b9..9ad0feffd 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua @@ -2,7 +2,7 @@ local m, s = ... local api = require "luci.passwall2.api" -if not api.is_finded("xray") then +if not api.finded_com("xray") then return end diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/sing-box.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/sing-box.lua index 766ea780b..843567035 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/sing-box.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/sing-box.lua @@ -2,11 +2,13 @@ local m, s = ... local api = require "luci.passwall2.api" -if not api.is_finded("sing-box")then +local singbox_bin = api.finded_com("singbox") + +if not singbox_bin then return end -local singbox_tags = luci.sys.exec(api.finded("sing-box") .. " version | grep 'Tags:' | awk '{print $2}'") +local singbox_tags = luci.sys.exec(singbox_bin .. " version | grep 'Tags:' | awk '{print $2}'") local type_name = "sing-box" diff --git a/luci-app-passwall2/luasrc/passwall2/api.lua b/luci-app-passwall2/luasrc/passwall2/api.lua index 113e9d4be..9c0546941 100644 --- a/luci-app-passwall2/luasrc/passwall2/api.lua +++ b/luci-app-passwall2/luasrc/passwall2/api.lua @@ -381,8 +381,14 @@ function get_customed_path(e) return uci_get_type("global_app", e .. "_file") end +function finded_com(e) + local bin = get_app_path(e) + if not bin then return end + return luci.sys.exec('echo -n $(type -t -p "%s" | head -n1)' % { bin }) +end + function finded(e) - return luci.sys.exec('echo -n $(type -t -p "/bin/%s" -p "/usr/bin/%s" -p "%s" "%s" | head -n1)' % {e, e, get_customed_path(e), e}) + return luci.sys.exec('echo -n $(type -t -p "/bin/%s" -p "/usr/bin/%s" "%s" | head -n1)' % {e, e, e}) end function is_finded(e) @@ -425,10 +431,12 @@ local function get_bin_version_cache(file, cmd) end function get_app_path(app_name) - local def_path = com[app_name].default_path - local path = uci_get_type("global_app", app_name:gsub("%-","_") .. "_file") - path = path and (#path>0 and path or def_path) or def_path - return path + if com[app_name] then + local def_path = com[app_name].default_path + local path = uci_get_type("global_app", app_name:gsub("%-","_") .. "_file") + path = path and (#path>0 and path or def_path) or def_path + return path + end end function get_app_version(app_name, file) @@ -790,12 +798,23 @@ function to_extract(app_name, file, subfix) return {code = 1, error = i18n.translate("File path required.")} end - if sys.exec("echo -n $(opkg list-installed | grep -c unzip)") ~= "1" then - exec("/bin/rm", {"-f", file}) - return { - code = 1, - error = i18n.translate("Not installed unzip, Can't unzip!") - } + local tools_name + if com[app_name].zipped then + if not com[app_name].zipped_suffix or com[app_name].zipped_suffix == "zip" then + tools_name = "unzip" + end + if com[app_name].zipped_suffix and com[app_name].zipped_suffix == "tar.gz" then + tools_name = "tar" + end + if tools_name then + if sys.exec("echo -n $(command -v %s)" % { tools_name }) == "" then + exec("/bin/rm", {"-f", file}) + return { + code = 1, + error = i18n.translate("Not installed %s, Can't unzip!" % { tools_name }) + } + end + end end sys.call("/bin/rm -rf /tmp/".. app_name .."_extract.*") @@ -809,8 +828,19 @@ function to_extract(app_name, file, subfix) local tmp_dir = util.trim(util.exec("mktemp -d -t ".. app_name .."_extract.XXXXXX")) local output = {} - exec("/usr/bin/unzip", {"-o", file, app_name, "-d", tmp_dir}, - function(chunk) output[#output + 1] = chunk end) + + if tools_name then + if tools_name == "unzip" then + local bin = sys.exec("echo -n $(command -v unzip)") + exec(bin, {"-o", file, app_name, "-d", tmp_dir}, function(chunk) output[#output + 1] = chunk end) + elseif tools_name == "tar" then + local bin = sys.exec("echo -n $(command -v tar)") + if com[app_name].zipped_suffix == "tar.gz" then + exec(bin, {"-zxf", file, "-C", tmp_dir}, function(chunk) output[#output + 1] = chunk end) + sys.call("/bin/mv -f " .. tmp_dir .. "/*/" .. com[app_name].name:lower() .. " " .. tmp_dir) + end + end + end local files = util.split(table.concat(output)) @@ -829,7 +859,7 @@ function to_move(app_name,file) local bin_path = file local cmd_rm_tmp = "/bin/rm -rf /tmp/" .. app_name .. "_download.*" if fs.stat(file, "type") == "dir" then - bin_path = file .. "/" .. app_name + bin_path = file .. "/" .. com[app_name].name:lower() cmd_rm_tmp = "/bin/rm -rf /tmp/" .. app_name .. "_extract.*" end diff --git a/luci-app-passwall2/luasrc/passwall2/com.lua b/luci-app-passwall2/luasrc/passwall2/com.lua index 8da871622..61366cc38 100644 --- a/luci-app-passwall2/luasrc/passwall2/com.lua +++ b/luci-app-passwall2/luasrc/passwall2/com.lua @@ -39,6 +39,7 @@ _M.singbox = { get_url = gh_pre_release_url, cmd_version = "version | awk '{print $3}' | sed -n 1P", zipped = true, + zipped_suffix = "tar.gz", default_path = "/usr/bin/sing-box", match_fmt_str = "linux%%-%s", file_tree = { diff --git a/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua b/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua index 55c04d2e2..77f5b25fb 100644 --- a/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua +++ b/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua @@ -662,12 +662,12 @@ function gen_config(var) local route = { rules = {}, geoip = { - path = singbox_settings.geoip_path or "/tmp/singbox/geoip.db", + path = singbox_settings.geoip_path or "/usr/share/singbox/geoip.db", download_url = singbox_settings.geoip_url or nil, download_detour = nil, }, geosite = { - path = singbox_settings.geosite_path or "/tmp/singbox/geosite.db", + path = singbox_settings.geosite_path or "/usr/share/singbox/geosite.db", download_url = singbox_settings.geosite_url or nil, download_detour = nil, }, @@ -1134,7 +1134,7 @@ function gen_config(var) end experimental.clash_api = { store_fakeip = true, - cache_file = "/tmp/singbox/passwall2_" .. flag .. ".db" + cache_file = "/tmp/singbox_passwall2_" .. flag .. ".db" } end end diff --git a/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm b/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm index 9c9880e23..e920c3898 100644 --- a/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm +++ b/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm @@ -1,7 +1,8 @@ <%+cbi/valueheader%> <% local api = require "luci.passwall2.api" -local has_xray = api.is_finded("xray") +local has_singbox = api.finded_com("singbox") +local has_xray = api.finded_com("xray") -%>