From 4601aba00108a481e07fe3c6772ddd483286bbf1 Mon Sep 17 00:00:00 2001 From: gitea-action Date: Wed, 21 May 2025 21:00:24 +0800 Subject: [PATCH] luci-app-passwall: sync upstream last commit: https://github.com/xiaorouji/openwrt-passwall/commit/c18e540f21094b7b496813fe20aa6297f061c210 --- .../model/cbi/passwall/client/rule_list.lua | 30 +++++++++++++------ .../model/cbi/passwall/client/shunt_rules.lua | 16 ++++++++-- 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/rule_list.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/rule_list.lua index 88867f555..d1d235734 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/rule_list.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/rule_list.lua @@ -12,6 +12,18 @@ local chnroute_path = "/usr/share/passwall/rules/chnroute" m = Map(appname) api.set_apply_on_parse(m) +function clean_text(text) + local nbsp = string.char(0xC2, 0xA0) -- 不间断空格(U+00A0) + local fullwidth_space = string.char(0xE3, 0x80, 0x80) -- 全角空格(U+3000) + return text + :gsub(nbsp, " ") + :gsub(fullwidth_space, " ") + :gsub("^%s+", "") + :gsub("%s+$", "\n") + :gsub("\r\n", "\n") + :gsub("[ \t]*\n[ \t]*", "\n") +end + -- [[ Rule List Settings ]]-- s = m:section(TypedSection, "global_rules") s.anonymous = true @@ -40,7 +52,7 @@ o.remove = function(self, section, value) end o.validate = function(self, value) local hosts= {} - value = value:gsub("^%s+", ""):gsub("%s+$","\n"):gsub("\r\n","\n"):gsub("[ \t]*\n[ \t]*", "\n") + value = clean_text(value) string.gsub(value, '[^' .. "\r\n" .. ']+', function(w) table.insert(hosts, w) end) for index, host in ipairs(hosts) do if host:sub(1, 1) == "#" or host:sub(1, 8) == "geosite:" then @@ -69,7 +81,7 @@ o.remove = function(self, section, value) end o.validate = function(self, value) local ipmasks= {} - value = value:gsub("^%s+", ""):gsub("%s+$","\n"):gsub("\r\n","\n"):gsub("[ \t]*\n[ \t]*", "\n") + value = clean_text(value) string.gsub(value, '[^' .. "\r\n" .. ']+', function(w) table.insert(ipmasks, w) end) for index, ipmask in ipairs(ipmasks) do if ipmask:sub(1, 1) == "#" or ipmask:sub(1, 6) == "geoip:" then @@ -100,7 +112,7 @@ o.remove = function(self, section, value) end o.validate = function(self, value) local hosts= {} - value = value:gsub("^%s+", ""):gsub("%s+$","\n"):gsub("\r\n","\n"):gsub("[ \t]*\n[ \t]*", "\n") + value = clean_text(value) string.gsub(value, '[^' .. "\r\n" .. ']+', function(w) table.insert(hosts, w) end) for index, host in ipairs(hosts) do if host:sub(1, 1) == "#" or host:sub(1, 8) == "geosite:" then @@ -129,7 +141,7 @@ o.remove = function(self, section, value) end o.validate = function(self, value) local ipmasks= {} - value = value:gsub("^%s+", ""):gsub("%s+$","\n"):gsub("\r\n","\n"):gsub("[ \t]*\n[ \t]*", "\n") + value = clean_text(value) string.gsub(value, '[^' .. "\r\n" .. ']+', function(w) table.insert(ipmasks, w) end) for index, ipmask in ipairs(ipmasks) do if ipmask:sub(1, 1) == "#" or ipmask:sub(1, 6) == "geoip:" then @@ -158,7 +170,7 @@ o.remove = function(self, section, value) end o.validate = function(self, value) local hosts= {} - value = value:gsub("^%s+", ""):gsub("%s+$","\n"):gsub("\r\n","\n"):gsub("[ \t]*\n[ \t]*", "\n") + value = clean_text(value) string.gsub(value, '[^' .. "\r\n" .. ']+', function(w) table.insert(hosts, w) end) for index, host in ipairs(hosts) do if host:sub(1, 1) == "#" or host:sub(1, 8) == "geosite:" then @@ -187,7 +199,7 @@ o.remove = function(self, section, value) end o.validate = function(self, value) local ipmasks= {} - value = value:gsub("^%s+", ""):gsub("%s+$","\n"):gsub("\r\n","\n"):gsub("[ \t]*\n[ \t]*", "\n") + value = clean_text(value) string.gsub(value, '[^' .. "\r\n" .. ']+', function(w) table.insert(ipmasks, w) end) for index, ipmask in ipairs(ipmasks) do if ipmask:sub(1, 1) == "#" or ipmask:sub(1, 6) == "geoip:" then @@ -216,7 +228,7 @@ o.remove = function(self, section, value) end o.validate = function(self, value) local ipmasks= {} - value = value:gsub("^%s+", ""):gsub("%s+$","\n"):gsub("\r\n","\n"):gsub("[ \t]*\n[ \t]*", "\n") + value = clean_text(value) string.gsub(value, '[^' .. "\r\n" .. ']+', function(w) table.insert(ipmasks, w) end) for index, ipmask in ipairs(ipmasks) do if ipmask:sub(1, 1) == "#" then @@ -245,7 +257,7 @@ o.remove = function(self, section, value) end o.validate = function(self, value) local ipmasks= {} - value = value:gsub("^%s+", ""):gsub("%s+$","\n"):gsub("\r\n","\n"):gsub("[ \t]*\n[ \t]*", "\n") + value = clean_text(value) string.gsub(value, '[^' .. "\r\n" .. ']+', function(w) table.insert(ipmasks, w) end) for index, ipmask in ipairs(ipmasks) do if ipmask:sub(1, 1) == "#" then @@ -267,7 +279,7 @@ o.cfgvalue = function(self, section) return fs.readfile(hosts) or "" end o.write = function(self, section, value) - fs.writefile(hosts, value:gsub("^%s+", ""):gsub("%s+$","\n"):gsub("\r\n","\n"):gsub("[ \t]*\n[ \t]*", "\n")) + fs.writefile(hosts, clean_text(value)) end o.remove = function(self, section, value) fs.writefile(hosts, "") diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/shunt_rules.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/shunt_rules.lua index 6b1ad2c12..e3b7c2b3a 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/shunt_rules.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/shunt_rules.lua @@ -6,6 +6,18 @@ m = Map(appname, "Sing-Box/Xray " .. translate("Shunt Rule")) m.redirect = api.url() api.set_apply_on_parse(m) +function clean_text(text) + local nbsp = string.char(0xC2, 0xA0) -- 不间断空格(U+00A0) + local fullwidth_space = string.char(0xE3, 0x80, 0x80) -- 全角空格(U+3000) + return text + :gsub(nbsp, " ") + :gsub(fullwidth_space, " ") + :gsub("^%s+", "") + :gsub("%s+$", "\n") + :gsub("\r\n", "\n") + :gsub("[ \t]*\n[ \t]*", "\n") +end + s = m:section(NamedSection, arg[1], "shunt_rules", "") s.addremove = false s.dynamic = false @@ -107,7 +119,7 @@ domain_list.rows = 10 domain_list.wrap = "off" domain_list.validate = function(self, value) local hosts= {} - value = value:gsub("^%s+", ""):gsub("%s+$","\n"):gsub("\r\n","\n"):gsub("[ \t]*\n[ \t]*", "\n") + value = clean_text(value) string.gsub(value, "[^\r\n]+", function(w) table.insert(hosts, w) end) for index, host in ipairs(hosts) do local flag = 1 @@ -146,7 +158,7 @@ ip_list.rows = 10 ip_list.wrap = "off" ip_list.validate = function(self, value) local ipmasks= {} - value = value:gsub("^%s+", ""):gsub("%s+$","\n"):gsub("\r\n","\n"):gsub("[ \t]*\n[ \t]*", "\n") + value = clean_text(value) string.gsub(value, "[^\r\n]+", function(w) table.insert(ipmasks, w) end) for index, ipmask in ipairs(ipmasks) do if ipmask:find("geoip:") and ipmask:find("geoip:") == 1 and not ipmask:find("%s") then