use std::net::SocketAddr;
use crate::Session;
use innernet_shared::{Endpoint, Peer};
pub mod admin;
pub mod user;
pub fn inject_endpoints(session: &Session, peers: &mut Vec<Peer>) {
for peer in peers {
let endpoints = session.context.endpoints.read();
let wg_endpoint = endpoints.get(&peer.public_key);
match &mut peer.contents.endpoint {
None => {
peer.contents.endpoint = wg_endpoint.map(|e| e.to_owned().into())
},
Some(peer_endpoint) => {
if peer_endpoint.is_host_unspecified() {
if let Some(wg_endpoint) = wg_endpoint {
*peer_endpoint =
SocketAddr::new(wg_endpoint.ip(), peer_endpoint.port()).into();
} else {
peer.contents.endpoint = None;
}
}
},
}
if let Some(wg_endpoint) = wg_endpoint {
let wg_endpoint: Endpoint = wg_endpoint.to_owned().into();
if peer.contents.endpoint.as_ref() != Some(&wg_endpoint)
&& !peer.candidates.contains(&wg_endpoint)
{
peer.candidates.push(wg_endpoint);
}
}
}
}