浏览代码

luci-app-ssr-plus: Fix import configuration and subscribe.

zxlhhyccc 2 天之前
父节点
当前提交
3e79998407

+ 59 - 38
luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm

@@ -132,12 +132,6 @@ function import_ssr_url(btn, urlname, sid) {
 				document.getElementsByName('cbid.shadowsocksr.' + sid + '.v2ray_protocol')[0].value = (ssu[0] === "hy2") ? "hysteria2" : ssu[0];
 				document.getElementsByName('cbid.shadowsocksr.' + sid + '.v2ray_protocol')[0].dispatchEvent(event);
 
-				if (params.get("pcs")) {
-					document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls_CertSha')[0].value = params.get("pcs") || "";
-				}
-				if (params.get("vcn")) {
-					document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls_CertByName')[0].value = params.get("vcn") || "";
-				}
 				document.getElementsByName('cbid.shadowsocksr.' + sid + '.alias')[0].value = url.hash ? decodeURIComponent(url.hash.slice(1)) : "";
 			}
 			document.getElementsByName('cbid.shadowsocksr.' + sid + '.server')[0].value = url.hostname;
@@ -165,8 +159,9 @@ function import_ssr_url(btn, urlname, sid) {
 			document.getElementsByName('cbid.shadowsocksr.' + sid + '.obfs_type')[0].value = params.get("obfs");
 			document.getElementsByName('cbid.shadowsocksr.' + sid + '.salamander')[0].value = params.get("obfs-password") || params.get("obfs_password");
 			}
