dnslib/vendors/technitium/
mod.rs1pub mod client;
2pub mod config;
3pub mod mapping;
4pub mod responses;
5pub mod service;
6
7use std::env;
8
9use crate::control_plane::config::{self as app_config, DnsServerConfig};
10use crate::core::error::{Error, Result};
11use crate::core::secret::ApiToken;
12use crate::vendors::runtime::ClientOverrides;
13
14pub fn client_from_cli_without_config(
15 overrides: ClientOverrides<'_>,
16) -> Result<client::TechnitiumClient> {
17 let base_url = overrides
18 .base_url
19 .map(ToOwned::to_owned)
20 .or_else(|| env::var("DNSYNC_TECHNITIUM_BASE_URL").ok())
21 .or_else(|| env::var("TECHNITIUM_BASE_URL").ok())
22 .unwrap_or_else(|| app_config::TECHNITIUM_DEFAULT_BASE_URL.to_string());
23 let token = overrides
24 .token
25 .map(ToOwned::to_owned)
26 .or_else(|| env::var("DNSYNC_TECHNITIUM_API_TOKEN").ok())
27 .or_else(|| env::var("TECHNITIUM_API_TOKEN").ok())
28 .ok_or_else(|| {
29 Error::parse(
30 "API token is required from --token, DNSYNC_TECHNITIUM_API_TOKEN, TECHNITIUM_API_TOKEN, or config",
31 )
32 })
33 .map(ApiToken::new)?;
34 client::TechnitiumClient::new(base_url, token)
35}
36
37pub fn client_from_server(
38 server: &DnsServerConfig,
39 overrides: ClientOverrides<'_>,
40) -> Result<client::TechnitiumClient> {
41 let base_url = overrides
42 .base_url
43 .map(ToOwned::to_owned)
44 .or_else(|| env::var("DNSYNC_TECHNITIUM_BASE_URL").ok())
45 .or_else(|| env::var("TECHNITIUM_BASE_URL").ok())
46 .or_else(|| server.base_url_env.as_ref().and_then(|k| env::var(k).ok()))
47 .or_else(|| server.base_url.clone())
48 .unwrap_or_else(|| app_config::TECHNITIUM_DEFAULT_BASE_URL.to_string());
49 let token = overrides
50 .token
51 .map(ToOwned::to_owned)
52 .or_else(|| env::var("DNSYNC_TECHNITIUM_API_TOKEN").ok())
53 .or_else(|| env::var("TECHNITIUM_API_TOKEN").ok())
54 .or_else(|| server.token_env.as_ref().and_then(|k| env::var(k).ok()))
55 .or_else(|| server.token.clone())
56 .ok_or_else(|| {
57 Error::parse(
58 "API token is required from --token, DNSYNC_TECHNITIUM_API_TOKEN, TECHNITIUM_API_TOKEN, token_env, or config token",
59 )
60 })
61 .map(ApiToken::new)?;
62 client::TechnitiumClient::new(base_url, token)
63}