mirror of
https://github.com/caiwx86/small-packages.git
synced 2026-11-02 18:53:56 +08:00
update 2026-08-15 00:44:02
This commit is contained in:
1 parent
58e04d6ceb
commit
a59171002f
84 files changed
+919
-835
No files matched your search
@@ -6,8 +6,9 @@
|
||||
require 'luci.util'
|
||||
require 'luci.jsonc'
|
||||
require 'luci.sys'
|
||||
local appname = 'passwall'
|
||||
local api = require ("luci.passwall.api")
|
||||
local api = require "luci.passwall.api"
|
||||
local appname = api.appname
|
||||
local c_config = api.c_config
|
||||
local datatypes = require "luci.cbi.datatypes"
|
||||
|
||||
loadfile("/usr/share/" .. appname .. "/clash_subconverter.lua")()
|
||||
@@ -30,9 +31,9 @@ local has_singbox = api.finded_com("sing-box")
|
||||
local has_xray = api.finded_com("xray")
|
||||
local has_hysteria2 = api.finded_com("hysteria")
|
||||
local DEFAULT_ALLOWINSECURE = true
|
||||
local DEFAULT_FILTER_KEYWORD_MODE = uci:get(appname, "@global_subscribe[0]", "filter_keyword_mode") or "0"
|
||||
local DEFAULT_FILTER_KEYWORD_DISCARD_LIST = uci:get(appname, "@global_subscribe[0]", "filter_discard_list") or {}
|
||||
local DEFAULT_FILTER_KEYWORD_KEEP_LIST = uci:get(appname, "@global_subscribe[0]", "filter_keep_list") or {}
|
||||
local DEFAULT_FILTER_KEYWORD_MODE = uci:get(c_config, "@global_subscribe[0]", "filter_keyword_mode") or "0"
|
||||
local DEFAULT_FILTER_KEYWORD_DISCARD_LIST = uci:get(c_config, "@global_subscribe[0]", "filter_discard_list") or {}
|
||||
local DEFAULT_FILTER_KEYWORD_KEEP_LIST = uci:get(c_config, "@global_subscribe[0]", "filter_keep_list") or {}
|
||||
-- 取节点使用core类型(节点订阅页面未设置时,自动取默认)
|
||||
local DEFAULT_SS_TYPE = api.get_core("ss_type", {{has_ss_rust,"shadowsocks-rust"},{has_singbox,"sing-box"},{has_xray,"xray"}})
|
||||
local DEFAULT_TROJAN_TYPE = api.get_core("trojan_type", {{has_singbox,"sing-box"},{has_xray,"xray"}})
|
||||
@@ -141,13 +142,13 @@ do
|
||||
local szType = "@global[0]"
|
||||
local option = protocol .. "_node"
|
||||
|
||||
local node_id = uci:get(appname, szType, option)
|
||||
local node_id = uci:get(c_config, szType, option)
|
||||
CONFIG[#CONFIG + 1] = {
|
||||
log = true,
|
||||
remarks = name .. "节点",
|
||||
currentNode = node_id and uci:get_all(appname, node_id) or nil,
|
||||
currentNode = node_id and uci:get_all(c_config, node_id) or nil,
|
||||
set = function(o, server)
|
||||
uci:set(appname, szType, option, server)
|
||||
uci:set(c_config, szType, option, server)
|
||||
o.newNodeId = server
|
||||
end
|
||||
}
|
||||
@@ -158,7 +159,7 @@ do
|
||||
if true then
|
||||
local i = 0
|
||||
local option = "node"
|
||||
uci:foreach(appname, "socks", function(t)
|
||||
uci:foreach(c_config, "socks", function(t)
|
||||
i = i + 1
|
||||
local id = t[".name"]
|
||||
local node_id = t[option]
|
||||
@@ -166,14 +167,14 @@ do
|
||||
log = true,
|
||||
id = id,
|
||||
remarks = "Socks节点列表[" .. i .. "]",
|
||||
currentNode = node_id and uci:get_all(appname, node_id) or nil,
|
||||
currentNode = node_id and uci:get_all(c_config, node_id) or nil,
|
||||
set = function(o, server)
|
||||
if not server or server == "" then
|
||||
if #nodes_table > 0 then
|
||||
server = nodes_table[1][".name"]
|
||||
end
|
||||
end
|
||||
uci:set(appname, t[".name"], option, server)
|
||||
uci:set(c_config, t[".name"], option, server)
|
||||
o.newNodeId = server
|
||||
end
|
||||
}
|
||||
@@ -183,7 +184,7 @@ do
|
||||
local newNodes = {}
|
||||
for k, asb_node_id in ipairs(t.autoswitch_backup_node) do
|
||||
if asb_node_id then
|
||||
local currentNode = uci:get_all(appname, asb_node_id) or {}
|
||||
local currentNode = uci:get_all(c_config, asb_node_id) or {}
|
||||
if currentNode[".type"] == "nodes" then
|
||||
currentNodes[#currentNodes + 1] = {
|
||||
log = true,
|
||||
@@ -205,7 +206,7 @@ do
|
||||
set = function(o, newNodes)
|
||||
if o then
|
||||
if not newNodes then newNodes = o.newNodes end
|
||||
uci:set_list(appname, id, "autoswitch_backup_node", newNodes or {})
|
||||
uci:set_list(c_config, id, "autoswitch_backup_node", newNodes or {})
|
||||
end
|
||||
end
|
||||
}
|
||||
@@ -221,25 +222,25 @@ do
|
||||
local ip, port = str:match("^([%d%.]+):(%d+)$")
|
||||
return ip and datatypes.ipaddr(ip) and tonumber(port) and tonumber(port) <= 65535
|
||||
end
|
||||
uci:foreach(appname, "haproxy_config", function(t)
|
||||
uci:foreach(c_config, "haproxy_config", function(t)
|
||||
i = i + 1
|
||||
local node_id = t[option]
|
||||
CONFIG[#CONFIG + 1] = {
|
||||
log = true,
|
||||
id = t[".name"],
|
||||
remarks = "HAProxy负载均衡节点列表[" .. i .. "]",
|
||||
currentNode = node_id and uci:get_all(appname, node_id) or nil,
|
||||
currentNode = node_id and uci:get_all(c_config, node_id) or nil,
|
||||
set = function(o, server)
|
||||
-- 如果当前 lbss 值不是 ip:port 格式,才进行修改
|
||||
if not is_ip_port(t[option]) then
|
||||
uci:set(appname, t[".name"], option, server)
|
||||
uci:set(c_config, t[".name"], option, server)
|
||||
o.newNodeId = server
|
||||
end
|
||||
end,
|
||||
delete = function(o)
|
||||
-- 如果当前 lbss 值不是 ip:port 格式,才进行删除
|
||||
if not is_ip_port(t[option]) then
|
||||
uci:delete(appname, t[".name"])
|
||||
uci:delete(c_config, t[".name"])
|
||||
end
|
||||
end
|
||||
}
|
||||
@@ -249,7 +250,7 @@ do
|
||||
if true then
|
||||
local i = 0
|
||||
local options = {"tcp", "udp"}
|
||||
uci:foreach(appname, "acl_rule", function(t)
|
||||
uci:foreach(c_config, "acl_rule", function(t)
|
||||
i = i + 1
|
||||
for index, value in ipairs(options) do
|
||||
local option = value .. "_node"
|
||||
@@ -258,9 +259,9 @@ do
|
||||
log = true,
|
||||
id = t[".name"],
|
||||
remarks = "访问控制列表[" .. i .. "]",
|
||||
currentNode = node_id and uci:get_all(appname, node_id) or nil,
|
||||
currentNode = node_id and uci:get_all(c_config, node_id) or nil,
|
||||
set = function(o, server)
|
||||
uci:set(appname, t[".name"], option, server)
|
||||
uci:set(c_config, t[".name"], option, server)
|
||||
o.newNodeId = server
|
||||
end
|
||||
}
|
||||
@@ -268,11 +269,11 @@ do
|
||||
end)
|
||||
end
|
||||
|
||||
uci:foreach(appname, "nodes", function(node)
|
||||
uci:foreach(c_config, "nodes", function(node)
|
||||
local node_id = node[".name"]
|
||||
if node.protocol and node.protocol == '_shunt' then
|
||||
local rules = {}
|
||||
uci:foreach(appname, "shunt_rules", function(e)
|
||||
uci:foreach(c_config, "shunt_rules", function(e)
|
||||
if e[".name"] and e.remarks then
|
||||
table.insert(rules, e)
|
||||
table.insert(rules, {
|
||||
@@ -293,7 +294,7 @@ do
|
||||
for k, e in pairs(rules) do
|
||||
local _node_id = node[e[".name"]] or nil
|
||||
if _node_id then
|
||||
local section = uci:get_all(appname, _node_id) or {}
|
||||
local section = uci:get_all(c_config, _node_id) or {}
|
||||
if section[".type"] == "nodes" then
|
||||
CONFIG[#CONFIG + 1] = {
|
||||
log = false,
|
||||
@@ -301,7 +302,7 @@ do
|
||||
remarks = "分流" .. e.remarks .. "节点",
|
||||
set = function(o, server)
|
||||
if not server then server = "" end
|
||||
uci:set(appname, node_id, e[".name"], server)
|
||||
uci:set(c_config, node_id, e[".name"], server)
|
||||
o.newNodeId = server
|
||||
end
|
||||
}
|
||||
@@ -318,7 +319,7 @@ do
|
||||
log = true,
|
||||
node = b_node_id,
|
||||
currentNode = (function()
|
||||
local section = uci:get_all(appname, b_node_id) or {}
|
||||
local section = uci:get_all(c_config, b_node_id) or {}
|
||||
if section[".type"] == "socks" then
|
||||
return { Socks = b_node_id }
|
||||
end
|
||||
@@ -340,15 +341,15 @@ do
|
||||
set = function(o, newNodes)
|
||||
if o then
|
||||
if not newNodes then newNodes = o.newNodes end
|
||||
uci:set_list(appname, node_id, "balancing_node", newNodes or {})
|
||||
uci:set_list(c_config, node_id, "balancing_node", newNodes or {})
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
--后备节点
|
||||
local currentNode = uci:get_all(appname, node_id) or nil
|
||||
local currentNode = uci:get_all(c_config, node_id) or nil
|
||||
if currentNode and currentNode.fallback_node then
|
||||
local section = uci:get_all(appname, currentNode.fallback_node) or {}
|
||||
local section = uci:get_all(c_config, currentNode.fallback_node) or {}
|
||||
if section[".type"] == "nodes" then
|
||||
CONFIG[#CONFIG + 1] = {
|
||||
log = true,
|
||||
@@ -356,11 +357,11 @@ do
|
||||
remarks = "Xray负载均衡节点[" .. node_id .. "]后备节点",
|
||||
currentNode = section,
|
||||
set = function(o, server)
|
||||
uci:set(appname, node_id, "fallback_node", server)
|
||||
uci:set(c_config, node_id, "fallback_node", server)
|
||||
o.newNodeId = server
|
||||
end,
|
||||
delete = function(o)
|
||||
uci:delete(appname, node_id, "fallback_node")
|
||||
uci:delete(c_config, node_id, "fallback_node")
|
||||
end
|
||||
}
|
||||
end
|
||||
@@ -375,7 +376,7 @@ do
|
||||
log = true,
|
||||
node = u_node_id,
|
||||
currentNode = (function()
|
||||
local section = uci:get_all(appname, u_node_id) or {}
|
||||
local section = uci:get_all(c_config, u_node_id) or {}
|
||||
if section[".type"] == "socks" then
|
||||
return { Socks = u_node_id }
|
||||
end
|
||||
@@ -397,47 +398,47 @@ do
|
||||
set = function(o, newNodes)
|
||||
if o then
|
||||
if not newNodes then newNodes = o.newNodes end
|
||||
uci:set_list(appname, node_id, "urltest_node", newNodes or {})
|
||||
uci:set_list(c_config, node_id, "urltest_node", newNodes or {})
|
||||
end
|
||||
end
|
||||
}
|
||||
else
|
||||
--前置代理节点
|
||||
local currentNode = uci:get_all(appname, node_id) or nil
|
||||
local currentNode = uci:get_all(c_config, node_id) or nil
|
||||
if currentNode and currentNode.preproxy_node then
|
||||
local section = uci:get_all(appname, currentNode.preproxy_node) or {}
|
||||
local section = uci:get_all(c_config, currentNode.preproxy_node) or {}
|
||||
if section[".type"] == "nodes" then
|
||||
CONFIG[#CONFIG + 1] = {
|
||||
log = true,
|
||||
id = node_id,
|
||||
remarks = "节点[" .. node_id .. "]前置代理节点",
|
||||
currentNode = uci:get_all(appname, currentNode.preproxy_node) or nil,
|
||||
currentNode = uci:get_all(c_config, currentNode.preproxy_node) or nil,
|
||||
set = function(o, server)
|
||||
uci:set(appname, node_id, "preproxy_node", server)
|
||||
uci:set(c_config, node_id, "preproxy_node", server)
|
||||
o.newNodeId = server
|
||||
end,
|
||||
delete = function(o)
|
||||
uci:delete(appname, node_id, "preproxy_node")
|
||||
uci:delete(c_config, node_id, "preproxy_node")
|
||||
end
|
||||
}
|
||||
end
|
||||
end
|
||||
--落地节点
|
||||
local currentNode = uci:get_all(appname, node_id) or nil
|
||||
local currentNode = uci:get_all(c_config, node_id) or nil
|
||||
if currentNode and currentNode.to_node then
|
||||
local section = uci:get_all(appname, currentNode.to_node) or {}
|
||||
local section = uci:get_all(c_config, currentNode.to_node) or {}
|
||||
if section[".type"] == "nodes" then
|
||||
CONFIG[#CONFIG + 1] = {
|
||||
log = true,
|
||||
id = node_id,
|
||||
remarks = "节点[" .. node_id .. "]落地节点",
|
||||
currentNode = uci:get_all(appname, currentNode.to_node) or nil,
|
||||
currentNode = uci:get_all(c_config, currentNode.to_node) or nil,
|
||||
set = function(o, server)
|
||||
uci:set(appname, node_id, "to_node", server)
|
||||
uci:set(c_config, node_id, "to_node", server)
|
||||
o.newNodeId = server
|
||||
end,
|
||||
delete = function(o)
|
||||
uci:delete(appname, node_id, "to_node")
|
||||
uci:delete(c_config, node_id, "to_node")
|
||||
end
|
||||
}
|
||||
end
|
||||
@@ -1756,19 +1757,19 @@ local function truncate_nodes(group)
|
||||
end
|
||||
end
|
||||
end
|
||||
uci:foreach(appname, "nodes", function(node)
|
||||
uci:foreach(c_config, "nodes", function(node)
|
||||
if node.add_mode == "2" then
|
||||
if (not group) or (group:lower() == (node.group or ""):lower()) then
|
||||
uci:delete(appname, node['.name'])
|
||||
uci:delete(c_config, node['.name'])
|
||||
end
|
||||
end
|
||||
end)
|
||||
uci:foreach(appname, "subscribe_list", function(o)
|
||||
uci:foreach(c_config, "subscribe_list", function(o)
|
||||
if (not group) or (group:lower() == (o.remark or ""):lower()) then
|
||||
uci:delete(appname, o['.name'], "md5")
|
||||
uci:delete(c_config, o['.name'], "md5")
|
||||
end
|
||||
end)
|
||||
api.uci_save(uci, appname, true)
|
||||
api.uci_save(uci, c_config, true)
|
||||
end
|
||||
|
||||
local function select_node(nodes, config, parentConfig)
|
||||
@@ -1907,10 +1908,10 @@ local function update_node(manual)
|
||||
end
|
||||
|
||||
if manual == 0 and next(group) then
|
||||
uci:foreach(appname, "nodes", function(node)
|
||||
uci:foreach(c_config, "nodes", function(node)
|
||||
-- 如果未发现新节点或手动导入的节点就不要删除了...
|
||||
if node.add_mode == "2" and (node.group and group[node.group:lower()] == true) then
|
||||
uci:delete(appname, node['.name'])
|
||||
uci:delete(c_config, node['.name'])
|
||||
end
|
||||
end)
|
||||
end
|
||||
@@ -1923,9 +1924,9 @@ local function update_node(manual)
|
||||
-- Subscription Group Chain Agent
|
||||
local function valid_chain_node(node)
|
||||
if not node then return "" end
|
||||
local cp = uci:get(appname, node, "chain_proxy") or ""
|
||||
local am = uci:get(appname, node, "add_mode") or "0"
|
||||
chain_node_type = (cp == "" and am ~= "2") and (uci:get(appname, node, "type") or "") or ""
|
||||
local cp = uci:get(c_config, node, "chain_proxy") or ""
|
||||
local am = uci:get(c_config, node, "add_mode") or "0"
|
||||
chain_node_type = (cp == "" and am ~= "2") and (uci:get(c_config, node, "type") or "") or ""
|
||||
if chain_node_type ~= "Xray" and chain_node_type ~= "sing-box" then
|
||||
chain_node_type = ""
|
||||
return ""
|
||||
@@ -1944,22 +1945,22 @@ local function update_node(manual)
|
||||
chain_node_type = (outbound_iface_group ~= "") and "iface" or chain_node_type
|
||||
end
|
||||
for _, vv in ipairs(list) do
|
||||
local cfgid = uci:section(appname, "nodes", api.gen_random_char())
|
||||
local cfgid = uci:section(c_config, "nodes", api.gen_random_char())
|
||||
for kkk, vvv in pairs(vv) do
|
||||
if type(vvv) == "table" and next(vvv) ~= nil then
|
||||
uci:set_list(appname, cfgid, kkk, vvv)
|
||||
uci:set_list(c_config, cfgid, kkk, vvv)
|
||||
else
|
||||
if kkk ~= "group" or vvv ~= "default" then
|
||||
uci:set(appname, cfgid, kkk, vvv)
|
||||
uci:set(c_config, cfgid, kkk, vvv)
|
||||
end
|
||||
-- sing-box/xray 节点域名解析
|
||||
if kkk == "type" and (vvv == "Xray" or vvv == "sing-box") then
|
||||
if domain_resolver then
|
||||
uci:set(appname, cfgid, "domain_resolver", domain_resolver)
|
||||
uci:set(c_config, cfgid, "domain_resolver", domain_resolver)
|
||||
if domain_resolver_dns then
|
||||
uci:set(appname, cfgid, "domain_resolver_dns", domain_resolver_dns)
|
||||
uci:set(c_config, cfgid, "domain_resolver_dns", domain_resolver_dns)
|
||||
elseif domain_resolver_dns_https then
|
||||
uci:set(appname, cfgid, "domain_resolver_dns_https", domain_resolver_dns_https)
|
||||
uci:set(c_config, cfgid, "domain_resolver_dns_https", domain_resolver_dns_https)
|
||||
end
|
||||
end
|
||||
if domain_strategy then
|
||||
@@ -1968,20 +1969,20 @@ local function update_node(manual)
|
||||
local map = { UseIPv4v6 = "prefer_ipv4", UseIPv6v4 = "prefer_ipv6", UseIPv4 = "ipv4_only", UseIPv6 = "ipv6_only" }
|
||||
ds = map[ds] or ""
|
||||
end
|
||||
uci:set(appname, cfgid, "domain_strategy", ds)
|
||||
uci:set(c_config, cfgid, "domain_strategy", ds)
|
||||
end
|
||||
end
|
||||
-- 订阅组链式代理
|
||||
if chain_node_type ~= "" and kkk == "type" and (vvv == "Xray" or vvv == "sing-box") then
|
||||
if preproxy_node_group ~="" then
|
||||
uci:set(appname, cfgid, "chain_proxy", "1")
|
||||
uci:set(appname, cfgid, "preproxy_node", preproxy_node_group)
|
||||
uci:set(c_config, cfgid, "chain_proxy", "1")
|
||||
uci:set(c_config, cfgid, "preproxy_node", preproxy_node_group)
|
||||
elseif to_node_group ~= "" then
|
||||
uci:set(appname, cfgid, "chain_proxy", "2")
|
||||
uci:set(appname, cfgid, "to_node", to_node_group)
|
||||
uci:set(c_config, cfgid, "chain_proxy", "2")
|
||||
uci:set(c_config, cfgid, "to_node", to_node_group)
|
||||
elseif outbound_iface_group ~= "" then
|
||||
uci:set(appname, cfgid, "chain_proxy", "3")
|
||||
uci:set(appname, cfgid, "outbound_iface", outbound_iface_group)
|
||||
uci:set(c_config, cfgid, "chain_proxy", "3")
|
||||
uci:set(c_config, cfgid, "outbound_iface", outbound_iface_group)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1992,16 +1993,16 @@ local function update_node(manual)
|
||||
for cfgid, info in pairs(subscribe_info) do
|
||||
for key, value in pairs(info) do
|
||||
if value ~= "" then
|
||||
uci:set(appname, cfgid, key, value)
|
||||
uci:set(c_config, cfgid, key, value)
|
||||
else
|
||||
uci:delete(appname, cfgid, key)
|
||||
uci:delete(c_config, cfgid, key)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if next(CONFIG) then
|
||||
local nodes = {}
|
||||
uci:foreach(appname, "nodes", function(node)
|
||||
uci:foreach(c_config, "nodes", function(node)
|
||||
nodes[#nodes + 1] = node
|
||||
end)
|
||||
|
||||
@@ -2020,11 +2021,11 @@ local function update_node(manual)
|
||||
end
|
||||
end
|
||||
|
||||
api.uci_save(uci, appname, true)
|
||||
api.uci_save(uci, c_config, true)
|
||||
|
||||
if arg[3] == "cron" then
|
||||
if not fs.access("/var/lock/" .. appname .. ".lock") then
|
||||
luci.sys.call("touch /tmp/lock/" .. appname .. "_cron.lock")
|
||||
if not fs.access("/var/lock/" .. c_config .. ".lock") then
|
||||
luci.sys.call("touch /tmp/lock/" .. c_config .. "_cron.lock")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -2133,10 +2134,10 @@ local execute = function()
|
||||
local fail_list = {}
|
||||
if arg[2] ~= "all" then
|
||||
string.gsub(arg[2], '[^' .. "," .. ']+', function(w)
|
||||
subscribe_list[#subscribe_list + 1] = uci:get_all(appname, w) or {}
|
||||
subscribe_list[#subscribe_list + 1] = uci:get_all(c_config, w) or {}
|
||||
end)
|
||||
else
|
||||
uci:foreach(appname, "subscribe_list", function(o)
|
||||
uci:foreach(c_config, "subscribe_list", function(o)
|
||||
subscribe_list[#subscribe_list + 1] = o
|
||||
end)
|
||||
end
|
||||
@@ -2182,7 +2183,7 @@ local execute = function()
|
||||
raw_data = parseClashNode(raw_data)
|
||||
subscribe_info[cfgid] = parse_clash_sub_info(headers)
|
||||
parse_link(raw_data, "2", remark, value)
|
||||
uci:set(appname, cfgid, "md5", new_md5)
|
||||
uci:set(c_config, cfgid, "md5", new_md5)
|
||||
end
|
||||
else
|
||||
fail_list[#fail_list + 1] = value
|
||||
@@ -2216,7 +2217,7 @@ local function check_instance(action)
|
||||
os.exit(0)
|
||||
else
|
||||
luci.sys.call("touch " .. sub_lock)
|
||||
uci:revert(appname)
|
||||
uci:revert(c_config)
|
||||
end
|
||||
elseif action == "end" then
|
||||
luci.sys.call("rm -f " .. sub_lock)
|
||||
|
||||
Reference in new issue
Block a user