Browse Source

luci-app-ssr-plus: Fix `SS` node fails to import plug-ins.

zxlhhyccc 7 tháng trước cách đây
mục cha
commit
375556da6f

+ 8 - 3
luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua

@@ -279,8 +279,13 @@ o.rmempty = true
 o:depends({type = "v2ray", v2ray_protocol = "shadowsocks"})
 o.default = "1"
 
+-- [[ Enable Shadowsocks Plugin ]]--
+o = s:option(Flag, "enable_plugin", translate("Enable Plugin"))
+o.rmempty = true
+o.default = "0"
+
 -- Shadowsocks Plugin
-o = s:option(Value, "plugin", translate("Obfs"))
+o = s:option(ListValue, "plugin", translate("Obfs"))
 o:value("none", translate("None"))
 if is_finded("obfs-local") then
 	o:value("obfs-local", translate("obfs-local"))
@@ -292,11 +297,11 @@ if is_finded("xray-plugin") then
 	o:value("xray-plugin", translate("xray-plugin"))
 end
 o.rmempty = true
-o:depends("type", "ss")
+o:depends({type = "ss", enable_plugin = true})
 
 o = s:option(Value, "plugin_opts", translate("Plugin Opts"))
 o.rmempty = true
-o:depends("type", "ss")
+o:depends({type = "ss", enable_plugin = true})
 
 o = s:option(ListValue, "protocol", translate("Protocol"))
 for _, v in ipairs(protocol) do

+ 21 - 10
luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm

@@ -137,13 +137,16 @@ function import_ssr_url(btn, urlname, sid) {
 				var serverInfo = temp[0].split(":");
 				var server = serverInfo[0];
 				var port = serverInfo[1].replace("/","");
-				var method, password, plugin, pluginOpts;
+				var method, password, enable_plugin, plugin, pluginOpts;
 				if (temp[1]) {
 					var pluginInfo = decodeURIComponent(temp[1]);
-					var pluginIndex = pluginInfo.indexOf(";");
-					var pluginNameInfo = pluginInfo.substr(0, pluginIndex);
-					plugin = pluginNameInfo.substr(pluginNameInfo.indexOf("=") + 1);
-					pluginOpts = pluginInfo.substr(pluginIndex + 1);
+					// 使用正則匹配 plugin 參數
+					var pluginNameInfo = pluginInfo.match(/plugin=([^&]+)/);
+					if (pluginNameInfo) {
+						var pluginParams = pluginNameInfo[1].split(";");
+						plugin = pluginParams.shift(); // 获取 plugin
+						pluginOpts = pluginParams.length > 0 ? pluginParams.join(";") : "";
+					}
 				}
 				var userInfoSplitIndex = userInfo.indexOf(":");
 				if (userInfoSplitIndex != -1) {
@@ -156,12 +159,19 @@ function import_ssr_url(btn, urlname, sid) {
 				document.getElementsByName('cbid.shadowsocksr.' + sid + '.server_port')[0].value = port;
 				document.getElementsByName('cbid.shadowsocksr.' + sid + '.password')[0].value = password || "";
 				document.getElementsByName('cbid.shadowsocksr.' + sid + '.encrypt_method_ss')[0].value = method || "";
-				document.getElementsByName('cbid.shadowsocksr.' + sid + '.plugin')[0].value = plugin || "none";
-				document.getElementsByName('cbid.shadowsocksr.' + sid + '.plugin')[0].dispatchEvent(event);
-				if (plugin != undefined) {
-				document.getElementsByName('cbid.shadowsocksr.' + sid + '.plugin_opts')[0].value = pluginOpts || "";
+				if (plugin && plugin !== "none") {
+					document.getElementsByName('cbid.shadowsocksr.' + sid + '.enable_plugin')[0].checked = true; // 设置 enable_plugin 为 true
+					document.getElementsByName('cbid.shadowsocksr.' + sid + '.enable_plugin')[0].dispatchEvent(event); // 触发事件
+
+					document.getElementsByName('cbid.shadowsocksr.' + sid + '.plugin')[0].value = plugin || "none";
+					document.getElementsByName('cbid.shadowsocksr.' + sid + '.plugin')[0].dispatchEvent(event);
+					if (plugin !== undefined) {
+						document.getElementsByName('cbid.shadowsocksr.' + sid + '.plugin_opts')[0].value = pluginOpts || "";
+					}
+				} else {
+					document.getElementsByName('cbid.shadowsocksr.' + sid + '.enable_plugin')[0].checked = false;
 				}
-				if (param != undefined) {
+				if (param !== undefined) {
 					document.getElementsByName('cbid.shadowsocksr.' + sid + '.alias')[0].value = decodeURI(param);
 				}
 				s.innerHTML = "<font style=\'color:green\'><%:Import configuration information successfully.%></font>";
@@ -518,3 +528,4 @@ function import_ssr_url(btn, urlname, sid) {
 <input type="button" class="btn cbi-button cbi-button-apply" value="<%:Import%>" onclick="return import_ssr_url(this, '<%=self.option%>', '<%=self.value%>')" />
 <span id="<%=self.option%>-status"></span>
 <%+cbi/valuefooter%>
+

+ 3 - 0
luci-app-ssr-plus/po/zh_Hans/ssr-plus.po

@@ -843,6 +843,9 @@ msgstr "修改订阅 URL 和节点关键字后,请先点击更新"
 msgid "Update All Subscribe Servers"
 msgstr "更新所有订阅服务器节点"
 
+msgid "Enable Plugin"
+msgstr "启用插件"
+
 msgid "Plugin"
 msgstr "插件"
 

+ 1 - 1
luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua

@@ -579,7 +579,7 @@ function config:handleIndex(index)
 	local switch = {
 		ss = function()
 			ss.protocol = socks_port
-			if server.plugin and server.plugin ~= "none" then
+			if server.enable_plugin == "1" and server.plugin and server.plugin ~= "none" then
 				ss.plugin = server.plugin
 				ss.plugin_opts = server.plugin_opts or nil
 			end

+ 4 - 0
luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua

@@ -302,6 +302,10 @@ local function processData(szType, content)
 				if result.plugin == "simple-obfs" then
 					result.plugin = "obfs-local"
 				end
+				-- 如果插件不為 none,確保 enable_plugin 為 1
+				if result.plugin ~= "none" and result.plugin ~= "" then
+					result.enable_plugin = 1
+				end
 			end
 		else
 			result.server_port = host[2]:gsub("/","")