124 lines
3.5 KiB
Lua
124 lines
3.5 KiB
Lua
module("luci.passwall2.util_shadowsocks", package.seeall)
|
|
local api = require "luci.passwall2.api"
|
|
local uci = api.uci
|
|
local jsonc = api.jsonc
|
|
|
|
function gen_config_server(node)
|
|
local config = {}
|
|
config.server_port = tonumber(node.port)
|
|
config.password = node.password
|
|
config.timeout = tonumber(node.timeout)
|
|
config.fast_open = (node.tcp_fast_open and node.tcp_fast_open == "1") and true or false
|
|
config.method = node.method
|
|
|
|
if node.type == "SS-Rust" then
|
|
config.server = "::"
|
|
config.mode = "tcp_and_udp"
|
|
else
|
|
config.server = {"[::0]", "0.0.0.0"}
|
|
end
|
|
|
|
if node.type == "SSR" then
|
|
config.protocol = node.protocol
|
|
config.protocol_param = node.protocol_param
|
|
config.obfs = node.obfs
|
|
config.obfs_param = node.obfs_param
|
|
end
|
|
|
|
return config
|
|
end
|
|
|
|
|
|
function gen_config(var)
|
|
local node_id = var["-node"]
|
|
if not node_id then
|
|
print("-node 不能为空")
|
|
return
|
|
end
|
|
local node = uci:get_all("passwall2", node_id)
|
|
local server_host = var["-server_host"] or node.address
|
|
local server_port = var["-server_port"] or node.port
|
|
local local_addr = var["-local_addr"]
|
|
local local_port = var["-local_port"]
|
|
local mode = var["-mode"]
|
|
local local_socks_address = var["-local_socks_address"] or "0.0.0.0"
|
|
local local_socks_port = var["-local_socks_port"]
|
|
local local_socks_username = var["-local_socks_username"]
|
|
local local_socks_password = var["-local_socks_password"]
|
|
local local_http_address = var["-local_http_address"] or "0.0.0.0"
|
|
local local_http_port = var["-local_http_port"]
|
|
local local_http_username = var["-local_http_username"]
|
|
local local_http_password = var["-local_http_password"]
|
|
|
|
if api.is_ipv6(server_host) then
|
|
server_host = api.get_ipv6_only(server_host)
|
|
end
|
|
local server = server_host
|
|
|
|
local config = {
|
|
server = server,
|
|
server_port = tonumber(server_port),
|
|
local_address = local_addr,
|
|
local_port = tonumber(local_port),
|
|
password = node.password,
|
|
method = node.method,
|
|
timeout = tonumber(node.timeout),
|
|
fast_open = (node.tcp_fast_open and node.tcp_fast_open == "true") and true or false,
|
|
reuse_port = true
|
|
}
|
|
|
|
if node.type == "SS" then
|
|
if node.plugin and node.plugin ~= "none" then
|
|
config.plugin = node.plugin
|
|
config.plugin_opts = node.plugin_opts or nil
|
|
end
|
|
config.mode = mode
|
|
elseif node.type == "SSR" then
|
|
config.protocol = node.protocol
|
|
config.protocol_param = node.protocol_param
|
|
config.obfs = node.obfs
|
|
config.obfs_param = node.obfs_param
|
|
elseif node.type == "SS-Rust" then
|
|
config = {
|
|
servers = {
|
|
{
|
|
address = server,
|
|
port = tonumber(server_port),
|
|
method = node.method,
|
|
password = node.password,
|
|
timeout = tonumber(node.timeout),
|
|
plugin = (node.plugin and node.plugin ~= "none") and node.plugin or nil,
|
|
plugin_opts = (node.plugin and node.plugin ~= "none") and node.plugin_opts or nil
|
|
}
|
|
},
|
|
locals = {},
|
|
fast_open = (node.tcp_fast_open and node.tcp_fast_open == "true") and true or false
|
|
}
|
|
if local_socks_address and local_socks_port then
|
|
table.insert(config.locals, {
|
|
local_address = local_socks_address,
|
|
local_port = tonumber(local_socks_port),
|
|
mode = "tcp_and_udp"
|
|
})
|
|
end
|
|
if local_http_address and local_http_port then
|
|
table.insert(config.locals, {
|
|
protocol = "http",
|
|
local_address = local_http_address,
|
|
local_port = tonumber(local_http_port)
|
|
})
|
|
end
|
|
end
|
|
|
|
return jsonc.stringify(config, 1)
|
|
end
|
|
|
|
_G.gen_config = gen_config
|
|
|
|
if arg[1] then
|
|
local func =_G[arg[1]]
|
|
if func then
|
|
print(func(api.get_function_args(arg)))
|
|
end
|
|
end
|