Browse Source

luci-app-ssr-plus: Optimize subscribe code.

zxlhhyccc 6 months ago
parent
commit
9b14197c03
1 changed files with 37 additions and 10 deletions
  1. 37 10
      luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua

+ 37 - 10
luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua

@@ -443,37 +443,61 @@ local function processData(szType, content)
 		local params = {}
 		local idx_sp = 0
 		local alias = ""
+
+		-- 提取别名(如果存在)
 		if content:find("#") then
 			idx_sp = content:find("#")
 			alias = content:sub(idx_sp + 1, -1)
 		end
-		local info = content:sub(1, idx_sp - 1)
+		local info = content:sub(1, idx_sp > 0 and idx_sp - 1 or #content)
 		local hostInfo = split(info, "@")
+
+		-- 基础验证
+		if #hostInfo < 2 then
+			--log("Trojan节点格式错误: 缺少@符号")
+			return nil
+		end
+
 		local userinfo = hostInfo[1]
-		local password = userinfo
+		local hostPort = hostInfo[2]
 		
 		-- 分离服务器地址和端口
-		local host = split(hostInfo[2], ":")
-		local server = host[1]
-		local port = host[2]
+		local hostParts = split(hostPort, ":")
+
+		local server = hostParts[1]
+		local port = hostParts[2]
+
+		-- 验证服务器地址和端口
+		if #hostParts < 2 then
+			--log("Trojan节点格式错误: 缺少端口号")
+			return nil
+		end
 
 		result.alias = UrlDecode(alias)
 		result.type = v2_tj
 		result.v2ray_protocol = "trojan"
 		result.server = server
-		result.password = password
+		result.password = userinfo
 
+		-- 默认设置
 		-- 按照官方的建议 默认验证ssl证书
 		result.insecure = "0"
 		result.tls = "1"
 
+		-- 解析查询参数(如果存在)
 		if port:find("?") then
-			local query = split(port, "?")
-			result.server_port = query[1]
-			for _, v in pairs(split(query[2], '&')) do
+			local queryParts = split(port, "?")
+			result.server_port = queryParts[1]
+
+			-- 解析查询参数
+			for _, v in pairs(split(queryParts[2], '&')) do
 				local t = split(v, '=')
-				params[t[1]] = t[2]
+				if #t >= 2 then
+					params[t[1]] = t[2]
+				end
 			end
+
+			-- 处理参数
 			if params.alpn then
 				-- 处理 alpn 参数
 				result.xhttp_alpn = params.alpn
@@ -651,6 +675,9 @@ local function processData(szType, content)
 end
 -- wget
 local function wget(url)
+	-- 清理URL中的隐藏字符
+	url = url:gsub("%s+$", ""):gsub("^%s+", ""):gsub("%z", "")
+
 	local stdout = luci.sys.exec('wget-ssl --timeout=20 --tries=3 -q --user-agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36" --no-check-certificate -O- "' .. url .. '"')
 	return trim(stdout)
 end