Skip to content

Commit afa7e44

Browse files
authored
Extract resolved config in struct (#2220)
* Extract resolved config in struct * Function instead of iterator
1 parent d2706cf commit afa7e44

File tree

3 files changed

+51
-29
lines changed

3 files changed

+51
-29
lines changed

nym-vpn-core/crates/nym-gateway-directory/src/gateway_client.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright 2023-2024 - Nym Technologies SA <[email protected]>
22
// SPDX-License-Identifier: GPL-3.0-only
33

4+
use std::net::SocketAddr;
45
use std::{fmt, net::IpAddr};
56

67
use nym_sdk::UserAgent;
@@ -87,6 +88,24 @@ impl Config {
8788
}
8889
}
8990

91+
pub struct ResolvedConfig {
92+
pub nyxd_socket_addrs: Vec<SocketAddr>,
93+
pub api_socket_addrs: Vec<SocketAddr>,
94+
pub nym_vpn_api_socket_addres: Option<Vec<SocketAddr>>,
95+
}
96+
97+
impl ResolvedConfig {
98+
pub fn all_socket_addrs(&self) -> Vec<SocketAddr> {
99+
let mut socket_addrs = vec![];
100+
socket_addrs.extend(self.nyxd_socket_addrs.iter());
101+
socket_addrs.extend(self.api_socket_addrs.iter());
102+
if let Some(vpn_api_socket_addrs) = &self.nym_vpn_api_socket_addres {
103+
socket_addrs.extend(vpn_api_socket_addrs.iter());
104+
}
105+
socket_addrs
106+
}
107+
}
108+
90109
pub struct GatewayClient {
91110
api_client: NymApiClient,
92111
nym_vpn_api_client: Option<nym_vpn_api_client::VpnApiClient>,

nym-vpn-core/crates/nym-gateway-directory/src/helpers.rs

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use std::net::{IpAddr, SocketAddr};
66
use nym_http_api_client::HickoryDnsResolver;
77
use tracing::debug;
88

9-
use crate::{error::Result, Config, Error};
9+
use crate::{error::Result, gateway_client::ResolvedConfig, Config, Error};
1010

1111
async fn try_resolve_hostname(hostname: &str) -> Result<Vec<IpAddr>> {
1212
debug!("Trying to resolve hostname: {hostname}");
@@ -28,34 +28,37 @@ async fn try_resolve_hostname(hostname: &str) -> Result<Vec<IpAddr>> {
2828
Ok(ips)
2929
}
3030

31-
pub async fn allowed_ips(config: &Config) -> Result<Vec<SocketAddr>> {
32-
let mut socket_addrs = vec![];
33-
let mut urls = vec![];
34-
35-
urls.push(config.nyxd_url());
36-
urls.push(config.api_url());
37-
if let Some(vpn_api_url) = config.nym_vpn_api_url() {
38-
urls.push(vpn_api_url);
39-
}
40-
41-
for unresolved_url in urls {
42-
let port = unresolved_url
43-
.port_or_known_default()
44-
.ok_or(Error::UrlError {
45-
url: unresolved_url.clone(),
46-
reason: "missing port".to_string(),
47-
})?;
48-
let hostname = unresolved_url.host_str().ok_or(Error::UrlError {
31+
async fn url_to_socket_addr(unresolved_url: &url::Url) -> Result<Vec<SocketAddr>> {
32+
let port = unresolved_url
33+
.port_or_known_default()
34+
.ok_or(Error::UrlError {
4935
url: unresolved_url.clone(),
50-
reason: "missing hostname".to_string(),
36+
reason: "missing port".to_string(),
5137
})?;
52-
socket_addrs.extend(
53-
try_resolve_hostname(hostname)
54-
.await?
55-
.into_iter()
56-
.map(|ip| SocketAddr::new(ip, port)),
57-
);
58-
}
38+
let hostname = unresolved_url.host_str().ok_or(Error::UrlError {
39+
url: unresolved_url.clone(),
40+
reason: "missing hostname".to_string(),
41+
})?;
42+
43+
Ok(try_resolve_hostname(hostname)
44+
.await?
45+
.into_iter()
46+
.map(|ip| SocketAddr::new(ip, port))
47+
.collect())
48+
}
49+
50+
pub async fn resolve_config(config: &Config) -> Result<ResolvedConfig> {
51+
let nyxd_socket_addrs = url_to_socket_addr(config.nyxd_url()).await?;
52+
let api_socket_addrs = url_to_socket_addr(config.api_url()).await?;
53+
let nym_vpn_api_socket_addres = if let Some(vpn_api_url) = config.nym_vpn_api_url() {
54+
Some(url_to_socket_addr(vpn_api_url).await?)
55+
} else {
56+
None
57+
};
5958

60-
Ok(socket_addrs)
59+
Ok(ResolvedConfig {
60+
nyxd_socket_addrs,
61+
api_socket_addrs,
62+
nym_vpn_api_socket_addres,
63+
})
6164
}

nym-vpn-core/crates/nym-gateway-directory/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,5 @@ pub use crate::{
2323
},
2424
error::Error,
2525
gateway_client::{Config, GatewayClient},
26-
helpers::allowed_ips,
26+
helpers::resolve_config,
2727
};

0 commit comments

Comments
 (0)