1use crate::config::signer::SignerClientConfig;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Serialize, Deserialize, Clone, Default)]
11pub struct AisConfig {
12 #[serde(default)]
14 pub server: AisServerConfig,
15
16 #[serde(default)]
18 pub dependencies: AisDependencies,
19}
20
21#[derive(Debug, Serialize, Deserialize, Clone)]
23pub struct AisServerConfig {
24 #[serde(default = "default_signaling_heartbeat_interval_secs")]
28 pub signaling_heartbeat_interval_secs: u32,
29
30 #[serde(default = "default_token_ttl_secs")]
34 pub token_ttl_secs: u64,
35
36 #[serde(default = "default_renewal_token_ttl_secs")]
41 pub renewal_token_ttl_secs: u64,
42
43 #[serde(default = "default_renewal_rotation_window_secs")]
48 pub renewal_rotation_window_secs: u64,
49
50 #[serde(default)]
55 pub renewal_token_secret: String,
56}
57
58#[derive(Debug, Serialize, Deserialize, Clone, Default)]
60pub struct AisDependencies {
61 #[serde(default)]
67 pub signer: Option<SignerClientConfig>,
68}
69
70impl Default for AisServerConfig {
71 fn default() -> Self {
72 Self {
73 signaling_heartbeat_interval_secs: default_signaling_heartbeat_interval_secs(),
74 token_ttl_secs: default_token_ttl_secs(),
75 renewal_token_ttl_secs: default_renewal_token_ttl_secs(),
76 renewal_rotation_window_secs: default_renewal_rotation_window_secs(),
77 renewal_token_secret: String::new(),
78 }
79 }
80}
81
82fn default_signaling_heartbeat_interval_secs() -> u32 {
84 30
85}
86
87fn default_token_ttl_secs() -> u64 {
89 3600
90}
91
92fn default_renewal_token_ttl_secs() -> u64 {
94 86400
95}
96
97fn default_renewal_rotation_window_secs() -> u64 {
99 21600
100}
101
102impl AisConfig {
103 pub fn get_signer_client_config(
110 &self,
111 global_config: &super::ActrixConfig,
112 ) -> Option<SignerClientConfig> {
113 if let Some(ref signer_config) = self.dependencies.signer {
115 return Some(signer_config.clone());
116 }
117
118 if global_config.is_signer_enabled() && global_config.services.signer.is_some() {
120 let http_cfg = global_config.bind.http.as_ref();
123 let port = http_cfg.map(|h| h.port).unwrap_or(8080);
124 let use_tls = http_cfg.is_some_and(|h| h.is_tls());
125 let protocol = if use_tls { "https" } else { "http" };
126 let tls_domain = if use_tls {
127 http_cfg.map(|h| h.domain_name.clone())
128 } else {
129 None
130 };
131
132 return Some(SignerClientConfig {
133 endpoint: format!("{protocol}://127.0.0.1:{port}"),
134 timeout_seconds: 30,
135 enable_tls: use_tls,
136 tls_domain,
137 ca_cert: None,
138 client_cert: None,
139 client_key: None,
140 });
141 }
142
143 None
144 }
145}