Browse Source

[feature] SpiderX for Reality

Co-Authored-By: Alireza Ahmadi <[email protected]>
MHSanaei 1 year ago
parent
commit
f8eb548376
3 changed files with 25 additions and 3 deletions
  1. 11 2
      web/assets/js/model/xray.js
  2. 4 1
      web/html/xui/form/tls_settings.html
  3. 10 0
      web/service/sub.go

+ 11 - 2
web/assets/js/model/xray.js

@@ -725,7 +725,7 @@ class RealityStreamSettings extends XrayCommonClass {
     static fromJson(json = {}) {
         let settings;
 		if (!ObjectUtil.isEmpty(json.settings)) {
-            settings = new RealityStreamSettings.Settings(json.settings.publicKey , json.settings.fingerprint, json.settings.serverName);
+            settings = new RealityStreamSettings.Settings(json.settings.publicKey , json.settings.fingerprint, json.settings.serverName, json.settings.spiderX);
         }
         return new RealityStreamSettings(
             json.show,
@@ -758,17 +758,19 @@ class RealityStreamSettings extends XrayCommonClass {
 }
 
 RealityStreamSettings.Settings = class extends XrayCommonClass {
-    constructor(publicKey = '', fingerprint = UTLS_FINGERPRINT.UTLS_FIREFOX, serverName = '') {
+    constructor(publicKey = '', fingerprint = UTLS_FINGERPRINT.UTLS_FIREFOX, serverName = '', spiderX= '/') {
         super();
         this.publicKey = publicKey;
         this.fingerprint = fingerprint;
         this.serverName = serverName;
+        this.spiderX = spiderX;
     }
     static fromJson(json = {}) {
         return new RealityStreamSettings.Settings(
             json.publicKey,
             json.fingerprint,
             json.serverName,
+            json.spiderX,
         );
     }
     toJson() {
@@ -776,6 +778,7 @@ RealityStreamSettings.Settings = class extends XrayCommonClass {
             publicKey: this.publicKey,
             fingerprint: this.fingerprint,
             serverName: this.serverName,
+            spiderX: this.spiderX,
         };
     }
 };
@@ -1370,6 +1373,9 @@ class Inbound extends XrayCommonClass {
             if (!ObjectUtil.isEmpty(this.stream.reality.settings.serverName)) {
                 address = this.stream.reality.settings.serverName;
             }
+            if (!ObjectUtil.isEmpty(this.stream.reality.settings.spiderX)) {
+                params.set("spx", this.stream.reality.settings.spiderX);
+            }
         }
 
         const link = `vless://${uuid}@${address}:${port}`;
@@ -1470,6 +1476,9 @@ class Inbound extends XrayCommonClass {
             if (!ObjectUtil.isEmpty(this.stream.reality.settings.serverName)) {
                 address = this.stream.reality.settings.serverName;
             }
+            if (!ObjectUtil.isEmpty(this.stream.reality.settings.spiderX)) {
+                params.set("spx", this.stream.reality.settings.spiderX);
+            }
         }
 
 		if (this.xtls) {

+ 4 - 1
web/html/xui/form/tls_settings.html

@@ -162,7 +162,7 @@
     <a-form-item label='{{ i18n "domainName" }}'>
         <a-input v-model.trim="inbound.stream.reality.settings.serverName" style="width: 250px"></a-input>
     </a-form-item>
-	<a-form-item label="dest">
+	<a-form-item label="Dest">
         <a-input v-model.trim="inbound.stream.reality.dest" style="width: 300px"></a-input>
     </a-form-item>
     <a-form-item label="Server Names">
@@ -171,6 +171,9 @@
     <a-form-item label="ShortIds">
         <a-input v-model.trim="inbound.stream.reality.shortIds"></a-input>
     </a-form-item>
+    <a-form-item label="SpiderX">
+        <a-input v-model.trim="inbound.stream.reality.settings.spiderX"></a-input>
+    </a-form-item>
     <a-form-item label="Private Key">
         <a-input v-model.trim="inbound.stream.reality.privateKey" style="width: 300px"></a-input>
     </a-form-item>

+ 10 - 0
web/service/sub.go

@@ -327,6 +327,11 @@ func (s *SubService) genVlessLink(inbound *model.Inbound, email string) string {
 					params["fp"] = fp
 				}
 			}
+			if spxValue, ok := searchKey(realitySettings, "spiderX"); ok {
+				if spx, ok := spxValue.(string); ok && len(spx) > 0 {
+					params["spx"] = spx
+				}
+			}
 			if serverName, ok := searchKey(realitySettings, "serverName"); ok {
 				if sname, ok := serverName.(string); ok && len(sname) > 0 {
 					address = sname
@@ -508,6 +513,11 @@ func (s *SubService) genTrojanLink(inbound *model.Inbound, email string) string
 					params["fp"] = fp
 				}
 			}
+			if spxValue, ok := searchKey(realitySettings, "spiderX"); ok {
+				if spx, ok := spxValue.(string); ok && len(spx) > 0 {
+					params["spx"] = spx
+				}
+			}
 			if serverName, ok := searchKey(realitySettings, "serverName"); ok {
 				if sname, ok := serverName.(string); ok && len(sname) > 0 {
 					address = sname