Skip to content

Commit 269bc88

Browse files
authored
Merge pull request #186 from erikh/progenitor
Progenitor port
2 parents 9d97ed0 + 318ed5b commit 269bc88

File tree

12 files changed

+626
-248
lines changed

12 files changed

+626
-248
lines changed

Cargo.lock

Lines changed: 366 additions & 28 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ ipnetwork = ">=0"
2121
trust-dns-resolver = { version = "^0.21.0", features = ["tokio-runtime", "dns-over-openssl"] }
2222
trust-dns-server = { version = "^0.21.0", features = ["trust-dns-resolver", "dns-over-openssl"] }
2323
tokio = { version = "1", features = ["full"] }
24-
zerotier-central-api = { version = "=1.0.3" }
25-
zerotier-one-api = { version = "=1.0.5" }
2624
serde = ">=0"
2725
serde_json = ">=0"
2826
serde_yaml = ">=0"
27+
zerotier-central-api = "=1.1.0"
28+
zerotier-one-api = "=1.1.0"
2929
toml = ">=0"
3030
tinytemplate = ">=0"
3131
rand = ">=0"
@@ -36,6 +36,7 @@ hex = ">=0"
3636
openssl = ">=0"
3737
async-trait = ">=0"
3838
lazy_static = ">=0"
39+
reqwest = ">=0"
3940

4041
[features]
4142
vendored-openssl = [ "openssl/vendored" ]

src/addresses.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::net::{IpAddr, Ipv6Addr};
33

44
use hex::FromHexError;
55
use ipnetwork::IpNetwork;
6-
use zerotier_central_api::models::{Member, Network};
6+
use zerotier_central_api::types::{Member, Network};
77

