Skip to main content

dnslib/vendors/technitium/
mod.rs

1pub 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}