Browse Source

luci-app-ssr-plus: ssrurl: use standard URL scheme to parse trojan link

Fixes: #1008

Signed-off-by: Tianling Shen <[email protected]>
Tianling Shen 3 years ago
parent
commit
02fc827d25
1 changed files with 12 additions and 29 deletions
  1. 12 29
      luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm

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

@@ -215,42 +215,25 @@ function import_ssr_url(btn, urlname, sid) {
 			s.innerHTML = "<font color='green'><%:Import configuration information successfully.%></font>";
 			return false;
 		case "trojan":
-			var url0, param = "";
-			var ploc = ssu[1].indexOf("#");
-			if (ploc > 0) {
-				url0 = ssu[1].substr(0, ploc);
-				param = ssu[1].substr(ploc + 1);
-			} else {
-				url0 = ssu[1]
+			try {
+				var url = new URL("http://" + ssu[1]);
+			} catch(e) {
+				alert(e)
+				return false;
 			}
-			var sstr = url0;
+
+			document.getElementsByName('cbid.shadowsocksr.' + sid + '.alias')[0].value = url.hash ? decodeURIComponent(url.hash.slice(1)) : "";
 			document.getElementsByName('cbid.shadowsocksr.' + sid + '.type')[0].value = "v2ray";
 			document.getElementsByName('cbid.shadowsocksr.' + sid + '.type')[0].dispatchEvent(event);
 			document.getElementsByName('cbid.shadowsocksr.' + sid + '.v2ray_protocol')[0].value = "trojan";
 			document.getElementsByName('cbid.shadowsocksr.' + sid + '.v2ray_protocol')[0].dispatchEvent(event);
-			var team = sstr.split('@');
-			var password = team[0]
-			var serverPart = team[1].split(':');		
-			var others = serverPart[1].split('?');
-			var port = parseInt(others[0]);
-			var queryParam = {}
-			if (others.length > 1) {
-				var queryParams = others[1]
-				var queryArray = queryParams.split('&');
-				for (i = 0; i < queryArray.length; i++) {
-					var params = queryArray[i].split('=');
-					queryParam[decodeURIComponent(params[0])] = decodeURIComponent(params[1] || '');
-				}
-			}
-			document.getElementsByName('cbid.shadowsocksr.' + sid + '.server')[0].value = serverPart[0];
-			document.getElementsByName('cbid.shadowsocksr.' + sid + '.server_port')[0].value = port || '443';
-			document.getElementsByName('cbid.shadowsocksr.' + sid + '.password')[0].value = password;
+			document.getElementsByName('cbid.shadowsocksr.' + sid + '.server')[0].value = url.hostname;
+			document.getElementsByName('cbid.shadowsocksr.' + sid + '.server_port')[0].value = url.port || "80";
+			document.getElementsByName('cbid.shadowsocksr.' + sid + '.password')[0].value = decodeURIComponent(url.username);
 			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 = queryParam.sni || '';
-			if (param != undefined) {
-				document.getElementsByName('cbid.shadowsocksr.' + sid + '.alias')[0].value = decodeURI(param);
-			}
+			document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls_host')[0].value = url.searchParams.get("sni");
+
 			s.innerHTML = "<font color='green'><%:Import configuration information successfully.%></font>";
 			return false;
 		case "vmess":