luci-proto-wireguard: fixed bug with incorrect peer name detection

Fixed bug with incorrect peer name detection on `Status -> WireGuard`
page when more than one peer with the same public key exist:
1. Peers are now tested not only by public key, but also by
enabled/disabled status, peer host (both IP and FQDN are supported)
and port.
2. Added required `resolveip` dependency.

Closes #7342

Signed-off-by: @this-username-has-been-taken
Signed-off-by: Paul Donald <newtwen+github@gmail.com>
This commit is contained in:
this-username-has-been-taken
2024-10-23 13:15:33 +03:00
committed by Paul Donald
parent 13007611a3
commit 7acea81873
2 changed files with 15 additions and 2 deletions

View File

@@ -7,7 +7,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
LUCI_TITLE:=Support for WireGuard VPN LUCI_TITLE:=Support for WireGuard VPN
LUCI_DEPENDS:=+wireguard-tools +ucode +luci-lib-uqr LUCI_DEPENDS:=+wireguard-tools +ucode +luci-lib-uqr +resolveip
LUCI_PKGARCH:=all LUCI_PKGARCH:=all
PKG_LICENSE:=Apache-2.0 PKG_LICENSE:=Apache-2.0

View File

@@ -15,6 +15,19 @@ function command(cmd) {
return trim(popen(cmd)?.read?.('all')); return trim(popen(cmd)?.read?.('all'));
} }
function checkPeerHost(configHost, configPort, wgHost) {
const ips = popen(`resolveip ${configHost} 2>/dev/null`);
if (ips) {
for (let line = ips.read('line'); length(line); line = ips.read('line')) {
const ip = rtrim(line, '\n');
if (ip + ":" + configPort == wgHost) {
return true;
}
}
}
return false;
}
const methods = { const methods = {
generatePsk: { generatePsk: {
@@ -76,7 +89,7 @@ const methods = {
let peer_name; let peer_name;
uci.foreach('network', `wireguard_${last_device}`, (s) => { uci.foreach('network', `wireguard_${last_device}`, (s) => {
if (s.public_key == record[1]) if (!s.disabled && s.public_key == record[1] && checkPeerHost(s.endpoint_host, s.endpoint_port, record[3]))
peer_name = s.description; peer_name = s.description;
}); });