-			if (params.get("security") === "tls" || params.get("sni") || params.get("alpn")) {
-				document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls')[0].checked = true; // 设置 flag_obfs 为 true
+			if (params.get("security") === "tls" || params.get("sni") || params.get("alpn") 
+					|| (xray_hy2_type !== "hysteria2" && (params.get("pcs") || params.get("vcn")))) {
+				document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls')[0].checked = true; // 设置 tls 为 true
 				document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls')[0].dispatchEvent(event); // 触发事件
 				if (params.get("sni")) {
 					document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls_host')[0].value = params.get("sni") || "";
@@ -174,10 +169,20 @@ function import_ssr_url(btn, urlname, sid) {
 				if (params.get("alpn")) {
 					document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls_alpn')[0].value = params.get("alpn") || "";
 				}
+				if (xray_hy2_type !== "hysteria2") {
+					if (params.get("pcs")) {
+						document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls_CertSha')[0].value = params.get("pcs") || "";
+					}
+					if (params.get("vcn")) {
+						document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls_CertByName')[0].value = params.get("vcn") || "";
+					}
+				}
+			}
+			var allowInsecureValue = params.get("allowInsecure") || params.get("insecure");
+			if (allowInsecureValue === "1" || allowInsecureValue === "true") {
+				document.getElementsByName('cbid.shadowsocksr.' + sid + '.insecure')[0].checked = true; // 设置 insecure 为 true
+				document.getElementsByName('cbid.shadowsocksr.' + sid + '.insecure')[0].dispatchEvent(event); // 触发事件
 			}
-			document.getElementsByName('cbid.shadowsocksr.' + sid + '.insecure')[0].checked =
-				!!(params.get("insecure") ?? params.get("allowInsecure")); // 设置 insecure 为 true
-			document.getElementsByName('cbid.shadowsocksr.' + sid + '.insecure')[0].dispatchEvent(event); // 触发事件
 
 			s.innerHTML = "<font style=\'color:green\'><%:Import configuration information successfully.%></font>";
 			return false;
@@ -389,10 +394,17 @@ function import_ssr_url(btn, urlname, sid) {
 							dispatchEventIfExists('cbid.shadowsocksr.' + sid + '.enable_ech', event); // 触发事件
 							setElementValue('cbid.shadowsocksr.' + sid + '.ech_config', params.ech || "");
 						}
-						if (params.allowInsecure === "1") {
+						var allowInsecureValue = params.allowInsecure || params.insecure;
+						if (allowInsecureValue === "1" || allowInsecureValue === "true") {
 							setElementValue('cbid.shadowsocksr.' + sid + '.insecure', true); // 设置 insecure 为 true
 							dispatchEventIfExists('cbid.shadowsocksr.' + sid + '.insecure', event); // 触发事件
 						}
+						if (params.pcs && params.pcs.trim() !== "") {
+							setElementValue('cbid.shadowsocksr.' + sid + '.tls_CertSha', params.pcs);
+						}
+						if (params.vcn && params.vcn.trim() !== "") {
+							setElementValue('cbid.shadowsocksr.' + sid + '.tls_CertByName', params.vcn);
+						}
 					}
 					if (params.security === "reality") {
 						setElementValue('cbid.shadowsocksr.' + sid + '.reality_publickey', params.pbk ? decodeURIComponent(params.pbk) : "");
@@ -404,12 +416,6 @@ function import_ssr_url(btn, urlname, sid) {
 							setElementValue('cbid.shadowsocksr.' + sid + '.reality_mldsa65verify', params.pqv || "");
 						}
 					}
-					if (params.pcs && params.pcs.trim() !== "") {
-						setElementValue('cbid.shadowsocksr.' + sid + '.tls_CertSha', params.pcs);
-					}
-					if (params.vcn && params.vcn.trim() !== "") {
-						setElementValue('cbid.shadowsocksr.' + sid + '.tls_CertByName', params.vcn);
-					}
 					setElementValue('cbid.shadowsocksr.' + sid + '.tls_flow', params.flow || "none");
 					dispatchEventIfExists('cbid.shadowsocksr.' + sid + '.tls_flow', event);
 
@@ -527,10 +533,13 @@ function import_ssr_url(btn, urlname, sid) {
 				document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls')[0].checked = true;
 				document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls')[0].dispatchEvent(event);
 				document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls_host')[0].value = params.get("peer") || params.get("sni");
-				if (params.get("allowInsecure") === "1") {
+
+				var allowInsecureValue = params.get("allowInsecure") || params.get("allowinsecure") || params.get("insecure");
+				if (allowInsecureValue === "1" || allowInsecureValue === "true") {
 					document.getElementsByName('cbid.shadowsocksr.' + sid + '.insecure')[0].checked = true; // 设置 insecure 为 true
 					document.getElementsByName('cbid.shadowsocksr.' + sid + '.insecure')[0].dispatchEvent(event); // 触发事件
 				}
+
 				if (params.get("tfo") === "1") {
 					document.getElementsByName('cbid.shadowsocksr.' + sid + '.fast_open')[0].checked = true; // 设置 fast_open 为 true
 					document.getElementsByName('cbid.shadowsocksr.' + sid + '.fast_open')[0].dispatchEvent(event); // 触发事件
@@ -551,10 +560,7 @@ function import_ssr_url(btn, urlname, sid) {
 				document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls')[0].checked = true;
 				document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls')[0].dispatchEvent(event);
 				document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls_host')[0].value = params.get("sni");
-				if (params.get("allowInsecure") === "1") {
-					document.getElementsByName('cbid.shadowsocksr.' + sid + '.insecure')[0].checked = true; // 设置 insecure 为 true
-					document.getElementsByName('cbid.shadowsocksr.' + sid + '.insecure')[0].dispatchEvent(event); // 触发事件
-				}
+
 				if (params.get("ech") && params.get("ech").trim() !== "") {
 					document.getElementsByName('cbid.shadowsocksr.' + sid + '.enable_ech')[0].checked = true; // 设置 enable_ech 为 true
 					document.getElementsByName('cbid.shadowsocksr.' + sid + '.enable_ech')[0].dispatchEvent(event); // 触发事件
@@ -569,6 +575,13 @@ function import_ssr_url(btn, urlname, sid) {
 				if (params.get("security") === "tls") {
 					document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls_alpn')[0].value = params.get("alpn") || "";
 					document.getElementsByName('cbid.shadowsocksr.' + sid + '.fingerprint')[0].value = params.get("fp") || "";
+
+					var allowInsecureValue = params.get("allowInsecure") || params.get("insecure");
+					if (allowInsecureValue === "1" || allowInsecureValue === "true") {
+						document.getElementsByName('cbid.shadowsocksr.' + sid + '.insecure')[0].checked = true; // 设置 insecure 为 true
+						document.getElementsByName('cbid.shadowsocksr.' + sid + '.insecure')[0].dispatchEvent(event); // 触发事件
+					}
+
 					if (params.get("pcs") && params.get("pcs").trim() !== "") {
 						document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls_CertSha')[0].value = params.get("pcs");
 					}
@@ -710,15 +723,17 @@ function import_ssr_url(btn, urlname, sid) {
 					document.getElementsByName('cbid.shadowsocksr.' + sid + '.enable_ech')[0].dispatchEvent(event); // 触发事件
 					document.getElementsByName('cbid.shadowsocksr.' + sid + '.ech_config')[0].value = ssm.ech;
 				}
-				if (params.pcs && params.pcs.trim() !== "") {
+				if (ssm.pcs && ssm.pcs.trim() !== "") {
 					document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls_CertSha')[0].value = ssm.pcs;
 				}
-				if (params.vcn && params.vcn.trim() !== "") {
+				if (ssm.vcn && ssm.vcn.trim() !== "") {
 					document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls_CertByName')[0].value = ssm.vcn;
 				}
-				document.getElementsByName('cbid.shadowsocksr.' + sid + '.insecure')[0].checked =
-					!!(ssm.allowInsecure ?? ssm.allowlnsecure ?? ssm['skip-cert-verify']); // 设置 insecure 为 true
-				document.getElementsByName('cbid.shadowsocksr.' + sid + '.insecure')[0].dispatchEvent(event); // 触发事件
+				var allowInsecureValue = ssm.allowInsecure || ssm.allowlnsecure || ssm['skip-cert-verify'];
+				if (allowInsecureValue === "1" || allowInsecureValue === "true") {						
+					document.getElementsByName('cbid.shadowsocksr.' + sid + '.insecure')[0].checked = true; // 设置 insecure 为 true
+					document.getElementsByName('cbid.shadowsocksr.' + sid + '.insecure')[0].dispatchEvent(event); // 触发事件
+				}
 			}
 			if (ssm.mux !== undefined) {
 				document.getElementsByName('cbid.shadowsocksr.' + sid + '.mux')[0].checked = true;
@@ -778,7 +793,8 @@ function import_ssr_url(btn, urlname, sid) {
 				setElementValue('cbid.shadowsocksr.' + sid + '.' + params.get("security"), true);
 				dispatchEventIfExists('cbid.shadowsocksr.' + sid + '.' + params.get("security"), event);
 
-				if (params.get("allowInsecure") === "1") {
+				var allowInsecureValue = params.get("allowInsecure") || params.get("insecure");
+				if (allowInsecureValue === "1" || allowInsecureValue === "true") {
 					setElementValue('cbid.shadowsocksr.' + sid + '.insecure', true); // 设置 insecure 为 true
 					dispatchEventIfExists('cbid.shadowsocksr.' + sid + '.insecure', event); // 触发事件
 				}
@@ -789,6 +805,12 @@ function import_ssr_url(btn, urlname, sid) {
 						dispatchEventIfExists('cbid.shadowsocksr.' + sid + '.enable_ech', event); // 触发事件
 						setElementValue('cbid.shadowsocksr.' + sid + '.ech_config', params.get("ech") || "");
 					}
+					if (params.get("pcs") && params.get("pcs").trim() !== "") {
+						setElementValue('cbid.shadowsocksr.' + sid + '.tls_CertSha', params.get("pcs"));
+					}
+					if (params.get("vcn") && params.get("vcn").trim() !== "") {
+						setElementValue('cbid.shadowsocksr.' + sid + '.tls_CertByName', params.get("vcn"));
+					}
 				}
 				if (params.get("security") === "reality") {
 					setElementValue('cbid.shadowsocksr.' + sid + '.reality_publickey', params.get("pbk") ? decodeURIComponent(params.get("pbk")) : "");
@@ -800,12 +822,6 @@ function import_ssr_url(btn, urlname, sid) {
 						setElementValue('cbid.shadowsocksr.' + sid + '.reality_mldsa65verify', params.get("pqv") || "");
 					}
 				}
-				if (params.get("pcs") && params.get("pcs").trim() !== "") {
-					setElementValue('cbid.shadowsocksr.' + sid + '.tls_CertSha', params.get("pcs"));
-				}
-				if (params.get("vcn") && params.get("vcn").trim() !== "") {
-					setElementValue('cbid.shadowsocksr.' + sid + '.tls_CertByName', params.get("vcn"));
-				}
 
 				setElementValue('cbid.shadowsocksr.' + sid + '.tls_alpn', params.get("alpn") || "");
 				setElementValue('cbid.shadowsocksr.' + sid + '.fingerprint', params.get("fp") || "");
@@ -839,6 +855,7 @@ function import_ssr_url(btn, urlname, sid) {
 				break;
 			case "kcp":
 				setElementValue('cbid.shadowsocksr.' + sid + '.kcp_guise', params.get("headerType") || "none");
+				dispatchEventIfExists('cbid.shadowsocksr.' + sid + '.kcp_guise', event); 
 				setElementValue('cbid.shadowsocksr.' + sid + '.seed', params.get("seed") || "");
 				break;
 			case "http":
@@ -936,9 +953,13 @@ function import_ssr_url(btn, urlname, sid) {
 					document.getElementsByName('cbid.shadowsocksr.' + sid + '.ipstack_prefer')[0].value = params.ipstack_prefer || "";
 				}
 			}
-			document.getElementsByName('cbid.shadowsocksr.' + sid + '.insecure')[0].checked =
-				!!(params.allowInsecure ?? params.allowlnsecure ?? params.insecure); // 设置 insecure 为 true
-			document.getElementsByName('cbid.shadowsocksr.' + sid + '.insecure')[0].dispatchEvent(event); // 触发事件
+
+			var allowInsecureValue = params.allowInsecure || params.allowlnsecure || params.insecure;
+			if (allowInsecureValue === "1" || allowInsecureValue === "true") {			
+				document.getElementsByName('cbid.shadowsocksr.' + sid + '.insecure')[0].checked = true; // 设置 insecure 为 true
+				document.getElementsByName('cbid.shadowsocksr.' + sid + '.insecure')[0].dispatchEvent(event); // 触发事件
+			}
+
 			if (param != undefined) {
 				document.getElementsByName('cbid.shadowsocksr.' + sid + '.alias')[0].value = decodeURIComponent(param);
 			}

+ 57 - 31
luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua

@@ -230,12 +230,6 @@ local function processData(szType, content)
 			end
 		else
 			result.v2ray_protocol = has_xray_hy2_type
-			if params.pcs then
-				result.tls_CertSha = params.pcs
-			end
-			if params.vcn then
-				result.tls_CertByName = params.vcn
-			end
 		end
 
 		result.alias = url.fragment and UrlDecode(url.fragment) or nil
@@ -256,7 +250,10 @@ local function processData(szType, content)
 			result.obfs_type = params.obfs
 			result.salamander = params["obfs-password"] or params["obfs_password"]
 		end
-		if (params.security and params.security == "tls") or (params.sni and params.sni ~= "") or (params.alpn and params.alpn ~= "") then
+		if (params.security and params.security:lower() == "tls")
+				or (params.sni and params.sni ~= "")
+				or (params.alpn and params.alpn ~= "")
+				or (xray_hy2_type == "hysteria2" and (params.pcs or params.vcn)) then
 			result.tls = "1"
 			if params.sni then
 				result.tls_host = params.sni
@@ -266,11 +263,24 @@ local function processData(szType, content)
 				for v in params.alpn:gmatch("[^,;|%s]+") do
 					table.insert(alpn, v)
 				end
-				result.tls_alpn = alpn
+				if #alpn > 0 then
+					result.tls_alpn = alpn
+				end
+			end
+			if xray_hy2_type ~= "hysteria2" then
+				if params.pcs then
+					result.tls_CertSha = params.pcs
+				end
+				if params.vcn then
+					result.tls_CertByName = params.vcn
+				end
 			end
 		end
-		if params.insecure == "1" then
-			result.insecure = params.insecure
+		if params.allowInsecure or params.insecure then
+			local insecure = params.allowInsecure or params.insecure
+			if insecure == true or insecure == "1" or insecure == "true" then
+				result.insecure = "1"
+			end
 		end
 	elseif szType == 'ssr' then
 		-- 去掉前后空白和#注释
@@ -416,7 +426,9 @@ local function processData(szType, content)
 				for v in info.alpn:gmatch("[^,]+") do
 					table.insert(alpn, v)
 				end
-				result.tls_alpn = alpn
+				if #alpn > 0 then
+					result.tls_alpn = alpn
+				end
 			end
 			if info.sni and info.sni ~= "" then
 				result.tls_host = info.sni
@@ -443,10 +455,6 @@ local function processData(szType, content)
 		else
 			result.tls = "0"
 		end
-		-- 其它可选安全字段
-		if info.security then
-			result.security = info.security
-		end
 	elseif szType == "ss" then
 		local idx_sp = content:find("#") or 0
 		local alias = ""
@@ -643,7 +651,9 @@ local function processData(szType, content)
 				for v in params.alpn:gmatch("[^,;|%s]+") do
 					table.insert(alpn, v)
 				end
-				result.tls_alpn = params.alpn
+				if #alpn > 0 then
+					result.tls_alpn = params.alpn
+				end
 			end
 			if params.pcs and params.pcs ~= "" then
 				result.tls_CertSha = params.pcs
@@ -668,6 +678,12 @@ local function processData(szType, content)
 				result.enable_mldsa65verify = "1"
 				result.reality_mldsa65verify = params.pqv
 			end
+			if params.allowInsecure or params.insecure then
+				local insecure = params.allowInsecure or params.insecure
+				if insecure == true or insecure == "1" or insecure == "true" then
+					result.insecure = "1"
+				end
+			end
 			if result.transport == "ws" then
 				result.ws_host = (result.tls ~= "1") and (params.host and UrlDecode(params.host)) or nil
 				result.ws_path = params.path and UrlDecode(params.path) or "/"
@@ -798,24 +814,27 @@ local function processData(szType, content)
 			result.tls = "1"
 
 			-- 处理参数
-			if params.alpn then
+			if params.alpn and params.alpn ~= "" then
 				-- 处理 alpn 参数
-				result.tls_alpn = params.alpn
+				local alpn = {}
+				for v in params.alpn:gmatch("[^,;|%s]+") do
+					table.insert(alpn, v)
+				end
+				if #alpn > 0 then
+					result.tls_alpn = params.alpn
+				end
 			end
+
 			if params.peer or params.sni then
 				-- 未指定peer(sni)默认使用remote addr
 				result.tls_host = params.peer or params.sni
 			end
-			params.allowinsecure = params.allowinsecure or params.insecure
-			if params.allowinsecure then
-				-- 处理 insecure 参数
-				if params.allowinsecure == "1" or params.allowinsecure == "0" then
-					result.insecure = params.allowinsecure
-				else
-					result.insecure = string.lower(params.allowinsecure) == "true" and "1" or "0"
+			-- 处理 insecure 参数
+			if params.allowInsecure or params.allowinsecure or params.insecure then
+				local insecure = params.allowInsecure or params.allowinsecure or params.insecure
+				if insecure == true or insecure == "1" or insecure == "true" then
+					result.insecure = "1"
 				end
-			else
-				result.insecure = "0"
 			end
 			if params.tfo then
 				-- 处理 fast open 参数
@@ -952,12 +971,17 @@ local function processData(szType, content)
 			for v in params.alpn:gmatch("[^,;|%s]+") do
 				table.insert(alpn, v)
 			end
-			result.tls_alpn = alpn
+			if #alpn > 0 then
+				result.tls_alpn = alpn
+			end
 		end
 
 		-- 处理 insecure 参数
-		if params.allowInsecure and params.allowInsecure ~= "" then
-			result.insecure = "1"
+		if params.allowInsecure or params.insecure then
+			local insecure = params.allowInsecure or params.insecure
+			if insecure == true or insecure == "1" or insecure == "true" then
+				result.insecure = "1"
+			end
 		end
 
 		-- 处理 pinsha256 参数
@@ -1106,7 +1130,9 @@ local function processData(szType, content)
 			for v in params.alpn:gmatch("[^,;|%s]+") do
 				table.insert(alpn, v)
 			end
-			result.tuic_alpn = alpn
+			if #alpn > 0 then
+				result.tuic_alpn = alpn
+			end
 		end
 
 		-- 处理 disable_sni 参数