Browse Source

[xray] fix: convert link to json

Co-Authored-By: Alireza Ahmadi <[email protected]>
mhsanaei 11 months ago
parent
commit
9d18e925cc
1 changed files with 16 additions and 14 deletions
  1. 16 14
      web/assets/js/model/outbound.js

+ 16 - 14
web/assets/js/model/outbound.js

@@ -645,7 +645,7 @@ class Outbound extends CommonClass {
                 json.path,
                 json.type ? json.type : 'none');
         } else if (network === 'grpc') {
-            stream.grpc = new GrpcStreamSettings(json.path, json.type == 'multi');
+            stream.grpc = new GrpcStreamSettings(json.path, json.authority, json.type == 'multi');
         } else if (network === 'httpupgrade') {
             stream.httpupgrade = new HttpUpgradeStreamSettings(json.path,json.host);
         }
@@ -658,20 +658,22 @@ class Outbound extends CommonClass {
                 json.allowInsecure);
         }
 
-        return new Outbound(json.ps, Protocols.VMess, new Outbound.VmessSettings(json.add, json.port, json.id), stream);
+        const port = json.port * 1;
+
+        return new Outbound(json.ps, Protocols.VMess, new Outbound.VmessSettings(json.add, port, json.id), stream);
     }
 
     static fromParamLink(link){
         const url = new URL(link);
-        let type = url.searchParams.get('type');
+        let type = url.searchParams.get('type') ?? 'tcp';
         let security = url.searchParams.get('security') ?? 'none';
         let stream = new StreamSettings(type, security);
 
-        let headerType = url.searchParams.get('headerType');
-        let host = url.searchParams.get('host');
-        let path = url.searchParams.get('path');
+        let headerType = url.searchParams.get('headerType') ?? undefined;
+        let host = url.searchParams.get('host') ?? undefined;
+        let path = url.searchParams.get('path') ?? undefined;
 
-        if (type === 'tcp') {
+        if (type === 'tcp' || type === 'none') {
             stream.tcp = new TcpStreamSettings(headerType ?? 'none', host, path);
         } else if (type === 'kcp') {
             stream.kcp = new KcpStreamSettings();
@@ -686,9 +688,12 @@ class Outbound extends CommonClass {
                 url.searchParams.get('quicSecurity') ?? 'none',
                 url.searchParams.get('key') ?? '',
                 headerType ?? 'none');
-        } else if (type === 'grpc') {
-            stream.grpc = new GrpcStreamSettings(url.searchParams.get('serviceName') ?? '', url.searchParams.get('mode') == 'multi');
-        } else if (type === 'httpupgrade') {
+            } else if (type === 'grpc') {
+                stream.grpc = new GrpcStreamSettings(
+                    url.searchParams.get('serviceName') ?? '',
+                    url.searchParams.get('authority') ?? '',
+                    url.searchParams.get('mode') == 'multi');
+            } else if (type === 'httpupgrade') {
             stream.httpupgrade = new HttpUpgradeStreamSettings(path,host);
         }
 
@@ -709,10 +714,7 @@ class Outbound extends CommonClass {
             stream.reality = new RealityStreamSettings(pbk, fp, sni, sid, spx);
         }
 
-        let data = link.split('?');
-        if(data.length != 2) return null;
-
-        const regex = /([^@]+):\/\/([^@]+)@(.+):(\d+)\?(.*)$/;
+        const regex = /([^@]+):\/\/([^@]+)@(.+):(\d+)(.*)$/;
         const match = link.match(regex);
 
         if (!match) return null;