|
@@ -1,5 +1,7 @@
|
|
|
|
+local m, s, o
|
|
local uci = luci.model.uci.cursor()
|
|
local uci = luci.model.uci.cursor()
|
|
local server_table = {}
|
|
local server_table = {}
|
|
|
|
+local type_table = {}
|
|
local function is_finded(e)
|
|
local function is_finded(e)
|
|
return luci.sys.exec('type -t -p "%s"' % e) ~= "" and true or false
|
|
return luci.sys.exec('type -t -p "%s"' % e) ~= "" and true or false
|
|
end
|
|
end
|
|
@@ -10,6 +12,9 @@ uci:foreach("shadowsocksr", "servers", function(s)
|
|
elseif s.server and s.server_port then
|
|
elseif s.server and s.server_port then
|
|
server_table[s[".name"]] = "[%s]:%s:%s" % {string.upper(s.v2ray_protocol or s.type), s.server, s.server_port}
|
|
server_table[s[".name"]] = "[%s]:%s:%s" % {string.upper(s.v2ray_protocol or s.type), s.server, s.server_port}
|
|
end
|
|
end
|
|
|
|
+ if s.type then
|
|
|
|
+ type_table[s[".name"]] = s.type
|
|
|
|
+ end
|
|
end)
|
|
end)
|
|
|
|
|
|
local key_table = {}
|
|
local key_table = {}
|
|
@@ -135,7 +140,7 @@ o.default = "https://raw.githubusercontent.com/neodevpro/neodevhost/master/lite_
|
|
o:depends("adblock", "1")
|
|
o:depends("adblock", "1")
|
|
o.description = translate("Support AdGuardHome and DNSMASQ format list")
|
|
o.description = translate("Support AdGuardHome and DNSMASQ format list")
|
|
|
|
|
|
-o = s:option(Button, "reset", translate("Reset to defaults"))
|
|
|
|
|
|
+o = s:option(Button, "Reset", translate("Reset to defaults"))
|
|
o.inputstyle = "reload"
|
|
o.inputstyle = "reload"
|
|
o.write = function()
|
|
o.write = function()
|
|
luci.sys.call("/etc/init.d/shadowsocksr reset")
|
|
luci.sys.call("/etc/init.d/shadowsocksr reset")
|
|
@@ -146,15 +151,82 @@ end
|
|
s = m:section(TypedSection, "socks5_proxy", translate("Global SOCKS5 Proxy Server"))
|
|
s = m:section(TypedSection, "socks5_proxy", translate("Global SOCKS5 Proxy Server"))
|
|
s.anonymous = true
|
|
s.anonymous = true
|
|
|
|
|
|
|
|
+-- Enable/Disable Option
|
|
|
|
+o = s:option(Flag, "enabled", translate("Enable"))
|
|
|
|
+o.default = 0
|
|
|
|
+o.rmempty = false
|
|
|
|
+
|
|
|
|
+-- Server Selection
|
|
o = s:option(ListValue, "server", translate("Server"))
|
|
o = s:option(ListValue, "server", translate("Server"))
|
|
-o:value("nil", translate("Disable"))
|
|
|
|
o:value("same", translate("Same as Global Server"))
|
|
o:value("same", translate("Same as Global Server"))
|
|
for _, key in pairs(key_table) do
|
|
for _, key in pairs(key_table) do
|
|
- o:value(key, server_table[key])
|
|
|
|
|
|
+ o:value(key, server_table[key])
|
|
|
|
+end
|
|
|
|
+o.default = "same"
|
|
|
|
+o.rmempty = false
|
|
|
|
+
|
|
|
|
+-- Dynamic value handling based on enabled/disabled state
|
|
|
|
+o.cfgvalue = function(self, section)
|
|
|
|
+ local enabled = m:get(section, "enabled")
|
|
|
|
+ if enabled == "0" then
|
|
|
|
+ return m:get(section, "old_server") or "same"
|
|
|
|
+ end
|
|
|
|
+ return Value.cfgvalue(self, section) or "same" -- Default to `same` when enabled
|
|
|
|
+end
|
|
|
|
+
|
|
|
|
+o.write = function(self, section, value)
|
|
|
|
+ local enabled = m:get(section, "enabled")
|
|
|
|
+ if enabled == "0" then
|
|
|
|
+ local old_server = Value.cfgvalue(self, section) or "same"
|
|
|
|
+ if old_server ~= "nil" then
|
|
|
|
+ m:set(section, "old_server", old_server)
|
|
|
|
+ end
|
|
|
|
+ m:set(section, "server", "nil")
|
|
|
|
+ else
|
|
|
|
+ m:del(section, "old_server")
|
|
|
|
+ -- Write the value normally when enabled
|
|
|
|
+ Value.write(self, section, value)
|
|
|
|
+ end
|
|
|
|
+end
|
|
|
|
+
|
|
|
|
+-- Socks Auth
|
|
|
|
+if is_finded("xray") then
|
|
|
|
+o = s:option(ListValue, "socks5_auth", translate("Socks5 Auth Mode"), translate("Socks protocol auth methods, default:noauth."))
|
|
|
|
+o.default = "noauth"
|
|
|
|
+o:value("noauth", "NOAUTH")
|
|
|
|
+o:value("password", "PASSWORD")
|
|
|
|
+o.rmempty = true
|
|
|
|
+for key, server_type in pairs(type_table) do
|
|
|
|
+ if server_type == "v2ray" then
|
|
|
|
+ -- 如果服务器类型是 v2ray,则设置依赖项显示
|
|
|
|
+ o:depends("server", key)
|
|
|
|
+ end
|
|
end
|
|
end
|
|
-o.default = "nil"
|
|
|
|
|
|
+
|
|
|
|
+-- Socks User
|
|
|
|
+o = s:option(Value, "socks5_user", translate("Socks5 User"), translate("Only when auth is password valid, Mandatory."))
|
|
|
|
+o.rmempty = true
|
|
|
|
+o:depends("socks5_auth", "password")
|
|
|
|
+
|
|
|
|
+-- Socks Password
|
|
|
|
+o = s:option(Value, "socks5_pass", translate("Socks5 Password"), translate("Only when auth is password valid, Not mandatory."))
|
|
|
|
+o.password = true
|
|
|
|
+o.rmempty = true
|
|
|
|
+o:depends("socks5_auth", "password")
|
|
|
|
+
|
|
|
|
+-- Socks Mixed
|
|
|
|
+o = s:option(Flag, "socks5_mixed", translate("Enabled Mixed"), translate("Mixed as an alias of socks, default:Enabled."))
|
|
|
|
+o.default = "1"
|
|
o.rmempty = false
|
|
o.rmempty = false
|
|
|
|
+for key, server_type in pairs(type_table) do
|
|
|
|
+ if server_type == "v2ray" then
|
|
|
|
+ -- 如果服务器类型是 v2ray,则设置依赖项显示
|
|
|
|
+ o:depends("server", key)
|
|
|
|
+ end
|
|
|
|
+end
|
|
|
|
+end
|
|
|
|
|
|
|
|
+-- Local Port
|
|
o = s:option(Value, "local_port", translate("Local Port"))
|
|
o = s:option(Value, "local_port", translate("Local Port"))
|
|
o.datatype = "port"
|
|
o.datatype = "port"
|
|
o.default = 1080
|
|
o.default = 1080
|
|
@@ -171,6 +243,7 @@ o.default = 0
|
|
o = s:option(ListValue, "fragment_packets", translate("Fragment Packets"), translate("\"1-3\" is for segmentation at TCP layer, applying to the beginning 1 to 3 data writes by the client. \"tlshello\" is for TLS client hello packet fragmentation."))
|
|
o = s:option(ListValue, "fragment_packets", translate("Fragment Packets"), translate("\"1-3\" is for segmentation at TCP layer, applying to the beginning 1 to 3 data writes by the client. \"tlshello\" is for TLS client hello packet fragmentation."))
|
|
o.default = "tlshello"
|
|
o.default = "tlshello"
|
|
o:value("tlshello", "tlshello")
|
|
o:value("tlshello", "tlshello")
|
|
|
|
+o:value("1-1", "1-1")
|
|
o:value("1-2", "1-2")
|
|
o:value("1-2", "1-2")
|
|
o:value("1-3", "1-3")
|
|
o:value("1-3", "1-3")
|
|
o:value("1-5", "1-5")
|
|
o:value("1-5", "1-5")
|