From b0c76920877d672cf56789db126c7df1d2d5d912 Mon Sep 17 00:00:00 2001 From: gitea-action Date: Thu, 26 Dec 2024 07:02:44 +0800 Subject: [PATCH] luci-app-passwall2: sync upstream last commit: https://github.com/xiaorouji/openwrt-passwall2/commit/d6f428ddd647340127691f058c2d6eb4d332bbab --- luci-app-passwall2/Makefile | 2 +- .../luasrc/controller/passwall2.lua | 15 +++--- luci-app-passwall2/luasrc/passwall2/api.lua | 47 +++++++++++++++++++ .../usr/share/passwall2/helper_dnsmasq.lua | 6 +-- .../root/usr/share/passwall2/subscribe.lua | 10 ++-- 5 files changed, 64 insertions(+), 16 deletions(-) diff --git a/luci-app-passwall2/Makefile b/luci-app-passwall2/Makefile index 520f388eb..932ae0a89 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:=24.12.25 +PKG_VERSION:=24.12.26 PKG_RELEASE:=1 PKG_CONFIG_DEPENDS:= \ diff --git a/luci-app-passwall2/luasrc/controller/passwall2.lua b/luci-app-passwall2/luasrc/controller/passwall2.lua index 2829d3dd1..56b59097b 100644 --- a/luci-app-passwall2/luasrc/controller/passwall2.lua +++ b/luci-app-passwall2/luasrc/controller/passwall2.lua @@ -3,7 +3,7 @@ module("luci.controller.passwall2", package.seeall) local api = require "luci.passwall2.api" local appname = api.appname -- not available -local uci = luci.model.uci.cursor() -- in funtion index() +local uci = api.libuci -- in funtion index() local http = require "luci.http" local util = require "luci.util" local i18n = require "luci.i18n" @@ -14,8 +14,9 @@ function index() luci.sys.call('cp -f /usr/share/passwall2/0_default_config /etc/config/passwall2') else return end end + local api = require "luci.passwall2.api" local appname = "passwall2" -- global definitions not available - local uci = luci.model.uci.cursor() -- in function index() + local uci = api.libuci -- in function index() entry({"admin", "services", appname}).dependent = true entry({"admin", "services", appname, "reset_config"}, call("reset_config")).leaf = true entry({"admin", "services", appname, "show"}, call("show_menu")).leaf = true @@ -134,7 +135,7 @@ function socks_autoswitch_add_node() table.insert(new_list, e.id) end end - uci:set_list(appname, id, "autoswitch_backup_node", new_list) + api.uci_set_list(uci, appname, id, "autoswitch_backup_node", new_list) uci:commit(appname) end luci.http.redirect(api.url("socks_config", id)) @@ -150,7 +151,7 @@ function socks_autoswitch_remove_node() table.remove(new_list, i) end end - uci:set_list(appname, id, "autoswitch_backup_node", new_list) + api.uci_set_list(uci, appname, id, "autoswitch_backup_node", new_list) uci:commit(appname) end luci.http.redirect(api.url("socks_config", id)) @@ -299,7 +300,7 @@ end function copy_node() local section = luci.http.formvalue("section") local uuid = api.gen_short_uuid() - uci:section(appname, "nodes", uuid) + api.uci_section(uci, appname, "nodes", uuid) for k, v in pairs(uci:get_all(appname, section)) do local filter = k:find("%.") if filter and filter == 1 then @@ -322,7 +323,7 @@ function clear_all_nodes() uci:delete(appname, '@global[0]', "node") uci:foreach(appname, "socks", function(t) uci:delete(appname, t[".name"]) - uci:set_list(appname, t[".name"], "autoswitch_backup_node", {}) + api.uci_set_list(uci, appname, t[".name"], "autoswitch_backup_node", {}) end) uci:foreach(appname, "haproxy_config", function(t) uci:delete(appname, t[".name"]) @@ -354,7 +355,7 @@ function delete_select_nodes() table.remove(auto_switch_node_list, i) end end - uci:set_list(appname, t[".name"], "autoswitch_backup_node", auto_switch_node_list) + api.uci_set_list(uci, appname, t[".name"], "autoswitch_backup_node", auto_switch_node_list) end) uci:foreach(appname, "haproxy_config", function(t) if t["lbss"] == w then diff --git a/luci-app-passwall2/luasrc/passwall2/api.lua b/luci-app-passwall2/luasrc/passwall2/api.lua index 382a7412e..855194b41 100644 --- a/luci-app-passwall2/luasrc/passwall2/api.lua +++ b/luci-app-passwall2/luasrc/passwall2/api.lua @@ -3,6 +3,7 @@ local com = require "luci.passwall2.com" bin = require "nixio".bin fs = require "nixio.fs" sys = require "luci.sys" +libuci = require "uci".cursor() uci = require"luci.model.uci".cursor() util = require "luci.util" datatypes = require "luci.cbi.datatypes" @@ -29,6 +30,52 @@ function log(...) end end +function uci_set_list(cursor, config, section, option, value) + if config and section and option then + if not value or #value == 0 then + return cursor:delete(config, section, option) + end + return cursor:set( + config, section, option, + ( type(value) == "table" and value or { value } ) + ) + end + return false +end + +function uci_section(cursor, config, type, name, values) + local stat = true + if name then + stat = cursor:set(config, name, type) + else + name = cursor:add(config, type) + stat = name and true + end + + return stat and name +end + +function sh_uci_get(config, section, option) + exec_call(string.format("uci -q get %s.%s.%s", config, section, option)) + exec_call(string.format("uci -q commit %s", config)) +end + +function sh_uci_set(config, section, option, val) + exec_call(string.format("uci -q set %s.%s.%s=\"%s\"", config, section, option, val)) + exec_call(string.format("uci -q commit %s", config)) +end + +function sh_uci_del(config, section, option) + exec_call(string.format("uci -q delete %s.%s.%s", config, section, option)) + exec_call(string.format("uci -q commit %s", config)) +end + +function sh_uci_add_list(config, section, option, val) + exec_call(string.format("uci -q del_list %s.%s.%s=\"%s\"", config, section, option, val)) + exec_call(string.format("uci -q add_list %s.%s.%s=\"%s\"", config, section, option, val)) + exec_call(string.format("uci -q commit %s", config)) +end + function set_cache_var(key, val) sys.call(string.format('/usr/share/passwall2/app.sh set_cache_var %s "%s"', key, val)) end diff --git a/luci-app-passwall2/root/usr/share/passwall2/helper_dnsmasq.lua b/luci-app-passwall2/root/usr/share/passwall2/helper_dnsmasq.lua index 731b94889..8870c3f8c 100644 --- a/luci-app-passwall2/root/usr/share/passwall2/helper_dnsmasq.lua +++ b/luci-app-passwall2/root/usr/share/passwall2/helper_dnsmasq.lua @@ -1,6 +1,6 @@ local api = require "luci.passwall2.api" local appname = "passwall2" -local uci = api.uci +local uci = api.libuci local sys = api.sys local fs = api.fs local datatypes = api.datatypes @@ -46,7 +46,7 @@ local function restore_servers() uci:commit(appname) end if dns_table and #dns_table > 0 then - uci:set_list("dhcp", "@dnsmasq[0]", "server", dns_table) + api.uci_set_list(uci, "dhcp", "@dnsmasq[0]", "server", dns_table) uci:commit("dhcp") end end @@ -102,7 +102,7 @@ function logic_restart(var) tinsert(dns_table, v) end end - uci:set_list("dhcp", "@dnsmasq[0]", "server", dns_table) + api.uci_set_list(uci, "dhcp", "@dnsmasq[0]", "server", dns_table) uci:commit("dhcp") end sys.call("/etc/init.d/dnsmasq restart >/dev/null 2>&1") diff --git a/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua b/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua index 6ed4ca459..d4b8f935a 100755 --- a/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua +++ b/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua @@ -19,7 +19,7 @@ local ssub, slen, schar, sbyte, sformat, sgsub = string.sub, string.len, string. local split = api.split local jsonParse, jsonStringify = luci.jsonc.parse, luci.jsonc.stringify local base64Decode = api.base64Decode -local uci = luci.model.uci.cursor() +local uci = api.libuci uci:revert(appname) local has_ss = api.is_finded("ss-redir") @@ -213,7 +213,7 @@ do set = function(o) for kk, vv in pairs(CONFIG) do if (vv.remarks == id .. "备用节点的列表") then - uci:set_list(appname, id, "autoswitch_backup_node", vv.new_nodes) + api.uci_set_list(uci, appname, id, "autoswitch_backup_node", vv.new_nodes) end end end @@ -285,8 +285,8 @@ do if (vv.remarks == "Xray负载均衡节点[" .. node_id .. "]列表") then uci:foreach(appname, "nodes", function(node2) if node2[".name"] == node[".name"] then - local section = uci:section(appname, "nodes", node_id) - uci:set_list(appname, section, "balancing_node", vv.new_nodes) + local section = api.uci_section(uci, appname, "nodes", node_id) + api.uci_set_list(uci, appname, section, "balancing_node", vv.new_nodes) end end) end @@ -1427,7 +1427,7 @@ local function update_node(manual) local remark = v["remark"] local list = v["list"] for _, vv in ipairs(list) do - local cfgid = uci:section(appname, "nodes", api.gen_short_uuid()) + local cfgid = api.uci_section(uci, appname, "nodes", api.gen_short_uuid()) for kkk, vvv in pairs(vv) do uci:set(appname, cfgid, kkk, vvv) -- sing-box 域名解析策略