105 lines
4.0 KiB
Lua
105 lines
4.0 KiB
Lua
module("luci.passwall2.util_hysteria", package.seeall)
|
|
local api = require "luci.passwall2.api"
|
|
local uci = api.uci
|
|
local jsonc = api.jsonc
|
|
|
|
function gen_config_server(node)
|
|
local config = {
|
|
listen = ":" .. node.port,
|
|
protocol = node.protocol or "udp",
|
|
obfs = node.hysteria_obfs,
|
|
cert = node.tls_certificateFile,
|
|
key = node.tls_keyFile,
|
|
auth = (node.hysteria_auth_type == "string") and {
|
|
mode = "password",
|
|
config = {
|
|
password = node.hysteria_auth_password
|
|
}
|
|
} or nil,
|
|
disable_udp = (node.hysteria_udp == "0") and true or false,
|
|
alpn = node.hysteria_alpn or nil,
|
|
up_mbps = tonumber(node.hysteria_up_mbps) or 10,
|
|
down_mbps = tonumber(node.hysteria_down_mbps) or 50,
|
|
recv_window_conn = (node.hysteria_recv_window_conn) and tonumber(node.hysteria_recv_window_conn) or nil,
|
|
recv_window = (node.hysteria_recv_window) and tonumber(node.hysteria_recv_window) or nil,
|
|
disable_mtu_discovery = (node.hysteria_disable_mtu_discovery) and true or false
|
|
}
|
|
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 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"]
|
|
local server_host = var["-server_host"] or node.address
|
|
local server_port = var["-server_port"] or node.port
|
|
|
|
if api.is_ipv6(server_host) then
|
|
server_host = api.get_ipv6_full(server_host)
|
|
end
|
|
local server = server_host .. ":" .. server_port
|
|
|
|
if (node.hysteria_hop) then
|
|
server = server .. "," .. node.hysteria_hop
|
|
end
|
|
|
|
local config = {
|
|
server = server,
|
|
protocol = node.protocol or "udp",
|
|
obfs = node.hysteria_obfs,
|
|
auth = (node.hysteria_auth_type == "base64") and node.hysteria_auth_password or nil,
|
|
auth_str = (node.hysteria_auth_type == "string") and node.hysteria_auth_password or nil,
|
|
alpn = node.hysteria_alpn or nil,
|
|
server_name = node.tls_serverName,
|
|
insecure = (node.tls_allowInsecure == "1") and true or false,
|
|
up_mbps = tonumber(node.hysteria_up_mbps) or 10,
|
|
down_mbps = tonumber(node.hysteria_down_mbps) or 50,
|
|
retry = -1,
|
|
retry_interval = 5,
|
|
recv_window_conn = (node.hysteria_recv_window_conn) and tonumber(node.hysteria_recv_window_conn) or nil,
|
|
recv_window = (node.hysteria_recv_window) and tonumber(node.hysteria_recv_window) or nil,
|
|
handshake_timeout = (node.hysteria_handshake_timeout) and tonumber(node.hysteria_handshake_timeout) or nil,
|
|
idle_timeout = (node.hysteria_idle_timeout) and tonumber(node.hysteria_idle_timeout) or nil,
|
|
hop_interval = (node.hysteria_hop_interval) and tonumber(node.hysteria_hop_interval) or nil,
|
|
disable_mtu_discovery = (node.hysteria_disable_mtu_discovery) and true or false,
|
|
fast_open = (node.fast_open == "1") and true or false,
|
|
lazy_start = (node.hysteria_lazy_start) and true or false,
|
|
socks5 = (local_socks_address and local_socks_port) and {
|
|
listen = local_socks_address .. ":" .. local_socks_port,
|
|
timeout = 300,
|
|
disable_udp = false,
|
|
user = (local_socks_username and local_socks_password) and local_socks_username,
|
|
password = (local_socks_username and local_socks_password) and local_socks_password,
|
|
} or nil,
|
|
http = (local_http_address and local_http_port) and {
|
|
listen = local_http_address .. ":" .. local_http_port,
|
|
timeout = 300,
|
|
disable_udp = false,
|
|
user = (local_http_username and local_http_password) and local_http_username,
|
|
password = (local_http_username and local_http_password) and local_http_password,
|
|
} or nil
|
|
}
|
|
|
|
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
|