浏览代码

luci-app-ssr-plus: Fix `ss` configuration import

zxl hhyccc 2 月之前
父节点
当前提交
612c959f82
共有 1 个文件被更改,包括 12 次插入4 次删除
  1. 12 4
      luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm

+ 12 - 4
luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm

@@ -184,14 +184,20 @@ function import_ssr_url(btn, urlname, sid) {
 			if (url0.indexOf("@") !== -1) {
 				// === SIP002 格式 ===
 				var sipIndex = url0.indexOf("@");
-				var userInfoB64 = url0.substring(0, sipIndex);
+				// 先 URL 解码 base64 再解码
+				var userInfoB64 = decodeURIComponent(url0.substring(0, sipIndex));
 				var userInfo = b64decsafe(userInfoB64);
 				var userInfoSplitIndex = userInfo.indexOf(":");
+				if(userInfoSplitIndex < 0) {
+					// 格式错误
+					s.innerHTML = "<font style='color:red'>Userinfo format error</font>";
+					break;
+				}
 				var method = userInfo.substring(0, userInfoSplitIndex);
 				var password = userInfo.substring(userInfoSplitIndex + 1);
-
-				var serverPart = url0.substring(url0.indexOf("@") + 1);
+				var serverPart = url0.substring(sipIndex + 1);
 				var serverInfo = serverPart.split(":");
+
 				var server = serverInfo[0];
 				var port = serverInfo[1];
 
@@ -203,7 +209,9 @@ function import_ssr_url(btn, urlname, sid) {
 				}
 			} else {
 				// === Base64 SS2022 / 普通格式 的整体编码格式 ===
-				var sstr = b64decsafe(url0);
+				// 先 URL 解码整个字符串
+				var decodedUrl0 = decodeURIComponent(url0);
+				var sstr = b64decsafe(decodedUrl0);
 				if (!sstr) {
 					s.innerHTML = "<font style='color:red'>Base64 sstr failed</font>";
 					break;