Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMHSanaei <ho3ein.sanaei@gmail.com>2024-01-10 15:42:54 +0300
committerMHSanaei <ho3ein.sanaei@gmail.com>2024-01-10 15:42:54 +0300
commit722f5e716fb9801a1329dd754268d1199ad97957 (patch)
tree9e009cbe3cbad77a9a4688ca21904c961fb40366 /web/assets/js/model
parentfdf31d80e7b378bc20e4958e2893b72caf088602 (diff)
[feature] wireguard inbound
Co-Authored-By: Alireza Ahmadi <alireza7@gmail.com>
Diffstat (limited to 'web/assets/js/model')
-rw-r--r--web/assets/js/model/xray.js125
1 files changed, 81 insertions, 44 deletions
diff --git a/web/assets/js/model/xray.js b/web/assets/js/model/xray.js
index de0b31f1..3492db6f 100644
--- a/web/assets/js/model/xray.js
+++ b/web/assets/js/model/xray.js
@@ -6,6 +6,7 @@ const Protocols = {
DOKODEMO: 'dokodemo-door',
SOCKS: 'socks',
HTTP: 'http',
+ WIREGUARD: 'wireguard',
};
const SSMethods = {
@@ -765,16 +766,18 @@ class RealityStreamSettings extends XrayCommonClass {
}
RealityStreamSettings.Settings = class extends XrayCommonClass {
- constructor(publicKey = '', fingerprint = UTLS_FINGERPRINT.UTLS_FIREFOX, spiderX= '/') {
+ 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,
);
}
@@ -782,6 +785,7 @@ RealityStreamSettings.Settings = class extends XrayCommonClass {
return {
publicKey: this.publicKey,
fingerprint: this.fingerprint,
+ serverName: this.serverName,
spiderX: this.spiderX,
};
}
@@ -795,6 +799,7 @@ class SockoptStreamSettings extends XrayCommonClass {
this.mark = mark;
this.tproxy = tproxy;
}
+
static fromJson(json = {}) {
if (Object.keys(json).length === 0) return undefined;
return new SockoptStreamSettings(
@@ -996,42 +1001,6 @@ class Inbound extends XrayCommonClass {
}
}
- get tls() {
- return this.stream.security === 'tls';
- }
-
- set tls(isTls) {
- if (isTls) {
- this.stream.security = 'tls';
- } else {
- this.stream.security = 'none';
- }
- }
-
- get xtls() {
- return this.stream.security === 'xtls';
- }
-
- set xtls(isXtls) {
- if (isXtls) {
- this.stream.security = 'xtls';
- } else {
- this.stream.security = 'none';
- }
- }
-
- get reality() {
- return this.stream.security === 'reality';
- }
-
- set reality(isReality) {
- if (isReality) {
- this.stream.security = 'reality';
- } else {
- this.stream.security = 'none';
- }
- }
-
get network() {
return this.stream.network;
}
@@ -1143,11 +1112,6 @@ class Inbound extends XrayCommonClass {
return ["tcp", "ws", "http", "quic", "grpc"].includes(this.network);
}
- canEnableReality() {
- if(![Protocols.VLESS, Protocols.TROJAN].includes(this.protocol)) return false;
- return ["tcp", "http", "grpc"].includes(this.network);
- }
-
//this is used for xtls-rprx-vision
canEnableTlsFlow() {
if (((this.stream.security === 'tls') || (this.stream.security === 'reality')) && (this.network === "tcp")) {
@@ -1156,6 +1120,11 @@ class Inbound extends XrayCommonClass {
return false;
}
+ canEnableReality() {
+ if(![Protocols.VLESS, Protocols.TROJAN].includes(this.protocol)) return false;
+ return ["tcp", "http", "grpc"].includes(this.network);
+ }
+
canEnableXtls() {
if(![Protocols.VLESS, Protocols.TROJAN].includes(this.protocol)) return false;
return this.network === "tcp";
@@ -1608,7 +1577,7 @@ class Inbound extends XrayCommonClass {
});
return links.join('\r\n');
} else {
- if(this.protocol == Protocols.SHADOWSOCKS && !this.isSSMultiUser) return this.genSSLink(this.listen, this.port, remark);
+ if(this.protocol == Protocols.SHADOWSOCKS && !this.isSSMultiUser) return this.genSSLink(this.listen, this.port, 'same', remark);
return '';
}
}
@@ -1658,7 +1627,8 @@ Inbound.Settings = class extends XrayCommonClass {
case Protocols.SHADOWSOCKS: return new Inbound.ShadowsocksSettings(protocol);
case Protocols.DOKODEMO: return new Inbound.DokodemoSettings(protocol);
case Protocols.SOCKS: return new Inbound.SocksSettings(protocol);
- case Protocols.HTTP: return new Inbound.HttpSettings(protocol);
+ case Protocols.HTTP: return new Inbound.HttpSettings(protocol);
+ case Protocols.WIREGUARD: return new Inbound.WireguardSettings(protocol);
default: return null;
}
}
@@ -1672,6 +1642,7 @@ Inbound.Settings = class extends XrayCommonClass {
case Protocols.DOKODEMO: return Inbound.DokodemoSettings.fromJson(json);
case Protocols.SOCKS: return Inbound.SocksSettings.fromJson(json);
case Protocols.HTTP: return Inbound.HttpSettings.fromJson(json);
+ case Protocols.WIREGUARD: return Inbound.WireguardSettings.fromJson(json);
default: return null;
}
}
@@ -2274,3 +2245,69 @@ Inbound.HttpSettings.HttpAccount = class extends XrayCommonClass {
return new Inbound.HttpSettings.HttpAccount(json.user, json.pass);
}
};
+
+Inbound.WireguardSettings = class extends XrayCommonClass {
+ constructor(protocol, mtu=1420, secretKey=Wireguard.generateKeypair().privateKey, peers=[new Inbound.WireguardSettings.Peer()], kernelMode=false) {
+ super(protocol);
+ this.mtu = mtu;
+ this.secretKey = secretKey;
+ this.pubKey = secretKey.length>0 ? Wireguard.generateKeypair(secretKey).publicKey : '';
+ this.peers = peers;
+ this.kernelMode = kernelMode;
+ }
+
+ addPeer() {
+ this.peers.push(new Inbound.WireguardSettings.Peer());
+ }
+
+ delPeer(index) {
+ this.peers.splice(index, 1);
+ }
+
+ static fromJson(json={}){
+ return new Inbound.WireguardSettings(
+ Protocols.WIREGUARD,
+ json.mtu,
+ json.secretKey,
+ json.peers.map(peer => Inbound.WireguardSettings.Peer.fromJson(peer)),
+ json.kernelMode,
+ );
+ }
+
+ toJson() {
+ return {
+ mtu: this.mtu?? undefined,
+ secretKey: this.secretKey,
+ peers: Inbound.WireguardSettings.Peer.toJsonArray(this.peers),
+ kernelMode: this.kernelMode,
+ };
+ }
+};
+
+Inbound.WireguardSettings.Peer = class extends XrayCommonClass {
+ constructor(publicKey='', psk='', allowedIPs=['0.0.0.0/0','::/0'], keepAlive=0) {
+ super();
+ this.publicKey = publicKey;
+ this.psk = psk;
+ this.allowedIPs = allowedIPs;
+ this.keepAlive = keepAlive;
+ }
+
+ static fromJson(json={}){
+ return new Inbound.WireguardSettings.Peer(
+ json.publicKey,
+ json.preSharedKey,
+ json.allowedIPs,
+ json.keepAlive
+ );
+ }
+
+ toJson() {
+ return {
+ publicKey: this.publicKey,
+ preSharedKey: this.psk.length>0 ? this.psk : undefined,
+ allowedIPs: this.allowedIPs,
+ keepAlive: this.keepAlive?? undefined,
+ };
+ }
+}; \ No newline at end of file