diff options
| author | MHSanaei <ho3ein.sanaei@gmail.com> | 2024-01-10 15:42:54 +0300 |
|---|---|---|
| committer | MHSanaei <ho3ein.sanaei@gmail.com> | 2024-01-10 15:42:54 +0300 |
| commit | 722f5e716fb9801a1329dd754268d1199ad97957 (patch) | |
| tree | 9e009cbe3cbad77a9a4688ca21904c961fb40366 /web/assets/js/model | |
| parent | fdf31d80e7b378bc20e4958e2893b72caf088602 (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.js | 125 |
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 |
