From 4521beab7c245a3420ae558ce34c37fb9ed1a53d Mon Sep 17 00:00:00 2001 From: MHSanaei Date: Sun, 26 Apr 2026 20:06:24 +0200 Subject: [PATCH] wireguard: link --- web/assets/js/model/inbound.js | 50 ++++++++++++++++++++++--- web/html/modals/inbound_info_modal.html | 15 +++++++- 2 files changed, 58 insertions(+), 7 deletions(-) diff --git a/web/assets/js/model/inbound.js b/web/assets/js/model/inbound.js index 26da6cb3..e3816060 100644 --- a/web/assets/js/model/inbound.js +++ b/web/assets/js/model/inbound.js @@ -1907,7 +1907,7 @@ class Inbound extends XrayCommonClass { return url.toString(); } - getWireguardLink(address, port, remark, peerId) { + getWireguardTxt(address, port, remark, peerId) { let txt = `[Interface]\n` txt += `PrivateKey = ${this.settings.peers[peerId].privateKey}\n` txt += `Address = ${this.settings.peers[peerId].allowedIPs[0]}\n` @@ -1929,6 +1929,48 @@ class Inbound extends XrayCommonClass { return txt; } + getWireguardLink(address, port, remark, peerId) { + const peer = this.settings?.peers?.[peerId]; + if (!peer) return ''; + + const link = `wireguard://${address}:${port}`; + const url = new URL(link); + url.username = peer.privateKey || ''; + + if (this.settings?.pubKey) { + url.searchParams.set("publickey", this.settings.pubKey); + } + if (Array.isArray(peer.allowedIPs) && peer.allowedIPs.length > 0 && peer.allowedIPs[0]) { + url.searchParams.set("address", peer.allowedIPs[0]); + } + if (this.settings?.mtu) { + url.searchParams.set("mtu", this.settings.mtu); + } + + url.hash = encodeURIComponent(remark); + return url.toString(); + } + + genWireguardLinks(remark = '', remarkModel = '-ieo') { + const addr = !ObjectUtil.isEmpty(this.listen) && this.listen !== "0.0.0.0" ? this.listen : location.hostname; + const separationChar = remarkModel.charAt(0); + let links = []; + this.settings.peers.forEach((p, index) => { + links.push(this.getWireguardLink(addr, this.port, remark + separationChar + (index + 1), index)); + }); + return links.join('\r\n'); + } + + genWireguardConfigs(remark = '', remarkModel = '-ieo') { + const addr = !ObjectUtil.isEmpty(this.listen) && this.listen !== "0.0.0.0" ? this.listen : location.hostname; + const separationChar = remarkModel.charAt(0); + let links = []; + this.settings.peers.forEach((p, index) => { + links.push(this.getWireguardTxt(addr, this.port, remark + separationChar + (index + 1), index)); + }); + return links.join('\r\n'); + } + genLink(address = '', port = this.port, forceTls = 'same', remark = '', client) { switch (this.protocol) { case Protocols.VMESS: @@ -1989,11 +2031,7 @@ class Inbound extends XrayCommonClass { } else { if (this.protocol == Protocols.SHADOWSOCKS && !this.isSSMultiUser) return this.genSSLink(addr, this.port, 'same', remark); if (this.protocol == Protocols.WIREGUARD) { - let links = []; - this.settings.peers.forEach((p, index) => { - links.push(this.getWireguardLink(addr, this.port, remark + remarkModel.charAt(0) + (index + 1), index)); - }); - return links.join('\r\n'); + return this.genWireguardConfigs(remark, remarkModel); } return ''; } diff --git a/web/html/modals/inbound_info_modal.html b/web/html/modals/inbound_info_modal.html index 14b1d86b..67da21a9 100644 --- a/web/html/modals/inbound_info_modal.html +++ b/web/html/modals/inbound_info_modal.html @@ -513,9 +513,19 @@
+ Link + + Link + + + + + [[ infoModal.wireguardLinks[index] ]] + @@ -603,6 +613,7 @@ upStats: 0, downStats: 0, links: [], + wireguardLinks: [], index: null, isExpired: false, subLink: '', @@ -633,9 +644,11 @@ } } if (this.inbound.protocol == Protocols.WIREGUARD) { - this.links = this.inbound.genInboundLinks(dbInbound.remark).split('\r\n') + this.links = this.inbound.genWireguardConfigs(dbInbound.remark).split('\r\n') + this.wireguardLinks = this.inbound.genWireguardLinks(dbInbound.remark).split('\r\n') } else { this.links = this.inbound.genAllLinks(this.dbInbound.remark, app.remarkModel, this.clientSettings); + this.wireguardLinks = []; } if (this.clientSettings) { if (this.clientSettings.subId) {