From fa72f90bfab31c699ea6a7e0ad12fbe2a22c2c3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bogdan-=C8=98tefan=20Neac=C5=9Fu?= Date: Mon, 25 Nov 2024 16:44:23 +0000 Subject: [PATCH] Remove peers with no allowed ip from storage --- gateway/src/node/mod.rs | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/gateway/src/node/mod.rs b/gateway/src/node/mod.rs index c399deefa9..48e7975018 100644 --- a/gateway/src/node/mod.rs +++ b/gateway/src/node/mod.rs @@ -231,22 +231,28 @@ impl Gateway { forwarding_channel, router_tx, ); - let all_peers = self.client_storage.get_all_wireguard_peers().await?; - let used_private_network_ips = all_peers - .iter() - .cloned() - .map(|wireguard_peer| { - defguard_wireguard_rs::host::Peer::try_from(wireguard_peer).map(|mut peer| { - peer.allowed_ips - .pop() - .ok_or(Box::new(GatewayError::InternalWireguardError(format!( - "no private IP set for peer {}", - peer.public_key - )))) - .map(|p| p.ip) - }) - }) - .collect::, _>, _>>()??; + let mut used_private_network_ips = vec![]; + let mut all_peers = vec![]; + for wireguard_peer in self + .client_storage + .get_all_wireguard_peers() + .await? + .into_iter() + { + let mut peer = defguard_wireguard_rs::host::Peer::try_from(wireguard_peer.clone())?; + let Some(peer) = peer.allowed_ips.pop() else { + tracing::warn!( + "Peer {} has empty allowed ips. It will be removed", + peer.public_key + ); + self.client_storage + .remove_wireguard_peer(&peer.public_key.to_string()) + .await?; + continue; + }; + used_private_network_ips.push(peer.ip); + all_peers.push(wireguard_peer); + } if let Some(wireguard_data) = self.wireguard_data.take() { let (on_start_tx, on_start_rx) = oneshot::channel();