use crate::config::signer::SignerClientConfig;
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize, Clone, Default)]
pub struct AisConfig {
#[serde(default)]
pub server: AisServerConfig,
#[serde(default)]
pub dependencies: AisDependencies,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct AisServerConfig {
#[serde(default = "default_signaling_heartbeat_interval_secs")]
pub signaling_heartbeat_interval_secs: u32,
#[serde(default = "default_token_ttl_secs")]
pub token_ttl_secs: u64,
#[serde(default = "default_renewal_token_ttl_secs")]
pub renewal_token_ttl_secs: u64,
#[serde(default = "default_renewal_rotation_window_secs")]
pub renewal_rotation_window_secs: u64,
#[serde(default)]
pub renewal_token_secret: String,
}
#[derive(Debug, Serialize, Deserialize, Clone, Default)]
pub struct AisDependencies {
#[serde(default)]
pub signer: Option<SignerClientConfig>,
}
impl Default for AisServerConfig {
fn default() -> Self {
Self {
signaling_heartbeat_interval_secs: default_signaling_heartbeat_interval_secs(),
token_ttl_secs: default_token_ttl_secs(),
renewal_token_ttl_secs: default_renewal_token_ttl_secs(),
renewal_rotation_window_secs: default_renewal_rotation_window_secs(),
renewal_token_secret: String::new(),
}
}
}
fn default_signaling_heartbeat_interval_secs() -> u32 {
30
}
fn default_token_ttl_secs() -> u64 {
3600
}
fn default_renewal_token_ttl_secs() -> u64 {
86400
}
fn default_renewal_rotation_window_secs() -> u64 {
21600
}
impl AisConfig {
pub fn get_signer_client_config(
&self,
global_config: &super::ActrixConfig,
) -> Option<SignerClientConfig> {
if let Some(ref signer_config) = self.dependencies.signer {
return Some(signer_config.clone());
}
if global_config.is_signer_enabled() && global_config.services.signer.is_some() {
let http_cfg = global_config.bind.http.as_ref();
let port = http_cfg.map(|h| h.port).unwrap_or(8080);
let use_tls = http_cfg.is_some_and(|h| h.is_tls());
let protocol = if use_tls { "https" } else { "http" };
let tls_domain = if use_tls {
http_cfg.map(|h| h.domain_name.clone())
} else {
None
};
return Some(SignerClientConfig {
endpoint: format!("{protocol}://127.0.0.1:{port}"),
timeout_seconds: 30,
enable_tls: use_tls,
tls_domain,
ca_cert: None,
client_cert: None,
client_key: None,
});
}
None
}
}