88
fn digest_hex(code: String) -> Result<u64, FromHexError> {
99
Ok(hex::decode(code)?

src/authority.rs

Lines changed: 33 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,13 @@ use std::{
77
time::Duration,
88
};
99

10+
use crate::{
11+
addresses::Calculator,
12+
hosts::{parse_hosts, HostsFile},
13+
traits::{ToHostname, ToPointerSOA, ToWildcard},
14+
utils::parse_member_name,
15+
};
16+
1017
use async_trait::async_trait;
1118
use ipnetwork::IpNetwork;
1219
use trust_dns_resolver::{
@@ -22,17 +29,6 @@ use trust_dns_server::{
2229
in_memory::InMemoryAuthority,
2330
},
2431
};
25-
use zerotier_central_api::{
26-
apis::configuration::Configuration,
27-
models::{Member, Network},
28-
};
29-
30-
use crate::{
31-
addresses::Calculator,
32-
hosts::{parse_hosts, HostsFile},
33-
traits::{ToHostname, ToPointerSOA, ToWildcard},
34-
utils::parse_member_name,
35-
};
3632

3733
pub async fn find_members(mut zt: ZTAuthority) {
3834
let mut timer = tokio::time::interval(zt.update_interval);
@@ -101,7 +97,7 @@ pub async fn init_catalog(zt: ZTAuthority) -> Result<Catalog, anyhow::Error> {
10197
pub struct ZTAuthority {
10298
pub network_id: String,
10399
pub hosts_file: Option<PathBuf>,
104-
pub config: Configuration,
100+
pub client: zerotier_central_api::Client,
105101
pub reverse_authority_map: HashMap<IpNetwork, RecordAuthority>,
106102
pub forward_authority: RecordAuthority,
107103
pub wildcard: bool,
@@ -129,8 +125,8 @@ impl ZTAuthority {
129125

130126
pub async fn configure_members(
131127
&self,
132-
network: Network,
133-
members: Vec<Member>,
128+
network: zerotier_central_api::types::Network,
129+
members: Vec<zerotier_central_api::types::Member>,
134130
) -> Result<(), anyhow::Error> {
135131
let mut forward_records = vec![self.forward_authority.domain_name.clone()];
136132
let mut reverse_records = HashMap::new();
@@ -151,7 +147,7 @@ impl ZTAuthority {
151147
let v6assign = network.config.clone().unwrap().v6_assign_mode;
152148
if v6assign.is_some() {
153149
let v6assign = v6assign.unwrap().clone();
154-
if v6assign.var_6plane.unwrap_or(false) {
150+
if v6assign._6plane.unwrap_or(false) {
155151
let s = network.clone().sixplane()?;
156152
sixplane = Some(s);
157153
}
@@ -180,9 +176,9 @@ impl ZTAuthority {
180176
.await?;
181177

182178
if let Some(ips) = member.clone().config.and_then(|c| {
183-
c.ip_assignments.and_then(|ips| {
179+
c.ip_assignments.map_or(None, |v| {
184180
Some(
185-
ips.iter()
181+
v.iter()
186182
.filter_map(|ip| IpAddr::from_str(ip).map_or(None, |ip| Some(ip)))
187183
.collect::<Vec<IpAddr>>(),
188184
)
@@ -228,21 +224,22 @@ impl ZTAuthority {
228224
Ok(())
229225
}
230226

231-
pub async fn get_members(&self) -> Result<(Network, Vec<Member>), anyhow::Error> {
232-
let config = self.config.clone();
227+
pub async fn get_members(
228+
&self,
229+
) -> Result<
230+
(
231+
zerotier_central_api::types::Network,
232+
Vec<zerotier_central_api::types::Member>,
233+
),
234+
anyhow::Error,
235+
> {
236+
let client = self.client.clone();
233237
let network_id = self.network_id.clone();
234238

235-
let members = zerotier_central_api::apis::network_member_api::get_network_member_list(
236-
&config,
237-
&network_id,
238-
)
239-
.await?;
240-
241-
let network =
242-
zerotier_central_api::apis::network_api::get_network_by_id(&config, &network_id)
243-
.await?;
239+
let members = client.get_network_member_list(&network_id).await?;
240+
let network = client.get_network_by_id(&network_id).await?;
244241

245-
Ok((network, members))
242+
Ok((network.to_owned(), members.to_owned()))
246243
}
247244
}
248245

@@ -604,7 +601,7 @@ struct ZTRecord {
604601

605602
impl ZTRecord {
606603
pub fn new(
607-
member: &Member,
604+
member: &zerotier_central_api::types::Member,
608605
sixplane: Option<IpNetwork>,
609606
rfc4193: Option<IpNetwork>,
610607
domain_name: Name,
@@ -630,15 +627,16 @@ impl ZTRecord {
630627
ptr_name = name;
631628
}
632629

633-
let mut ips: Vec<IpAddr> = member
630+
let mut ips = member
634631
.clone()
635632
.config
636633
.expect("Member config does not exist")
637634
.ip_assignments
638-
.expect("IP assignments for member do not exist")
639-
.into_iter()
640-
.map(|s| IpAddr::from_str(&s).expect("Could not parse IP address"))
641-
.collect();
635+
.map_or(Vec::new(), |v| {
636+
v.iter()
637+
.map(|s| IpAddr::from_str(s).expect("Could not parse IP address"))
638+
.collect()
639+
});
642640

643641
if sixplane.is_some() {
644642
ips.push(member.clone().sixplane()?.ip());

src/init.rs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ impl Launcher {
103103

104104
let domain_name = domain_or_default(self.domain.as_deref())?;
105105
let authtoken = authtoken_path(self.secret.as_deref());
106-
let config = central_config(central_token(self.token.as_deref())?);
106+
let client = central_client(central_token(self.token.as_deref())?)?;
107107

108108
info!("Welcome to ZeroNS!");
109109
let ips = get_listen_ips(&authtoken, &self.network_id.clone().unwrap()).await?;
@@ -115,7 +115,7 @@ impl Launcher {
115115
ips.iter()
116116
.map(|i| parse_ip_from_cidr(i.clone()).to_string())
117117
.collect(),
118-
config.clone(),
118+
client.clone(),
119119
self.network_id.clone().unwrap(),
120120
)
121121
.await?;
@@ -143,14 +143,12 @@ impl Launcher {
143143

144144
let member_name = get_member_name(authtoken, domain_name.clone()).await?;
145145

146-
let network = zerotier_central_api::apis::network_api::get_network_by_id(
147-
&config,
148-
&self.network_id.clone().unwrap(),
149-
)
150-
.await?;
146+
let network = client
147+
.get_network_by_id(&self.network_id.clone().unwrap())
148+
.await?;
151149

152150
if let Some(v6assign) = network.config.clone().unwrap().v6_assign_mode {
153-
if v6assign.var_6plane.unwrap_or(false) {
151+
if v6assign._6plane.unwrap_or(false) {
154152
warn!("6PLANE PTR records are not yet supported");
155153
}
156154

@@ -169,7 +167,7 @@ impl Launcher {
169167
RecordAuthority::new(domain_name.clone().into(), member_name.clone()).await?;
170168

171169
let ztauthority = ZTAuthority {
172-
config,
170+
client,
173171
network_id: self.network_id.clone().unwrap(),
174172
hosts: None, // this will be parsed later.
175173
hosts_file: self.hosts.clone(),

src/traits.rs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use lazy_static::lazy_static;
66
use regex::Regex;
77
use trust_dns_resolver::{proto::error::ProtoError, IntoName, Name};
88
use trust_dns_server::client::rr::LowerName;
9-
use zerotier_central_api::models::Member;
9+
use zerotier_central_api::types::Member;
1010

1111
pub trait ToPointerSOA {
1212
fn to_ptr_soa_name(&self) -> Result<LowerName, ProtoError>;
@@ -106,7 +106,7 @@ mod tests {
106106
use ipnetwork::IpNetwork;
107107
use trust_dns_resolver::Name;
108108
use trust_dns_server::client::rr::LowerName;
109-
use zerotier_central_api::models::Member;
109+
use zerotier_central_api::types::Member;
110110

111111
#[test]
112112
fn test_to_ptr_soa_name() {
@@ -153,7 +153,22 @@ mod tests {
153153

154154
#[test]
155155
fn test_to_hostname_member() {
156-
let mut member = Member::new();
156+
let mut member = Member {
157+
supports_rules_engine: None,
158+
protocol_version: None,
159+
physical_address: None,
160+
node_id: None,
161+
network_id: None,
162+
name: None,
163+
last_online: None,
164+
id: None,
165+
hidden: None,
166+
description: None,
167+
controller_id: None,
168+
config: None,
169+
client_version: None,
170+
clock: None,
171+
};
157172
member.node_id = Some("foo".to_string());
158173
let hostname = member.to_hostname().unwrap();
159174
assert_eq!(hostname, Name::from_str("zt-foo").unwrap());

0 commit comments

Comments
 (0)