From a047c49bfebbf164ccbefdf3f124d2fddea34852 Mon Sep 17 00:00:00 2001 From: xiaorouji <60100640+xiaorouji@users.noreply.github.com> Date: Wed, 6 Sep 2023 19:57:23 +0800 Subject: [PATCH] luci: remove v2ray Due to the incompatibility of the data structure, remove it. --- luci-app-passwall/Makefile | 6 - .../model/cbi/passwall/client/acl_config.lua | 3 +- .../model/cbi/passwall/client/global.lua | 18 +- .../model/cbi/passwall/client/node_list.lua | 2 +- .../cbi/passwall/client/node_subscribe.lua | 5 - .../passwall/client/node_subscribe_config.lua | 5 - .../model/cbi/passwall/client/other.lua | 5 +- .../luasrc/model/cbi/passwall/client/rule.lua | 5 +- .../model/cbi/passwall/client/shunt_rules.lua | 2 +- .../cbi/passwall/client/socks_config.lua | 3 +- .../model/cbi/passwall/client/type/ray.lua | 372 ++++++------------ .../model/cbi/passwall/server/index.lua | 2 +- .../model/cbi/passwall/server/type/ray.lua | 287 ++++---------- luci-app-passwall/luasrc/passwall/api.lua | 4 +- luci-app-passwall/luasrc/passwall/com.lua | 19 +- .../luasrc/passwall/server_app.lua | 3 - .../luasrc/passwall/util_xray.lua | 10 +- .../passwall/node_list/link_share_man.htm | 15 +- .../root/usr/share/passwall/0_default_config | 1 - .../root/usr/share/passwall/app.sh | 115 +++--- .../root/usr/share/passwall/rule_update.lua | 14 +- .../root/usr/share/passwall/subscribe.lua | 15 - 22 files changed, 287 insertions(+), 624 deletions(-) diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile index f10312f22..48cba4985 100644 --- a/luci-app-passwall/Makefile +++ b/luci-app-passwall/Makefile @@ -27,7 +27,6 @@ PKG_CONFIG_DEPENDS:= \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_GO \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_Plus \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_tuic_client \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_V2ray \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Geodata \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Plugin \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Xray \ @@ -55,7 +54,6 @@ LUCI_DEPENDS:=+coreutils +coreutils-base64 +coreutils-nohup +curl \ +PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_GO:trojan-go \ +PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_Plus:trojan-plus \ +PACKAGE_$(PKG_NAME)_INCLUDE_tuic_client:tuic-client \ - +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray:v2ray-core \ +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Geodata:v2ray-geoip \ +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Geodata:v2ray-geosite \ +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Plugin:v2ray-plugin \ @@ -155,10 +153,6 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_tuic_client depends on aarch64||arm||i386||x86_64 default n -config PACKAGE_$(PKG_NAME)_INCLUDE_V2ray - bool "Include V2ray" - default y if aarch64||arm||i386||x86_64 - config PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Geodata bool "Include V2ray_Geodata" default n diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua index 2fd24d0fd..1a0f65156 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua @@ -1,7 +1,6 @@ local api = require "luci.passwall.api" local appname = api.appname local sys = api.sys -local has_v2ray = api.finded_com("v2ray") local has_xray = api.finded_com("xray") local has_chnlist = api.fs.access("/usr/share/passwall/rules/chnlist") @@ -254,7 +253,7 @@ o:value("208.67.222.222", "208.67.222.222 (OpenDNS)") o:depends("dns_mode", "dns2socks") o:depends("v2ray_dns_mode", "tcp") -if has_v2ray or has_xray then +if has_xray then o = s:option(Value, "remote_dns_doh", translate("Remote DNS DoH")) o:value("https://1.1.1.1/dns-query", "CloudFlare") o:value("https://1.1.1.2/dns-query", "CloudFlare-Security") diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua index b0fdcb792..c8aac72de 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua @@ -3,7 +3,6 @@ local appname = api.appname local uci = api.uci local datatypes = api.datatypes local has_singbox = api.finded_com("singbox") -local has_v2ray = api.finded_com("v2ray") local has_xray = api.finded_com("xray") local has_chnlist = api.fs.access("/usr/share/passwall/rules/chnlist") @@ -95,7 +94,7 @@ udp_node:value("nil", translate("Close")) udp_node:value("tcp", translate("Same as the tcp node")) -- 分流 -if (has_singbox or has_v2ray or has_xray) and #nodes_table > 0 then +if (has_singbox or has_xray) and #nodes_table > 0 then local normal_list = {} local balancing_list = {} local shunt_list = {} @@ -128,14 +127,11 @@ if (has_singbox or has_v2ray or has_xray) and #nodes_table > 0 then if #normal_list > 0 then for k, v in pairs(shunt_list) do local vid = v.id - -- shunt node type, Sing-Box or V2ray or Xray + -- shunt node type, Sing-Box or Xray local type = s:taboption("Main", ListValue, vid .. "-type", translate("Type")) if has_singbox then type:value("sing-box", "Sing-Box") end - if has_v2ray then - type:value("V2ray", translate("V2ray")) - end if has_xray then type:value("Xray", translate("Xray")) end @@ -163,7 +159,7 @@ if (has_singbox or has_v2ray or has_xray) and #nodes_table > 0 then o.cfgvalue = get_cfgvalue(v.id, "main_node") o.write = get_write(v.id, "main_node") - if (has_singbox and has_v2ray and has_xray) or (v.type == "sing-box" and not has_singbox) or (v.type == "V2ray" and not has_v2ray) or (v.type == "Xray" and not has_xray) then + if (has_singbox and has_xray) or (v.type == "sing-box" and not has_singbox) or (v.type == "Xray" and not has_xray) then type:depends("tcp_node", v.id) else type:depends("tcp_node", "hide") --不存在的依赖,即始终隐藏 @@ -251,7 +247,7 @@ tcp_node_socks_port.default = 1070 tcp_node_socks_port.datatype = "port" tcp_node_socks_port:depends({ tcp_node = "nil", ["!reverse"] = true }) --[[ -if has_singbox or has_v2ray or has_xray then +if has_singbox or has_xray then tcp_node_http_port = s:taboption("Main", Value, "tcp_node_http_port", translate("TCP Node") .. " HTTP " .. translate("Listen Port") .. " " .. translate("0 is not use")) tcp_node_http_port.default = 0 tcp_node_http_port.datatype = "port" @@ -452,7 +448,7 @@ o.rmempty = false o = s:taboption("log", Flag, "close_log_udp", translatef("%s Node Log Close", "UDP")) o.rmempty = false -loglevel = s:taboption("log", ListValue, "loglevel", "Sing-Box/V2ray/Xray " .. translate("Log Level")) +loglevel = s:taboption("log", ListValue, "loglevel", "Sing-Box/Xray " .. translate("Log Level")) loglevel.default = "warning" loglevel:value("debug") loglevel:value("info") @@ -524,7 +520,7 @@ o.default = n + 1080 o.datatype = "port" o.rmempty = false -if has_singbox or has_v2ray or has_xray then +if has_singbox or has_xray then o = s:option(Value, "http_port", "HTTP " .. translate("Listen Port") .. " " .. translate("0 is not use")) o.default = 0 o.datatype = "port" @@ -534,7 +530,7 @@ for k, v in pairs(nodes_table) do tcp_node:value(v.id, v["remark"]) udp_node:value(v.id, v["remark"]) if v.type == "Socks" then - if has_singbox or has_v2ray or has_xray then + if has_singbox or has_xray then socks_node:value(v.id, v["remark"]) end else diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua index 400d7df6e..be71197e4 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua @@ -94,7 +94,7 @@ o.cfgvalue = function(t, n) local remarks = m:get(n, "remarks") or "" local type = m:get(n, "type") or "" str = str .. string.format("", appname, n, type) - if type == "sing-box" or type == "V2ray" or type == "Xray" then + if type == "sing-box" or type == "Xray" then local protocol = m:get(n, "protocol") if protocol == "_balancing" then protocol = translate("Balancing") diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe.lua index 39f35cc70..0838d86b9 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe.lua @@ -4,7 +4,6 @@ local has_ss = api.is_finded("ss-redir") local has_ss_rust = api.is_finded("sslocal") local has_trojan_plus = api.is_finded("trojan-plus") local has_singbox = api.finded_com("singbox") -local has_v2ray = api.finded_com("v2ray") local has_xray = api.finded_com("xray") local has_trojan_go = api.finded_com("trojan-go") local ss_aead_type = {} @@ -22,10 +21,6 @@ if has_singbox then trojan_type[#trojan_type + 1] = "sing-box" ss_aead_type[#ss_aead_type + 1] = "sing-box" end -if has_v2ray then - trojan_type[#trojan_type + 1] = "v2ray" - ss_aead_type[#ss_aead_type + 1] = "v2ray" -end if has_xray then trojan_type[#trojan_type + 1] = "xray" ss_aead_type[#ss_aead_type + 1] = "xray" diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua index a2e31b509..62fd2ee8f 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua @@ -5,7 +5,6 @@ local has_ss = api.is_finded("ss-redir") local has_ss_rust = api.is_finded("sslocal") local has_trojan_plus = api.is_finded("trojan-plus") local has_singbox = api.finded_com("singbox") -local has_v2ray = api.finded_com("v2ray") local has_xray = api.finded_com("xray") local has_trojan_go = api.finded_com("trojan-go") local ss_aead_type = {} @@ -23,10 +22,6 @@ if has_singbox then trojan_type[#trojan_type + 1] = "sing-box" ss_aead_type[#ss_aead_type + 1] = "sing-box" end -if has_v2ray then - trojan_type[#trojan_type + 1] = "v2ray" - ss_aead_type[#ss_aead_type + 1] = "v2ray" -end if has_xray then trojan_type[#trojan_type + 1] = "xray" ss_aead_type[#ss_aead_type + 1] = "xray" diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/other.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/other.lua index bb92447d7..1e1709c2a 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/other.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/other.lua @@ -2,7 +2,6 @@ local api = require "luci.passwall.api" local appname = api.appname local fs = api.fs local has_singbox = api.finded_com("singbox") -local has_v2ray = api.finded_com("v2ray") local has_xray = api.finded_com("xray") local has_fw3 = api.is_finded("fw3") local has_fw4 = api.is_finded("fw4") @@ -141,8 +140,8 @@ o = s:option(Flag, "accept_icmpv6", translate("Hijacking ICMPv6 (IPv6 PING)")) o:depends("ipv6_tproxy", true) o.default = 0 -if has_v2ray or has_xray then - s = m:section(TypedSection, "global_xray", "V2Ray/Xray " .. translate("Settings")) +if has_xray then + s = m:section(TypedSection, "global_xray", "Xray " .. translate("Settings")) s.anonymous = true s.addremove = false diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua index 78ecd2455..f15133574 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua @@ -1,6 +1,5 @@ local api = require "luci.passwall.api" local appname = api.appname -local has_v2ray = api.finded_com("v2ray") local has_xray = api.finded_com("xray") m = Map(appname) @@ -61,12 +60,12 @@ for e = 0, 23 do o:value(e, e .. translate("oclock")) end o.default = 0 o:depends("auto_update", true) -if has_v2ray or has_xray then +if has_xray then o = s:option(Value, "v2ray_location_asset", translate("Location of V2ray/Xray asset"), translate("This variable specifies a directory where geoip.dat and geosite.dat files are.")) o.default = "/usr/share/v2ray/" o.rmempty = false - s = m:section(TypedSection, "shunt_rules", "V2ray/Xray " .. translate("Shunt Rule"), "" .. translate("Please note attention to the priority, the higher the order, the higher the priority.") .. "") + s = m:section(TypedSection, "shunt_rules", "Xray " .. translate("Shunt Rule"), "" .. translate("Please note attention to the priority, the higher the order, the higher the priority.") .. "") s.template = "cbi/tblsection" s.anonymous = false s.addremove = true 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 1e457b8e0..2e84e907b 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 @@ -2,7 +2,7 @@ local api = require "luci.passwall.api" local appname = api.appname local datatypes = api.datatypes -m = Map(appname, "V2ray/Xray " .. translate("Shunt Rule")) +m = Map(appname, "Xray " .. translate("Shunt Rule")) m.redirect = api.url() s = m:section(NamedSection, arg[1], "shunt_rules", "") diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/socks_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/socks_config.lua index 3f3960f0d..784b4e11c 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/socks_config.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/socks_config.lua @@ -1,7 +1,6 @@ local api = require "luci.passwall.api" local appname = api.appname local uci = api.uci -local has_v2ray = api.finded_com("v2ray") local has_xray = api.finded_com("xray") m = Map(appname) @@ -54,7 +53,7 @@ o.default = n + 1080 o.datatype = "port" o.rmempty = false -if has_v2ray or has_xray then +if has_xray then o = s:option(Value, "http_port", "HTTP " .. translate("Listen Port") .. " " .. translate("0 is not use")) o.default = 0 o.datatype = "port" diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua index 21e44c90e..6c268447f 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua @@ -2,13 +2,15 @@ local m, s = ... local api = require "luci.passwall.api" -if not api.finded_com("xray") and not api.finded_com("v2ray") then +if not api.finded_com("xray") then return end local appname = api.appname local uci = api.uci +local type_name = "Xray" + local option_prefix = "xray_" local function option_name(name) @@ -21,52 +23,20 @@ local function rm_prefix_cfgvalue(self, section) end end local function rm_prefix_write(self, section, value) - if s.fields["type"]:formvalue(arg[1]) == "Xray" or s.fields["type"]:formvalue(arg[1]) == "V2ray" then + if s.fields["type"]:formvalue(arg[1]) == type_name then if self.option:find(option_prefix) == 1 then m:set(section, self.option:sub(1 + #option_prefix), value) end end end local function rm_prefix_remove(self, section, value) - if s.fields["type"]:formvalue(arg[1]) == "Xray" or s.fields["type"]:formvalue(arg[1]) == "V2ray" then + if s.fields["type"]:formvalue(arg[1]) == type_name then if self.option:find(option_prefix) == 1 then m:del(section, self.option:sub(1 + #option_prefix)) end end end -local function add_xray_depends(o, field, value) - local deps = { type = "Xray" } - if field then - if type(field) == "string" then - deps[field] = value - else - for key, value in pairs(field) do - deps[key] = value - end - end - end - o:depends(deps) -end - -local function add_v2ray_depends(o, field, value) - local deps = { type = "V2ray" } - if field then - if type(field) == "string" then - deps[field] = value - else - for key, value in pairs(field) do - deps[key] = value - end - end - end - o:depends(deps) -end - -local v_ss_encrypt_method_list = { - "aes-128-gcm", "aes-256-gcm", "chacha20-poly1305" -} - local x_ss_encrypt_method_list = { "aes-128-gcm", "aes-256-gcm", "chacha20-poly1305", "xchacha20-poly1305", "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305" } @@ -79,12 +49,7 @@ local header_type_list = { -- [[ Xray ]] -if api.finded_com("xray") then - s.fields["type"]:value("Xray", translate("Xray")) -end -if api.finded_com("v2ray") then - s.fields["type"]:value("V2ray", translate("V2ray")) -end +s.fields["type"]:value(type_name, "Xray") o = s:option(ListValue, option_name("protocol"), translate("Protocol")) o:value("vmess", translate("Vmess")) @@ -97,12 +62,10 @@ o:value("wireguard", translate("WireGuard")) o:value("_balancing", translate("Balancing")) o:value("_shunt", translate("Shunt")) o:value("_iface", translate("Custom Interface") .. " (Only Support Xray)") -add_xray_depends(o) -add_v2ray_depends(o) o = s:option(Value, option_name("iface"), translate("Interface")) o.default = "eth1" -add_xray_depends(o, { [option_name("protocol")] = "_iface" }) +o:depends({ [option_name("protocol")] = "_iface" }) local nodes_table = {} local balancers_table = {} @@ -130,44 +93,37 @@ end -- 负载均衡列表 local o = s:option(DynamicList, option_name("balancing_node"), translate("Load balancing node list"), translate("Load balancing node list, document")) -add_xray_depends(o, { [option_name("protocol")] = "_balancing" }) -add_v2ray_depends(o, { [option_name("protocol")] = "_balancing" }) +o:depends({ [option_name("protocol")] = "_balancing" }) for k, v in pairs(nodes_table) do o:value(v.id, v.remarks) end local o = s:option(ListValue, option_name("balancingStrategy"), translate("Balancing Strategy")) -add_xray_depends(o, { [option_name("protocol")] = "_balancing" }) -add_v2ray_depends(o, { [option_name("protocol")] = "_balancing" }) +o:depends({ [option_name("protocol")] = "_balancing" }) o:value("random") o:value("leastPing") o.default = "random" -- 探测地址 local o = s:option(Flag, option_name("useCustomProbeUrl"), translate("Use Custome Probe URL"), translate("By default the built-in probe URL will be used, enable this option to use a custom probe URL.")) -add_xray_depends(o, { [option_name("balancingStrategy")] = "leastPing" }) -add_v2ray_depends(o, { [option_name("balancingStrategy")] = "leastPing" }) +o:depends({ [option_name("balancingStrategy")] = "leastPing" }) local o = s:option(Value, option_name("probeUrl"), translate("Probe URL")) -add_xray_depends(o, { [option_name("useCustomProbeUrl")] = true }) -add_v2ray_depends(o, { [option_name("useCustomProbeUrl")] = true }) +o:depends({ [option_name("useCustomProbeUrl")] = true }) o.default = "https://www.google.com/generate_204" o.description = translate("The URL used to detect the connection status.") -- 探测间隔 local o = s:option(Value, option_name("probeInterval"), translate("Probe Interval")) -add_xray_depends(o, { [option_name("balancingStrategy")] = "leastPing" }) -add_v2ray_depends(o, { [option_name("balancingStrategy")] = "leastPing" }) +o:depends({ [option_name("balancingStrategy")] = "leastPing" }) o.default = "1m" o.description = translate("The interval between initiating probes. Every time this time elapses, a server status check is performed on a server. The time format is numbers + units, such as '10s', '2h45m', and the supported time units are ns, us, ms, s, m, h, which correspond to nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively.") -- [[ 分流模块 ]] if #nodes_table > 0 then o = s:option(Flag, option_name("preproxy_enabled"), translate("Preproxy")) - add_xray_depends(o, { [option_name("protocol")] = "_shunt" }) - add_v2ray_depends(o, { [option_name("protocol")] = "_shunt" }) + o:depends({ [option_name("protocol")] = "_shunt" }) o = s:option(Value, option_name("main_node"), string.format('%s', translate("Preproxy Node")), translate("Set the node to be used as a pre-proxy. Each rule (including Default) has a separate switch that controls whether this rule uses the pre-proxy or not.")) - add_xray_depends(o, { [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true }) - add_v2ray_depends(o, { [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true }) + o:depends({ [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true }) for k, v in pairs(balancers_table) do o:value(v.id, v.remarks) end @@ -186,8 +142,7 @@ uci:foreach(appname, "shunt_rules", function(e) o:value("_default", translate("Default")) o:value("_direct", translate("Direct Connection")) o:value("_blackhole", translate("Blackhole")) - add_xray_depends(o, { [option_name("protocol")] = "_shunt" }) - add_v2ray_depends(o, { [option_name("protocol")] = "_shunt" }) + o:depends({ [option_name("protocol")] = "_shunt" }) if #nodes_table > 0 then for k, v in pairs(balancers_table) do @@ -203,7 +158,6 @@ uci:foreach(appname, "shunt_rules", function(e) for k, v in pairs(nodes_table) do o:value(v.id, v.remarks) pt:depends({ [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true, [option_name(e[".name"])] = v.id }) - add_v2ray_depends(o, { [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true, [option_name(e[".name"])] = v.id }) end end end @@ -215,12 +169,10 @@ o.rawhtml = true o.cfgvalue = function(t, n) return string.format('%s', translate("No shunt rules? Click me to go to add.")) end -add_xray_depends(o, { [option_name("protocol")] = "_shunt" }) -add_v2ray_depends(o, { [option_name("protocol")] = "_shunt" }) +o:depends({ [option_name("protocol")] = "_shunt" }) local o = s:option(Value, option_name("default_node"), string.format('* %s', translate("Default"))) -add_xray_depends(o, { [option_name("protocol")] = "_shunt" }) -add_v2ray_depends(o, { [option_name("protocol")] = "_shunt" }) +o:depends({ [option_name("protocol")] = "_shunt" }) o:value("_direct", translate("Direct Connection")) o:value("_blackhole", translate("Blackhole")) @@ -250,14 +202,12 @@ o.description = "
" -add_xray_depends(o, { [option_name("protocol")] = "_shunt" }) -add_v2ray_depends(o, { [option_name("protocol")] = "_shunt" }) +o:depends({ [option_name("protocol")] = "_shunt" }) o = s:option(ListValue, option_name("domainMatcher"), translate("Domain matcher")) o:value("hybrid") o:value("linear") -add_xray_depends(o, { [option_name("protocol")] = "_shunt" }) -add_v2ray_depends(o, { [option_name("protocol")] = "_shunt" }) +o:depends({ [option_name("protocol")] = "_shunt" }) -- [[ 分流模块 End ]] @@ -270,111 +220,80 @@ local protocols = s.fields[option_name("protocol")].keylist if #protocols > 0 then for index, value in ipairs(protocols) do if not value:find("_") then - add_xray_depends(s.fields[option_name("address")], { [option_name("protocol")] = value }) - add_v2ray_depends(s.fields[option_name("address")], { [option_name("protocol")] = value }) - add_xray_depends(s.fields[option_name("port")], { [option_name("protocol")] = value }) - add_v2ray_depends(s.fields[option_name("port")], { [option_name("protocol")] = value }) + s.fields[option_name("address")]:depends({ [option_name("protocol")] = value }) + s.fields[option_name("port")]:depends({ [option_name("protocol")] = value }) end end end o = s:option(Value, option_name("username"), translate("Username")) -add_xray_depends(o, { [option_name("protocol")] = "http" }) -add_xray_depends(o, { [option_name("protocol")] = "socks" }) -add_v2ray_depends(o, { [option_name("protocol")] = "http" }) -add_v2ray_depends(o, { [option_name("protocol")] = "socks" }) +o:depends({ [option_name("protocol")] = "http" }) +o:depends({ [option_name("protocol")] = "socks" }) o = s:option(Value, option_name("password"), translate("Password")) o.password = true -add_xray_depends(o, { [option_name("protocol")] = "http" }) -add_xray_depends(o, { [option_name("protocol")] = "socks" }) -add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" }) -add_xray_depends(o, { [option_name("protocol")] = "trojan" }) -add_v2ray_depends(o, { [option_name("protocol")] = "http" }) -add_v2ray_depends(o, { [option_name("protocol")] = "socks" }) -add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" }) -add_v2ray_depends(o, { [option_name("protocol")] = "trojan" }) +o:depends({ [option_name("protocol")] = "http" }) +o:depends({ [option_name("protocol")] = "socks" }) +o:depends({ [option_name("protocol")] = "shadowsocks" }) +o:depends({ [option_name("protocol")] = "trojan" }) o = s:option(ListValue, option_name("security"), translate("Encrypt Method")) for a, t in ipairs(security_list) do o:value(t) end -add_xray_depends(o, { [option_name("protocol")] = "vmess" }) -add_v2ray_depends(o, { [option_name("protocol")] = "vmess" }) +o:depends({ [option_name("protocol")] = "vmess" }) o = s:option(Value, option_name("encryption"), translate("Encrypt Method")) o.default = "none" o:value("none") -add_xray_depends(o, { [option_name("protocol")] = "vless" }) -add_v2ray_depends(o, { [option_name("protocol")] = "vless" }) - -o = s:option(ListValue, "v_ss_encrypt_method", translate("Encrypt Method")) -o.not_rewrite = true -for a, t in ipairs(v_ss_encrypt_method_list) do o:value(t) end -add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" }) -function o.cfgvalue(self, section) - return m:get(section, "method") -end -function o.write(self, section, value) - if s.fields["type"]:formvalue(arg[1]) == "Xray" or s.fields["type"]:formvalue(arg[1]) == "V2ray" then - m:set(section, "method", value) - end -end +o:depends({ [option_name("protocol")] = "vless" }) o = s:option(ListValue, option_name("x_ss_encrypt_method"), translate("Encrypt Method")) o.not_rewrite = true for a, t in ipairs(x_ss_encrypt_method_list) do o:value(t) end -add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" }) +o:depends({ [option_name("protocol")] = "shadowsocks" }) function o.cfgvalue(self, section) return m:get(section, "method") end function o.write(self, section, value) - if s.fields["type"]:formvalue(arg[1]) == "Xray" or s.fields["type"]:formvalue(arg[1]) == "V2ray" then + if s.fields["type"]:formvalue(arg[1]) == type_name then m:set(section, "method", value) end end o = s:option(Flag, option_name("iv_check"), translate("IV Check")) -add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" }) -add_xray_depends(o, { [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "aes-128-gcm" }) -add_xray_depends(o, { [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "aes-256-gcm" }) -add_xray_depends(o, { [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "chacha20-poly1305" }) -add_xray_depends(o, { [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "xchacha20-poly1305" }) +o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "aes-128-gcm" }) +o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "aes-256-gcm" }) +o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "chacha20-poly1305" }) +o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "xchacha20-poly1305" }) o = s:option(Flag, option_name("uot"), translate("UDP over TCP"), translate("Need Xray-core or sing-box as server side.")) -add_xray_depends(o, { [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "2022-blake3-aes-128-gcm" }) -add_xray_depends(o, { [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "2022-blake3-aes-256-gcm" }) -add_xray_depends(o, { [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "2022-blake3-chacha20-poly1305" }) +o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "2022-blake3-aes-128-gcm" }) +o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "2022-blake3-aes-256-gcm" }) +o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "2022-blake3-chacha20-poly1305" }) o = s:option(Value, option_name("uuid"), translate("ID")) o.password = true -add_xray_depends(o, { [option_name("protocol")] = "vmess" }) -add_xray_depends(o, { [option_name("protocol")] = "vless" }) -add_v2ray_depends(o, { [option_name("protocol")] = "vmess" }) -add_v2ray_depends(o, { [option_name("protocol")] = "vless" }) +o:depends({ [option_name("protocol")] = "vmess" }) +o:depends({ [option_name("protocol")] = "vless" }) o = s:option(ListValue, option_name("flow"), translate("flow")) o.default = "" o:value("", translate("Disable")) o:value("xtls-rprx-vision") -add_xray_depends(o, { [option_name("protocol")] = "vless", [option_name("tls")] = true, [option_name("transport")] = "tcp" }) +o:depends({ [option_name("protocol")] = "vless", [option_name("tls")] = true, [option_name("transport")] = "tcp" }) o = s:option(Flag, option_name("tls"), translate("TLS")) o.default = 0 -add_xray_depends(o, { [option_name("protocol")] = "vmess" }) -add_xray_depends(o, { [option_name("protocol")] = "vless" }) -add_xray_depends(o, { [option_name("protocol")] = "socks" }) -add_xray_depends(o, { [option_name("protocol")] = "trojan" }) -add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" }) -add_v2ray_depends(o, { [option_name("protocol")] = "vmess" }) -add_v2ray_depends(o, { [option_name("protocol")] = "vless" }) -add_v2ray_depends(o, { [option_name("protocol")] = "socks" }) -add_v2ray_depends(o, { [option_name("protocol")] = "trojan" }) -add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" }) +o:depends({ [option_name("protocol")] = "vmess" }) +o:depends({ [option_name("protocol")] = "vless" }) +o:depends({ [option_name("protocol")] = "socks" }) +o:depends({ [option_name("protocol")] = "trojan" }) +o:depends({ [option_name("protocol")] = "shadowsocks" }) o = s:option(Flag, option_name("reality"), translate("REALITY"), translate("Only recommend to use with VLESS-TCP-XTLS-Vision.")) o.default = 0 -add_xray_depends(o, { [option_name("tls")] = true, [option_name("transport")] = "tcp" }) -add_xray_depends(o, { [option_name("tls")] = true, [option_name("transport")] = "h2" }) -add_xray_depends(o, { [option_name("tls")] = true, [option_name("transport")] = "grpc" }) +o:depends({ [option_name("tls")] = true, [option_name("transport")] = "tcp" }) +o:depends({ [option_name("tls")] = true, [option_name("transport")] = "h2" }) +o:depends({ [option_name("tls")] = true, [option_name("transport")] = "grpc" }) o = s:option(ListValue, option_name("alpn"), translate("alpn")) o.default = "default" @@ -382,38 +301,34 @@ o:value("default", translate("Default")) o:value("h2,http/1.1") o:value("h2") o:value("http/1.1") -add_xray_depends(o, { [option_name("tls")] = true, [option_name("reality")] = false }) -add_v2ray_depends(o, { [option_name("tls")] = true }) +o:depends({ [option_name("tls")] = true, [option_name("reality")] = false }) -- o = s:option(Value, option_name("minversion"), translate("minversion")) -- o.default = "1.3" -- o:value("1.3") --- add_xray_depends(o, { [option_name("tls")] = true }) --- add_v2ray_depends(o, { [option_name("tls")] = true }) +-- o:depends({ [option_name("tls")] = true }) o = s:option(Value, option_name("tls_serverName"), translate("Domain")) -add_xray_depends(o, { [option_name("tls")] = true }) -add_v2ray_depends(o, { [option_name("tls")] = true }) +o:depends({ [option_name("tls")] = true }) o = s:option(Flag, option_name("tls_allowInsecure"), translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped.")) o.default = "0" -add_xray_depends(o, { [option_name("tls")] = true, [option_name("reality")] = false }) -add_v2ray_depends(o, { [option_name("tls")] = true }) +o:depends({ [option_name("tls")] = true, [option_name("reality")] = false }) -- [[ REALITY部分 ]] -- o = s:option(Value, option_name("reality_publicKey"), translate("Public Key")) -add_xray_depends(o, { [option_name("tls")] = true, [option_name("reality")] = true }) +o:depends({ [option_name("tls")] = true, [option_name("reality")] = true }) o = s:option(Value, option_name("reality_shortId"), translate("Short Id")) -add_xray_depends(o, { [option_name("tls")] = true, [option_name("reality")] = true }) +o:depends({ [option_name("tls")] = true, [option_name("reality")] = true }) o = s:option(Value, option_name("reality_spiderX"), translate("Spider X")) o.placeholder = "/" -add_xray_depends(o, { [option_name("tls")] = true, [option_name("reality")] = true }) +o:depends({ [option_name("tls")] = true, [option_name("reality")] = true }) o = s:option(Flag, option_name("utls"), translate("uTLS")) o.default = "0" -add_xray_depends(o, { [option_name("tls")] = true, [option_name("reality")] = false }) +o:depends({ [option_name("tls")] = true, [option_name("reality")] = false }) o = s:option(ListValue, option_name("fingerprint"), translate("Finger Print")) o:value("chrome") @@ -427,8 +342,8 @@ o:value("android") o:value("random") o:value("randomized") o.default = "chrome" -add_xray_depends(o, { [option_name("tls")] = true, [option_name("utls")] = true }) -add_xray_depends(o, { [option_name("tls")] = true, [option_name("reality")] = true }) +o:depends({ [option_name("tls")] = true, [option_name("utls")] = true }) +o:depends({ [option_name("tls")] = true, [option_name("reality")] = true }) o = s:option(ListValue, option_name("transport"), translate("Transport")) o:value("tcp", "TCP") @@ -438,50 +353,44 @@ o:value("h2", "HTTP/2") o:value("ds", "DomainSocket") o:value("quic", "QUIC") o:value("grpc", "gRPC") -add_xray_depends(o, { [option_name("protocol")] = "vmess" }) -add_xray_depends(o, { [option_name("protocol")] = "vless" }) -add_xray_depends(o, { [option_name("protocol")] = "socks" }) -add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" }) -add_xray_depends(o, { [option_name("protocol")] = "trojan" }) -add_v2ray_depends(o, { [option_name("protocol")] = "vmess" }) -add_v2ray_depends(o, { [option_name("protocol")] = "vless" }) -add_v2ray_depends(o, { [option_name("protocol")] = "socks" }) -add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" }) -add_v2ray_depends(o, { [option_name("protocol")] = "trojan" }) +o:depends({ [option_name("protocol")] = "vmess" }) +o:depends({ [option_name("protocol")] = "vless" }) +o:depends({ [option_name("protocol")] = "socks" }) +o:depends({ [option_name("protocol")] = "shadowsocks" }) +o:depends({ [option_name("protocol")] = "trojan" }) --[[ o = s:option(ListValue, option_name("ss_transport"), translate("Transport")) o:value("ws", "WebSocket") o:value("h2", "HTTP/2") o:value("h2+ws", "HTTP/2 & WebSocket") -add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" }) -add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" }) +o:depends({ [option_name("protocol")] = "shadowsocks" }) ]]-- o = s:option(Value, option_name("wireguard_public_key"), translate("Public Key")) -add_xray_depends(o, { [option_name("protocol")] = "wireguard" }) +o:depends({ [option_name("protocol")] = "wireguard" }) o = s:option(Value, option_name("wireguard_secret_key"), translate("Private Key")) -add_xray_depends(o, { [option_name("protocol")] = "wireguard" }) +o:depends({ [option_name("protocol")] = "wireguard" }) o = s:option(Value, option_name("wireguard_preSharedKey"), translate("Pre shared key")) -add_xray_depends(o, { [option_name("protocol")] = "wireguard" }) +o:depends({ [option_name("protocol")] = "wireguard" }) o = s:option(DynamicList, option_name("wireguard_local_address"), translate("Local Address")) -add_xray_depends(o, { [option_name("protocol")] = "wireguard" }) +o:depends({ [option_name("protocol")] = "wireguard" }) o = s:option(Value, option_name("wireguard_mtu"), translate("MTU")) o.default = "1420" -add_xray_depends(o, { [option_name("protocol")] = "wireguard" }) +o:depends({ [option_name("protocol")] = "wireguard" }) if api.compare_versions(api.get_app_version("xray"), ">=", "1.8.0") then o = s:option(Value, option_name("wireguard_reserved"), translate("Reserved"), translate("Decimal numbers separated by \",\" or Base64-encoded strings.")) - add_xray_depends(o, { [option_name("protocol")] = "wireguard" }) + o:depends({ [option_name("protocol")] = "wireguard" }) end o = s:option(Value, option_name("wireguard_keepAlive"), translate("Keep Alive")) o.default = "0" -add_xray_depends(o, { [option_name("protocol")] = "wireguard" }) +o:depends({ [option_name("protocol")] = "wireguard" }) -- [[ TCP部分 ]]-- @@ -489,193 +398,151 @@ add_xray_depends(o, { [option_name("protocol")] = "wireguard" }) o = s:option(ListValue, option_name("tcp_guise"), translate("Camouflage Type")) o:value("none", "none") o:value("http", "http") -add_xray_depends(o, { [option_name("transport")] = "tcp" }) -add_v2ray_depends(o, { [option_name("transport")] = "tcp" }) +o:depends({ [option_name("transport")] = "tcp" }) -- HTTP域名 o = s:option(DynamicList, option_name("tcp_guise_http_host"), translate("HTTP Host")) -add_xray_depends(o, { [option_name("tcp_guise")] = "http" }) -add_v2ray_depends(o, { [option_name("tcp_guise")] = "http" }) +o:depends({ [option_name("tcp_guise")] = "http" }) -- HTTP路径 o = s:option(DynamicList, option_name("tcp_guise_http_path"), translate("HTTP Path")) o.placeholder = "/" -add_xray_depends(o, { [option_name("tcp_guise")] = "http" }) -add_v2ray_depends(o, { [option_name("tcp_guise")] = "http" }) +o:depends({ [option_name("tcp_guise")] = "http" }) -- [[ mKCP部分 ]]-- o = s:option(ListValue, option_name("mkcp_guise"), translate("Camouflage Type"), translate('
none: default, no masquerade, data sent is packets with no characteristics.
srtp: disguised as an SRTP packet, it will be recognized as video call data (such as FaceTime).
utp: packets disguised as uTP will be recognized as bittorrent downloaded data.
wechat-video: packets disguised as WeChat video calls.
dtls: disguised as DTLS 1.2 packet.
wireguard: disguised as a WireGuard packet. (not really WireGuard protocol)')) for a, t in ipairs(header_type_list) do o:value(t) end -add_xray_depends(o, { [option_name("transport")] = "mkcp" }) -add_v2ray_depends(o, { [option_name("transport")] = "mkcp" }) +o:depends({ [option_name("transport")] = "mkcp" }) o = s:option(Value, option_name("mkcp_mtu"), translate("KCP MTU")) o.default = "1350" -add_xray_depends(o, { [option_name("transport")] = "mkcp" }) -add_v2ray_depends(o, { [option_name("transport")] = "mkcp" }) +o:depends({ [option_name("transport")] = "mkcp" }) o = s:option(Value, option_name("mkcp_tti"), translate("KCP TTI")) o.default = "20" -add_xray_depends(o, { [option_name("transport")] = "mkcp" }) -add_v2ray_depends(o, { [option_name("transport")] = "mkcp" }) +o:depends({ [option_name("transport")] = "mkcp" }) o = s:option(Value, option_name("mkcp_uplinkCapacity"), translate("KCP uplinkCapacity")) o.default = "5" -add_xray_depends(o, { [option_name("transport")] = "mkcp" }) -add_v2ray_depends(o, { [option_name("transport")] = "mkcp" }) +o:depends({ [option_name("transport")] = "mkcp" }) o = s:option(Value, option_name("mkcp_downlinkCapacity"), translate("KCP downlinkCapacity")) o.default = "20" -add_xray_depends(o, { [option_name("transport")] = "mkcp" }) -add_v2ray_depends(o, { [option_name("transport")] = "mkcp" }) +o:depends({ [option_name("transport")] = "mkcp" }) o = s:option(Flag, option_name("mkcp_congestion"), translate("KCP Congestion")) -add_xray_depends(o, { [option_name("transport")] = "mkcp" }) -add_v2ray_depends(o, { [option_name("transport")] = "mkcp" }) +o:depends({ [option_name("transport")] = "mkcp" }) o = s:option(Value, option_name("mkcp_readBufferSize"), translate("KCP readBufferSize")) o.default = "1" -add_xray_depends(o, { [option_name("transport")] = "mkcp" }) -add_v2ray_depends(o, { [option_name("transport")] = "mkcp" }) +o:depends({ [option_name("transport")] = "mkcp" }) o = s:option(Value, option_name("mkcp_writeBufferSize"), translate("KCP writeBufferSize")) o.default = "1" -add_xray_depends(o, { [option_name("transport")] = "mkcp" }) -add_v2ray_depends(o, { [option_name("transport")] = "mkcp" }) +o:depends({ [option_name("transport")] = "mkcp" }) o = s:option(Value, option_name("mkcp_seed"), translate("KCP Seed")) -add_xray_depends(o, { [option_name("transport")] = "mkcp" }) -add_v2ray_depends(o, { [option_name("transport")] = "mkcp" }) +o:depends({ [option_name("transport")] = "mkcp" }) -- [[ WebSocket部分 ]]-- o = s:option(Value, option_name("ws_host"), translate("WebSocket Host")) -add_xray_depends(o, { [option_name("transport")] = "ws" }) -add_xray_depends(o, { [option_name("ss_transport")] = "ws" }) -add_v2ray_depends(o, { [option_name("transport")] = "ws" }) -add_v2ray_depends(o, { [option_name("ss_transport")] = "ws" }) +o:depends({ [option_name("transport")] = "ws" }) +o:depends({ [option_name("ss_transport")] = "ws" }) o = s:option(Value, option_name("ws_path"), translate("WebSocket Path")) o.placeholder = "/" -add_xray_depends(o, { [option_name("transport")] = "ws" }) -add_xray_depends(o, { [option_name("ss_transport")] = "ws" }) -add_v2ray_depends(o, { [option_name("transport")] = "ws" }) -add_v2ray_depends(o, { [option_name("ss_transport")] = "ws" }) - -o = s:option(Flag, "v2ray_ws_enableEarlyData", translate("Enable early data")) -add_v2ray_depends(o, { [option_name("transport")] = "ws" }) - -o = s:option(Value, "v2ray_ws_maxEarlyData", translate("Early data length")) -o.default = "1024" -add_v2ray_depends(o, { v2ray_ws_enableEarlyData = true }) - -o = s:option(Value, "v2ray_ws_earlyDataHeaderName", translate("Early data header name"), translate("Recommended value: Sec-WebSocket-Protocol")) -add_v2ray_depends(o, { v2ray_ws_enableEarlyData = true }) +o:depends({ [option_name("transport")] = "ws" }) +o:depends({ [option_name("ss_transport")] = "ws" }) -- [[ HTTP/2部分 ]]-- o = s:option(Value, option_name("h2_host"), translate("HTTP/2 Host")) -add_xray_depends(o, { [option_name("transport")] = "h2" }) -add_xray_depends(o, { [option_name("ss_transport")] = "h2" }) -add_v2ray_depends(o, { [option_name("transport")] = "h2" }) -add_v2ray_depends(o, { [option_name("ss_transport")] = "h2" }) +o:depends({ [option_name("transport")] = "h2" }) +o:depends({ [option_name("ss_transport")] = "h2" }) o = s:option(Value, option_name("h2_path"), translate("HTTP/2 Path")) o.placeholder = "/" -add_xray_depends(o, { [option_name("transport")] = "h2" }) -add_xray_depends(o, { [option_name("ss_transport")] = "h2" }) -add_v2ray_depends(o, { [option_name("transport")] = "h2" }) -add_v2ray_depends(o, { [option_name("ss_transport")] = "h2" }) +o:depends({ [option_name("transport")] = "h2" }) +o:depends({ [option_name("ss_transport")] = "h2" }) o = s:option(Flag, option_name("h2_health_check"), translate("Health check")) -add_xray_depends(o, { [option_name("transport")] = "h2" }) +o:depends({ [option_name("transport")] = "h2" }) o = s:option(Value, option_name("h2_read_idle_timeout"), translate("Idle timeout")) o.default = "10" -add_xray_depends(o, { [option_name("h2_health_check")] = true }) +o:depends({ [option_name("h2_health_check")] = true }) o = s:option(Value, option_name("h2_health_check_timeout"), translate("Health check timeout")) o.default = "15" -add_xray_depends(o, { [option_name("h2_health_check")] = true }) +o:depends({ [option_name("h2_health_check")] = true }) -- [[ DomainSocket部分 ]]-- o = s:option(Value, option_name("ds_path"), "Path", translate("A legal file path. This file must not exist before running.")) -add_xray_depends(o, { [option_name("transport")] = "ds" }) -add_v2ray_depends(o, { [option_name("transport")] = "ds" }) +o:depends({ [option_name("transport")] = "ds" }) -- [[ QUIC部分 ]]-- o = s:option(ListValue, option_name("quic_security"), translate("Encrypt Method")) o:value("none") o:value("aes-128-gcm") o:value("chacha20-poly1305") -add_xray_depends(o, { [option_name("transport")] = "quic" }) -add_v2ray_depends(o, { [option_name("transport")] = "quic" }) +o:depends({ [option_name("transport")] = "quic" }) o = s:option(Value, option_name("quic_key"), translate("Encrypt Method") .. translate("Key")) -add_xray_depends(o, { [option_name("transport")] = "quic" }) -add_v2ray_depends(o, { [option_name("transport")] = "quic" }) +o:depends({ [option_name("transport")] = "quic" }) o = s:option(ListValue, option_name("quic_guise"), translate("Camouflage Type")) for a, t in ipairs(header_type_list) do o:value(t) end -add_xray_depends(o, { [option_name("transport")] = "quic" }) -add_v2ray_depends(o, { [option_name("transport")] = "quic" }) +o:depends({ [option_name("transport")] = "quic" }) -- [[ gRPC部分 ]]-- o = s:option(Value, option_name("grpc_serviceName"), "ServiceName") -add_xray_depends(o, { [option_name("transport")] = "grpc" }) -add_v2ray_depends(o, { [option_name("transport")] = "grpc" }) +o:depends({ [option_name("transport")] = "grpc" }) o = s:option(ListValue, option_name("grpc_mode"), "gRPC " .. translate("Transfer mode")) o:value("gun") o:value("multi") -add_xray_depends(o, { [option_name("transport")] = "grpc" }) +o:depends({ [option_name("transport")] = "grpc" }) o = s:option(Flag, option_name("grpc_health_check"), translate("Health check")) -add_xray_depends(o, { [option_name("transport")] = "grpc" }) +o:depends({ [option_name("transport")] = "grpc" }) o = s:option(Value, option_name("grpc_idle_timeout"), translate("Idle timeout")) o.default = "10" -add_xray_depends(o, { [option_name("grpc_health_check")] = true }) +o:depends({ [option_name("grpc_health_check")] = true }) o = s:option(Value, option_name("grpc_health_check_timeout"), translate("Health check timeout")) o.default = "20" -add_xray_depends(o, { [option_name("grpc_health_check")] = true }) +o:depends({ [option_name("grpc_health_check")] = true }) o = s:option(Flag, option_name("grpc_permit_without_stream"), translate("Permit without stream")) o.default = "0" -add_xray_depends(o, { [option_name("grpc_health_check")] = true }) +o:depends({ [option_name("grpc_health_check")] = true }) o = s:option(Value, option_name("grpc_initial_windows_size"), translate("Initial Windows Size")) o.default = "0" -add_xray_depends(o, { [option_name("transport")] = "grpc" }) +o:depends({ [option_name("transport")] = "grpc" }) -- [[ Mux ]]-- o = s:option(Flag, option_name("mux"), translate("Mux")) -add_v2ray_depends(o, { [option_name("protocol")] = "vmess" }) -add_v2ray_depends(o, { [option_name("protocol")] = "vless" }) -add_v2ray_depends(o, { [option_name("protocol")] = "http" }) -add_v2ray_depends(o, { [option_name("protocol")] = "socks" }) -add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" }) -add_v2ray_depends(o, { [option_name("protocol")] = "trojan" }) -add_xray_depends(o, { [option_name("protocol")] = "vmess" }) -add_xray_depends(o, { [option_name("protocol")] = "vless", [option_name("flow")] = "" }) -add_xray_depends(o, { [option_name("protocol")] = "http" }) -add_xray_depends(o, { [option_name("protocol")] = "socks" }) -add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" }) -add_xray_depends(o, { [option_name("protocol")] = "trojan" }) +o:depends({ [option_name("protocol")] = "vmess" }) +o:depends({ [option_name("protocol")] = "vless", [option_name("flow")] = "" }) +o:depends({ [option_name("protocol")] = "http" }) +o:depends({ [option_name("protocol")] = "socks" }) +o:depends({ [option_name("protocol")] = "shadowsocks" }) +o:depends({ [option_name("protocol")] = "trojan" }) o = s:option(Value, option_name("mux_concurrency"), translate("Mux concurrency")) o.default = 8 -add_xray_depends(o, { [option_name("mux")] = true }) -add_v2ray_depends(o, { [option_name("mux")] = true }) +o:depends({ [option_name("mux")] = true }) -- [[ XUDP Mux ]]-- o = s:option(Flag, option_name("xmux"), translate("xMux")) o.default = 1 -add_xray_depends(o, { [option_name("protocol")] = "vless", [option_name("flow")] = "xtls-rprx-vision" }) +o:depends({ [option_name("protocol")] = "vless", [option_name("flow")] = "xtls-rprx-vision" }) o = s:option(Value, option_name("xudp_concurrency"), translate("XUDP Mux concurrency")) o.default = 8 -add_xray_depends(o, { [option_name("xmux")] = true }) +o:depends({ [option_name("xmux")] = true }) for key, value in pairs(s.fields) do if key:find(option_prefix) == 1 then @@ -684,5 +551,14 @@ for key, value in pairs(s.fields) do s.fields[key].write = rm_prefix_write s.fields[key].remove = rm_prefix_remove end + + local deps = s.fields[key].deps + if #deps > 0 then + for index, value in ipairs(deps) do + deps[index]["type"] = type_name + end + else + s.fields[key]:depends({ type = type_name }) + end end end diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/index.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/index.lua index 45bb3a834..d18b75444 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/server/index.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/server/index.lua @@ -45,7 +45,7 @@ e = t:option(DummyValue, "type", translate("Type")) e.cfgvalue = function(t, n) local v = Value.cfgvalue(t, n) if v then - if v == "sing-box" or v == "V2ray" or v == "Xray" then + if v == "sing-box" or v == "Xray" then local protocol = m:get(n, "protocol") return v .. " -> " .. protocol end diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua index d951499f8..6e2d67f79 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua @@ -2,10 +2,12 @@ local m, s = ... local api = require "luci.passwall.api" -if not api.finded_com("xray") and not api.finded_com("v2ray")then +if not api.finded_com("xray") then return end +local type_name = "Xray" + local option_prefix = "xray_" local function option_name(name) @@ -18,52 +20,20 @@ local function rm_prefix_cfgvalue(self, section) end end local function rm_prefix_write(self, section, value) - if s.fields["type"]:formvalue(arg[1]) == "Xray" or s.fields["type"]:formvalue(arg[1]) == "V2ray" then + if s.fields["type"]:formvalue(arg[1]) == type_name then if self.option:find(option_prefix) == 1 then m:set(section, self.option:sub(1 + #option_prefix), value) end end end local function rm_prefix_remove(self, section, value) - if s.fields["type"]:formvalue(arg[1]) == "Xray" or s.fields["type"]:formvalue(arg[1]) == "V2ray" then + if s.fields["type"]:formvalue(arg[1]) == type_name then if self.option:find(option_prefix) == 1 then m:del(section, self.option:sub(1 + #option_prefix)) end end end -local function add_xray_depends(o, field, value) - local deps = { type = "Xray" } - if field then - if type(field) == "string" then - deps[field] = value - else - for key, value in pairs(field) do - deps[key] = value - end - end - end - o:depends(deps) -end - -local function add_v2ray_depends(o, field, value) - local deps = { type = "V2ray" } - if field then - if type(field) == "string" then - deps[field] = value - else - for key, value in pairs(field) do - deps[key] = value - end - end - end - o:depends(deps) -end - -local v_ss_method_list = { - "aes-128-gcm", "aes-256-gcm", "chacha20-poly1305" -} - local x_ss_method_list = { "aes-128-gcm", "aes-256-gcm", "chacha20-poly1305", "xchacha20-poly1305", "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305" } @@ -74,12 +44,7 @@ local header_type_list = { -- [[ Xray ]] -if api.finded_com("v2ray") then - s.fields["type"]:value("V2ray", translate("V2ray")) -end -if api.finded_com("xray") then - s.fields["type"]:value("Xray", translate("Xray")) -end +s.fields["type"]:value(type_name, "Xray") o = s:option(ListValue, option_name("protocol"), translate("Protocol")) o:value("vmess", "Vmess") @@ -89,13 +54,9 @@ o:value("socks", "Socks") o:value("shadowsocks", "Shadowsocks") o:value("trojan", "Trojan") o:value("dokodemo-door", "dokodemo-door") -add_xray_depends(o) -add_v2ray_depends(o) o = s:option(Value, option_name("port"), translate("Listen Port")) o.datatype = "port" -add_xray_depends(o) -add_v2ray_depends(o) o = s:option(Flag, option_name("auth"), translate("Auth")) o.validate = function(self, value, t) @@ -108,103 +69,75 @@ o.validate = function(self, value, t) end return value end -add_xray_depends(o, { [option_name("protocol")] = "socks" }) -add_xray_depends(o, { [option_name("protocol")] = "http" }) -add_v2ray_depends(o, { [option_name("protocol")] = "socks" }) -add_v2ray_depends(o, { [option_name("protocol")] = "http" }) +o:depends({ [option_name("protocol")] = "socks" }) +o:depends({ [option_name("protocol")] = "http" }) o = s:option(Value, option_name("username"), translate("Username")) -add_xray_depends(o, { [option_name("auth")] = true }) -add_v2ray_depends(o, { [option_name("auth")] = true }) +o:depends({ [option_name("auth")] = true }) o = s:option(Value, option_name("password"), translate("Password")) o.password = true -add_xray_depends(o, { [option_name("auth")] = true }) -add_v2ray_depends(o, { [option_name("auth")] = true }) -add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" }) -add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" }) +o:depends({ [option_name("auth")] = true }) +o:depends({ [option_name("protocol")] = "shadowsocks" }) o = s:option(ListValue, option_name("d_protocol"), translate("Destination protocol")) o:value("tcp", "TCP") o:value("udp", "UDP") o:value("tcp,udp", "TCP,UDP") -add_v2ray_depends(o, { [option_name("protocol")] = "dokodemo-door" }) -add_xray_depends(o, { [option_name("protocol")] = "dokodemo-door" }) +o:depends({ [option_name("protocol")] = "dokodemo-door" }) o = s:option(Value, option_name("d_address"), translate("Destination address")) -add_v2ray_depends(o, { [option_name("protocol")] = "dokodemo-door" }) -add_xray_depends(o, { [option_name("protocol")] = "dokodemo-door" }) +o:depends({ [option_name("protocol")] = "dokodemo-door" }) o = s:option(Value, option_name("d_port"), translate("Destination port")) o.datatype = "port" -add_v2ray_depends(o, { [option_name("protocol")] = "dokodemo-door" }) -add_xray_depends(o, { [option_name("protocol")] = "dokodemo-door" }) +o:depends({ [option_name("protocol")] = "dokodemo-door" }) o = s:option(Value, option_name("decryption"), translate("Encrypt Method")) o.default = "none" -add_v2ray_depends(o, { [option_name("protocol")] = "vless" }) -add_xray_depends(o, { [option_name("protocol")] = "vless" }) - -o = s:option(ListValue, option_name("v_ss_method"), translate("Encrypt Method")) -o.not_rewrite = true -for a, t in ipairs(v_ss_method_list) do o:value(t) end -add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" }) -function o.cfgvalue(self, section) - return m:get(section, "method") -end -function o.write(self, section, value) - if s.fields["type"]:formvalue(arg[1]) == "V2ray" then - m:set(section, "method", value) - end -end +o:depends({ [option_name("protocol")] = "vless" }) o = s:option(ListValue, option_name("x_ss_method"), translate("Encrypt Method")) o.not_rewrite = true for a, t in ipairs(x_ss_method_list) do o:value(t) end -add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" }) +o:depends({ [option_name("protocol")] = "shadowsocks" }) function o.cfgvalue(self, section) return m:get(section, "method") end function o.write(self, section, value) - if s.fields["type"]:formvalue(arg[1]) == "Xray" then + if s.fields["type"]:formvalue(arg[1]) == type_name then m:set(section, "method", value) end end o = s:option(Flag, option_name("iv_check"), translate("IV Check")) -add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" }) -add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" }) +o:depends({ [option_name("protocol")] = "shadowsocks" }) o = s:option(ListValue, option_name("ss_network"), translate("Transport")) o.default = "tcp,udp" o:value("tcp", "TCP") o:value("udp", "UDP") o:value("tcp,udp", "TCP,UDP") -add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" }) -add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" }) +o:depends({ [option_name("protocol")] = "shadowsocks" }) o = s:option(Flag, option_name("udp_forward"), translate("UDP Forward")) o.default = "1" o.rmempty = false -add_v2ray_depends(o, { [option_name("protocol")] = "socks" }) -add_xray_depends(o, { [option_name("protocol")] = "socks" }) +o:depends({ [option_name("protocol")] = "socks" }) o = s:option(DynamicList, option_name("uuid"), translate("ID") .. "/" .. translate("Password")) for i = 1, 3 do o:value(api.gen_uuid(1)) end -add_v2ray_depends(o, { [option_name("protocol")] = "vmess" }) -add_v2ray_depends(o, { [option_name("protocol")] = "vless" }) -add_v2ray_depends(o, { [option_name("protocol")] = "trojan" }) -add_xray_depends(o, { [option_name("protocol")] = "vmess" }) -add_xray_depends(o, { [option_name("protocol")] = "vless" }) -add_xray_depends(o, { [option_name("protocol")] = "trojan" }) +o:depends({ [option_name("protocol")] = "vmess" }) +o:depends({ [option_name("protocol")] = "vless" }) +o:depends({ [option_name("protocol")] = "trojan" }) o = s:option(ListValue, option_name("flow"), translate("flow")) o.default = "" o:value("", translate("Disable")) o:value("xtls-rprx-vision") -add_xray_depends(o, { [option_name("protocol")] = "vless", [option_name("tls")] = true, [option_name("transport")] = "tcp" }) +o:depends({ [option_name("protocol")] = "vless", [option_name("tls")] = true, [option_name("transport")] = "tcp" }) o = s:option(Flag, option_name("tls"), translate("TLS")) o.default = 0 @@ -220,37 +153,29 @@ o.validate = function(self, value, t) return value end end -add_v2ray_depends(o, { [option_name("protocol")] = "vmess" }) -add_v2ray_depends(o, { [option_name("protocol")] = "vless" }) -add_v2ray_depends(o, { [option_name("protocol")] = "socks" }) -add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" }) -add_v2ray_depends(o, { [option_name("protocol")] = "trojan" }) -add_xray_depends(o, { [option_name("protocol")] = "vmess" }) -add_xray_depends(o, { [option_name("protocol")] = "vless" }) -add_xray_depends(o, { [option_name("protocol")] = "socks" }) -add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" }) -add_xray_depends(o, { [option_name("protocol")] = "trojan" }) +o:depends({ [option_name("protocol")] = "vmess" }) +o:depends({ [option_name("protocol")] = "vless" }) +o:depends({ [option_name("protocol")] = "socks" }) +o:depends({ [option_name("protocol")] = "shadowsocks" }) +o:depends({ [option_name("protocol")] = "trojan" }) o = s:option(ListValue, option_name("alpn"), translate("alpn")) o.default = "h2,http/1.1" o:value("h2,http/1.1") o:value("h2") o:value("http/1.1") -add_v2ray_depends(o, { [option_name("tls")] = true }) -add_xray_depends(o, { [option_name("tls")] = true }) +o:depends({ [option_name("tls")] = true }) -- o = s:option(Value, option_name("minversion"), translate("minversion")) -- o.default = "1.3" -- o:value("1.3") ---add_v2ray_depends(o, { [option_name("tls")] = true }) ---add_xray_depends(o, { [option_name("tls")] = true }) +--o:depends({ [option_name("tls")] = true }) -- [[ TLS部分 ]] -- o = s:option(FileUpload, option_name("tls_certificateFile"), translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem") o.default = m:get(s.section, "tls_certificateFile") or "/etc/config/ssl/" .. arg[1] .. ".pem" -add_v2ray_depends(o, { [option_name("tls")] = true }) -add_xray_depends(o, { [option_name("tls")] = true }) +o:depends({ [option_name("tls")] = true }) o.validate = function(self, value, t) if value and value ~= "" then if not nixio.fs.access(value) then @@ -264,8 +189,7 @@ end o = s:option(FileUpload, option_name("tls_keyFile"), translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key") o.default = m:get(s.section, "tls_keyFile") or "/etc/config/ssl/" .. arg[1] .. ".key" -add_v2ray_depends(o, { [option_name("tls")] = true }) -add_xray_depends(o, { [option_name("tls")] = true }) +o:depends({ [option_name("tls")] = true }) o.validate = function(self, value, t) if value and value ~= "" then if not nixio.fs.access(value) then @@ -285,36 +209,27 @@ o:value("h2", "HTTP/2") o:value("ds", "DomainSocket") o:value("quic", "QUIC") o:value("grpc", "gRPC") -add_v2ray_depends(o, { [option_name("protocol")] = "vmess" }) -add_v2ray_depends(o, { [option_name("protocol")] = "vless" }) -add_v2ray_depends(o, { [option_name("protocol")] = "socks" }) -add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" }) -add_v2ray_depends(o, { [option_name("protocol")] = "trojan" }) -add_xray_depends(o, { [option_name("protocol")] = "vmess" }) -add_xray_depends(o, { [option_name("protocol")] = "vless" }) -add_xray_depends(o, { [option_name("protocol")] = "socks" }) -add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" }) -add_xray_depends(o, { [option_name("protocol")] = "trojan" }) +o:depends({ [option_name("protocol")] = "vmess" }) +o:depends({ [option_name("protocol")] = "vless" }) +o:depends({ [option_name("protocol")] = "socks" }) +o:depends({ [option_name("protocol")] = "shadowsocks" }) +o:depends({ [option_name("protocol")] = "trojan" }) -- [[ WebSocket部分 ]]-- o = s:option(Value, option_name("ws_host"), translate("WebSocket Host")) -add_v2ray_depends(o, { [option_name("transport")] = "ws" }) -add_xray_depends(o, { [option_name("transport")] = "ws" }) +o:depends({ [option_name("transport")] = "ws" }) o = s:option(Value, option_name("ws_path"), translate("WebSocket Path")) -add_v2ray_depends(o, { [option_name("transport")] = "ws" }) -add_xray_depends(o, { [option_name("transport")] = "ws" }) +o:depends({ [option_name("transport")] = "ws" }) -- [[ HTTP/2部分 ]]-- o = s:option(Value, option_name("h2_host"), translate("HTTP/2 Host")) -add_v2ray_depends(o, { [option_name("transport")] = "h2" }) -add_xray_depends(o, { [option_name("transport")] = "h2" }) +o:depends({ [option_name("transport")] = "h2" }) o = s:option(Value, option_name("h2_path"), translate("HTTP/2 Path")) -add_v2ray_depends(o, { [option_name("transport")] = "h2" }) -add_xray_depends(o, { [option_name("transport")] = "h2" }) +o:depends({ [option_name("transport")] = "h2" }) -- [[ TCP部分 ]]-- @@ -322,141 +237,111 @@ add_xray_depends(o, { [option_name("transport")] = "h2" }) o = s:option(ListValue, option_name("tcp_guise"), translate("Camouflage Type")) o:value("none", "none") o:value("http", "http") -add_v2ray_depends(o, { [option_name("transport")] = "tcp" }) -add_xray_depends(o, { [option_name("transport")] = "tcp" }) +o:depends({ [option_name("transport")] = "tcp" }) -- HTTP域名 o = s:option(DynamicList, option_name("tcp_guise_http_host"), translate("HTTP Host")) -add_v2ray_depends(o, { [option_name("tcp_guise")] = "http" }) -add_xray_depends(o, { [option_name("tcp_guise")] = "http" }) +o:depends({ [option_name("tcp_guise")] = "http" }) -- HTTP路径 o = s:option(DynamicList, option_name("tcp_guise_http_path"), translate("HTTP Path")) -add_v2ray_depends(o, { [option_name("tcp_guise")] = "http" }) -add_xray_depends(o, { [option_name("tcp_guise")] = "http" }) +o:depends({ [option_name("tcp_guise")] = "http" }) -- [[ mKCP部分 ]]-- o = s:option(ListValue, option_name("mkcp_guise"), translate("Camouflage Type"), translate('
none: default, no masquerade, data sent is packets with no characteristics.
srtp: disguised as an SRTP packet, it will be recognized as video call data (such as FaceTime).
utp: packets disguised as uTP will be recognized as bittorrent downloaded data.
wechat-video: packets disguised as WeChat video calls.
dtls: disguised as DTLS 1.2 packet.
wireguard: disguised as a WireGuard packet. (not really WireGuard protocol)')) for a, t in ipairs(header_type_list) do o:value(t) end -add_v2ray_depends(o, { [option_name("transport")] = "mkcp" }) -add_xray_depends(o, { [option_name("transport")] = "mkcp" }) +o:depends({ [option_name("transport")] = "mkcp" }) o = s:option(Value, option_name("mkcp_mtu"), translate("KCP MTU")) o.default = "1350" -add_v2ray_depends(o, { [option_name("transport")] = "mkcp" }) -add_xray_depends(o, { [option_name("transport")] = "mkcp" }) +o:depends({ [option_name("transport")] = "mkcp" }) o = s:option(Value, option_name("mkcp_tti"), translate("KCP TTI")) o.default = "20" -add_v2ray_depends(o, { [option_name("transport")] = "mkcp" }) -add_xray_depends(o, { [option_name("transport")] = "mkcp" }) +o:depends({ [option_name("transport")] = "mkcp" }) o = s:option(Value, option_name("mkcp_uplinkCapacity"), translate("KCP uplinkCapacity")) o.default = "5" -add_v2ray_depends(o, { [option_name("transport")] = "mkcp" }) -add_xray_depends(o, { [option_name("transport")] = "mkcp" }) +o:depends({ [option_name("transport")] = "mkcp" }) o = s:option(Value, option_name("mkcp_downlinkCapacity"), translate("KCP downlinkCapacity")) o.default = "20" -add_v2ray_depends(o, { [option_name("transport")] = "mkcp" }) -add_xray_depends(o, { [option_name("transport")] = "mkcp" }) +o:depends({ [option_name("transport")] = "mkcp" }) o = s:option(Flag, option_name("mkcp_congestion"), translate("KCP Congestion")) -add_v2ray_depends(o, { [option_name("transport")] = "mkcp" }) -add_xray_depends(o, { [option_name("transport")] = "mkcp" }) +o:depends({ [option_name("transport")] = "mkcp" }) o = s:option(Value, option_name("mkcp_readBufferSize"), translate("KCP readBufferSize")) o.default = "1" -add_v2ray_depends(o, { [option_name("transport")] = "mkcp" }) -add_xray_depends(o, { [option_name("transport")] = "mkcp" }) +o:depends({ [option_name("transport")] = "mkcp" }) o = s:option(Value, option_name("mkcp_writeBufferSize"), translate("KCP writeBufferSize")) o.default = "1" -add_v2ray_depends(o, { [option_name("transport")] = "mkcp" }) -add_xray_depends(o, { [option_name("transport")] = "mkcp" }) +o:depends({ [option_name("transport")] = "mkcp" }) o = s:option(Value, option_name("mkcp_seed"), translate("KCP Seed")) -add_v2ray_depends(o, { [option_name("transport")] = "mkcp" }) -add_xray_depends(o, { [option_name("transport")] = "mkcp" }) +o:depends({ [option_name("transport")] = "mkcp" }) -- [[ DomainSocket部分 ]]-- o = s:option(Value, option_name("ds_path"), "Path", translate("A legal file path. This file must not exist before running.")) -add_v2ray_depends(o, { [option_name("transport")] = "ds" }) -add_xray_depends(o, { [option_name("transport")] = "ds" }) +o:depends({ [option_name("transport")] = "ds" }) -- [[ QUIC部分 ]]-- o = s:option(ListValue, option_name("quic_security"), translate("Encrypt Method")) o:value("none") o:value("aes-128-gcm") o:value("chacha20-poly1305") -add_v2ray_depends(o, { [option_name("transport")] = "quic" }) -add_xray_depends(o, { [option_name("transport")] = "quic" }) +o:depends({ [option_name("transport")] = "quic" }) o = s:option(Value, option_name("quic_key"), translate("Encrypt Method") .. translate("Key")) -add_v2ray_depends(o, { [option_name("transport")] = "quic" }) -add_xray_depends(o, { [option_name("transport")] = "quic" }) +o:depends({ [option_name("transport")] = "quic" }) o = s:option(ListValue, option_name("quic_guise"), translate("Camouflage Type")) for a, t in ipairs(header_type_list) do o:value(t) end -add_v2ray_depends(o, { [option_name("transport")] = "quic" }) -add_xray_depends(o, { [option_name("transport")] = "quic" }) +o:depends({ [option_name("transport")] = "quic" }) -- [[ gRPC部分 ]]-- o = s:option(Value, option_name("grpc_serviceName"), "ServiceName") -add_v2ray_depends(o, { [option_name("transport")] = "grpc" }) -add_xray_depends(o, { [option_name("transport")] = "grpc" }) +o:depends({ [option_name("transport")] = "grpc" }) o = s:option(Flag, option_name("acceptProxyProtocol"), translate("acceptProxyProtocol"), translate("Whether to receive PROXY protocol, when this node want to be fallback or forwarded by proxy, it must be enable, otherwise it cannot be used.")) -add_v2ray_depends(o, { [option_name("transport")] = "tcp" }) -add_v2ray_depends(o, { [option_name("transport")] = "ws" }) -add_xray_depends(o, { [option_name("transport")] = "tcp" }) -add_xray_depends(o, { [option_name("transport")] = "ws" }) +o:depends({ [option_name("transport")] = "tcp" }) +o:depends({ [option_name("transport")] = "ws" }) -- [[ Fallback部分 ]]-- o = s:option(Flag, option_name("fallback"), translate("Fallback")) -add_v2ray_depends(o, { [option_name("protocol")] = "vless", [option_name("transport")] = "tcp" }) -add_v2ray_depends(o, { [option_name("protocol")] = "trojan", [option_name("transport")] = "tcp" }) -add_xray_depends(o, { [option_name("protocol")] = "vless", [option_name("transport")] = "tcp" }) -add_xray_depends(o, { [option_name("protocol")] = "trojan", [option_name("transport")] = "tcp" }) +o:depends({ [option_name("protocol")] = "vless", [option_name("transport")] = "tcp" }) +o:depends({ [option_name("protocol")] = "trojan", [option_name("transport")] = "tcp" }) --[[ o = s:option(Value, option_name("fallback_alpn"), "Fallback alpn") -add_v2ray_depends(o, { [option_name("fallback")] = true }) -add_xray_depends(o, { [option_name("fallback")] = true }) +o:depends({ [option_name("fallback")] = true }) o = s:option(Value, option_name("fallback_path"), "Fallback path") -add_v2ray_depends(o, { [option_name("fallback")] = true }) -add_xray_depends(o, { [option_name("fallback")] = true }) +o:depends({ [option_name("fallback")] = true }) o = s:option(Value, option_name("fallback_dest"), "Fallback dest") -add_v2ray_depends(o, { [option_name("fallback")] = true }) -add_xray_depends(o, { [option_name("fallback")] = true }) +o:depends({ [option_name("fallback")] = true }) o = s:option(Value, option_name("fallback_xver"), "Fallback xver") o.default = 0 -add_v2ray_depends(o, { [option_name("fallback")] = true }) -add_xray_depends(o, { [option_name("fallback")] = true }) +o:depends({ [option_name("fallback")] = true }) ]]-- o = s:option(DynamicList, option_name("fallback_list"), "Fallback", translate("dest,path")) -add_v2ray_depends(o, { [option_name("fallback")] = true }) -add_xray_depends(o, { [option_name("fallback")] = true }) +o:depends({ [option_name("fallback")] = true }) o = s:option(Flag, option_name("bind_local"), translate("Bind Local"), translate("When selected, it can only be accessed locally, It is recommended to turn on when using reverse proxies or be fallback.")) o.default = "0" -add_v2ray_depends(o) -add_xray_depends(o) o = s:option(Flag, option_name("accept_lan"), translate("Accept LAN Access"), translate("When selected, it can accessed lan , this will not be safe!")) o.default = "0" -add_v2ray_depends(o) -add_xray_depends(o) local nodes_table = {} for k, e in ipairs(api.get_valid_nodes()) do - if e.node_type == "normal" and (e.type == "V2ray" or e.type == "Xray") then + if e.node_type == "normal" and e.type == type_name then nodes_table[#nodes_table + 1] = { id = e[".name"], remarks = e["remark"] @@ -471,45 +356,32 @@ o:value("_http", translate("Custom HTTP")) o:value("_iface", translate("Custom Interface") .. " (Only Support Xray)") for k, v in pairs(nodes_table) do o:value(v.id, v.remarks) end o.default = "nil" -add_v2ray_depends(o) -add_xray_depends(o) o = s:option(Value, option_name("outbound_node_address"), translate("Address (Support Domain Name)")) -add_v2ray_depends(o, { [option_name("outbound_node")] = "_socks"}) -add_v2ray_depends(o, { [option_name("outbound_node")] = "_http"}) -add_xray_depends(o, { [option_name("outbound_node")] = "_socks"}) -add_xray_depends(o, { [option_name("outbound_node")] = "_http"}) +o:depends({ [option_name("outbound_node")] = "_socks"}) +o:depends({ [option_name("outbound_node")] = "_http"}) o = s:option(Value, option_name("outbound_node_port"), translate("Port")) o.datatype = "port" -add_v2ray_depends(o, { [option_name("outbound_node")] = "_socks"}) -add_v2ray_depends(o, { [option_name("outbound_node")] = "_http"}) -add_xray_depends(o, { [option_name("outbound_node")] = "_socks"}) -add_xray_depends(o, { [option_name("outbound_node")] = "_http"}) +o:depends({ [option_name("outbound_node")] = "_socks"}) +o:depends({ [option_name("outbound_node")] = "_http"}) o = s:option(Value, option_name("outbound_node_username"), translate("Username")) -add_v2ray_depends(o, { [option_name("outbound_node")] = "_socks"}) -add_v2ray_depends(o, { [option_name("outbound_node")] = "_http"}) -add_xray_depends(o, { [option_name("outbound_node")] = "_socks"}) -add_xray_depends(o, { [option_name("outbound_node")] = "_http"}) +o:depends({ [option_name("outbound_node")] = "_socks"}) +o:depends({ [option_name("outbound_node")] = "_http"}) o = s:option(Value, option_name("outbound_node_password"), translate("Password")) o.password = true -add_v2ray_depends(o, { [option_name("outbound_node")] = "_socks"}) -add_v2ray_depends(o, { [option_name("outbound_node")] = "_http"}) -add_xray_depends(o, { [option_name("outbound_node")] = "_socks"}) -add_xray_depends(o, { [option_name("outbound_node")] = "_http"}) +o:depends({ [option_name("outbound_node")] = "_socks"}) +o:depends({ [option_name("outbound_node")] = "_http"}) o = s:option(Value, option_name("outbound_node_iface"), translate("Interface")) o.default = "eth1" -add_v2ray_depends(o, { [option_name("outbound_node")] = "_iface"}) -add_xray_depends(o, { [option_name("outbound_node")] = "_iface"}) +o:depends({ [option_name("outbound_node")] = "_iface"}) o = s:option(Flag, option_name("log"), translate("Log")) o.default = "1" o.rmempty = false -add_v2ray_depends(o) -add_xray_depends(o) o = s:option(ListValue, option_name("loglevel"), translate("Log Level")) o.default = "warning" @@ -517,8 +389,7 @@ o:value("debug") o:value("info") o:value("warning") o:value("error") -add_v2ray_depends(o, { [option_name("log")] = true }) -add_xray_depends(o, { [option_name("log")] = true }) +o:depends({ [option_name("log")] = true }) for key, value in pairs(s.fields) do if key:find(option_prefix) == 1 then diff --git a/luci-app-passwall/luasrc/passwall/api.lua b/luci-app-passwall/luasrc/passwall/api.lua index dfb5cda2c..e8c27f2a5 100644 --- a/luci-app-passwall/luasrc/passwall/api.lua +++ b/luci-app-passwall/luasrc/passwall/api.lua @@ -298,7 +298,7 @@ function get_valid_nodes() local address = e.address if is_ip(address) or datatypes.hostname(address) then local type = e.type - if (type == "sing-box" or type == "V2ray" or type == "Xray") and e.protocol then + if (type == "sing-box" or type == "Xray") and e.protocol then local protocol = e.protocol if protocol == "vmess" then protocol = "VMess" @@ -330,7 +330,7 @@ function get_node_remarks(n) remarks = "%s:[%s] " % {n.type .. " " .. i18n.translatef(n.protocol), n.remarks} else local type2 = n.type - if (n.type == "sing-box" or n.type == "V2ray" or n.type == "Xray") and n.protocol then + if (n.type == "sing-box" or n.type == "Xray") and n.protocol then local protocol = n.protocol if protocol == "vmess" then protocol = "VMess" diff --git a/luci-app-passwall/luasrc/passwall/com.lua b/luci-app-passwall/luasrc/passwall/com.lua index a7f33c885..c5aba09e1 100644 --- a/luci-app-passwall/luasrc/passwall/com.lua +++ b/luci-app-passwall/luasrc/passwall/com.lua @@ -63,13 +63,13 @@ _M.singbox = { } } -_M.v2ray = { - name = "V2ray", - repo = "v2fly/v2ray-core", +_M.xray = { + name = "Xray", + repo = "XTLS/Xray-core", get_url = gh_pre_release_url, cmd_version = "version | awk '{print $2}' | sed -n 1P", zipped = true, - default_path = "/usr/bin/v2ray", + default_path = "/usr/bin/xray", match_fmt_str = "linux%%-%s", file_tree = { x86_64 = "64", @@ -79,17 +79,6 @@ _M.v2ray = { } } -_M.xray = { - name = "Xray", - repo = "XTLS/Xray-core", - get_url = gh_pre_release_url, - cmd_version = _M.v2ray.cmd_version, - zipped = true, - default_path = "/usr/bin/xray", - match_fmt_str = _M.v2ray.match_fmt_str, - file_tree = _M.v2ray.file_tree -} - _M["chinadns-ng"] = { name = "ChinaDNS-NG", repo = "zfl9/chinadns-ng", diff --git a/luci-app-passwall/luasrc/passwall/server_app.lua b/luci-app-passwall/luasrc/passwall/server_app.lua index 4b63f6a18..1b3cdfafe 100644 --- a/luci-app-passwall/luasrc/passwall/server_app.lua +++ b/luci-app-passwall/luasrc/passwall/server_app.lua @@ -143,9 +143,6 @@ local function start() elseif type == "sing-box" then config = require(require_dir .. "util_sing-box").gen_config_server(user) bin = ln_run(api.get_app_path("singbox"), "sing-box", "run -c " .. config_file, log_path) - elseif type == "V2ray" then - config = require(require_dir .. "util_xray").gen_config_server(user) - bin = ln_run(api.get_app_path("v2ray"), "v2ray", "run -c " .. config_file, log_path) elseif type == "Xray" then config = require(require_dir .. "util_xray").gen_config_server(user) bin = ln_run(api.get_app_path("xray"), "xray", "run -c " .. config_file, log_path) diff --git a/luci-app-passwall/luasrc/passwall/util_xray.lua b/luci-app-passwall/luasrc/passwall/util_xray.lua index 69a51b015..f26dbf14c 100644 --- a/luci-app-passwall/luasrc/passwall/util_xray.lua +++ b/luci-app-passwall/luasrc/passwall/util_xray.lua @@ -47,8 +47,8 @@ function gen_outbound(flag, node, tag, proxy_table) proxy_tag = proxy_table.tag or "nil" end - if node.type == "V2ray" or node.type == "Xray" then - if node.type == "Xray" and node.flow == "xtls-rprx-vision" then + if node.type == "Xray" then + if node.flow == "xtls-rprx-vision" then else proxy = 0 if proxy_tag ~= "nil" then @@ -60,7 +60,7 @@ function gen_outbound(flag, node, tag, proxy_table) end end - if node.type ~= "V2ray" and node.type ~= "Xray" then + if node.type ~= "Xray" then if node.type == "Socks" then node.protocol = "socks" node.transport = "tcp" @@ -91,7 +91,7 @@ function gen_outbound(flag, node, tag, proxy_table) node.stream_security = "none" end - if node.type == "V2ray" or node.type == "Xray" then + if node.type == "Xray" then if node.tls and node.tls == "1" then node.stream_security = "tls" if node.type == "Xray" and node.reality and node.reality == "1" then @@ -762,7 +762,7 @@ function gen_config(var) else if proxy then local pre_proxy = nil - if _node.type ~= "V2ray" and _node.type ~= "Xray" then + if _node.type ~= "Xray" then pre_proxy = true end if _node.type == "Xray" and _node.flow == "xtls-rprx-vision" then diff --git a/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm b/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm index 3f31d88df..d0ae5f273 100644 --- a/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm +++ b/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm @@ -2,7 +2,6 @@ <% local api = require "luci.passwall.api" local has_singbox = api.finded_com("singbox") -local has_v2ray = api.finded_com("v2ray") local has_xray = api.finded_com("xray") -%>