Skip to main content

uptrakit_openapi_client/
settings.rs

1use crate::Result;
2use crate::UptrakitClient;
3use crate::types_impl::server_cert::RenewServerCertResponse;
4use crate::types_impl::settings::{
5    RegistrationSettingsResponse, UpdateRegistrationSettingsRequest,
6};
7use crate::types_impl::settings_agent_certs::{
8    AgentCertificateSettingsResponse, UpdateAgentCertificateSettingsRequest,
9};
10use crate::types_impl::settings_auth::{
11    AuthenticationSettingsResponse, UpdateAuthenticationSettingsRequest,
12};
13use crate::types_impl::settings_ca::RotateCaResponse;
14use crate::types_impl::settings_combined::{
15    CombinedSettingsResponse, GlobalSettingsCombinedResponse,
16};
17use crate::types_impl::settings_network::{NetworkSettingsResponse, UpdateNetworkSettingsRequest};
18use crate::types_impl::settings_reset::{ResetDataRequest, ResetDataResponse};
19
20impl UptrakitClient {
21    /// Get combined global settings (network, system services, MQTT limit, optional NATS).
22    pub async fn get_global_combined_settings(&self) -> Result<GlobalSettingsCombinedResponse> {
23        self.get(crate::paths::global_settings::COMBINED).await
24    }
25
26    /// Get combined settings (registration, authentication, certificates, enrollment tokens).
27    pub async fn get_combined_settings(&self) -> Result<CombinedSettingsResponse> {
28        self.get(crate::paths::settings::COMBINED).await
29    }
30
31    /// Get registration settings.
32    pub async fn get_registration_settings(&self) -> Result<RegistrationSettingsResponse> {
33        self.get(crate::paths::settings::REGISTRATION).await
34    }
35
36    /// Update registration settings.
37    pub async fn update_registration_settings(
38        &self,
39        req: &UpdateRegistrationSettingsRequest,
40    ) -> Result<RegistrationSettingsResponse> {
41        self.put_json(crate::paths::settings::REGISTRATION, req)
42            .await
43    }
44
45    /// Get authentication settings.
46    pub async fn get_authentication_settings(&self) -> Result<AuthenticationSettingsResponse> {
47        self.get(crate::paths::settings::AUTHENTICATION).await
48    }
49
50    /// Update authentication settings.
51    pub async fn update_authentication_settings(
52        &self,
53        req: &UpdateAuthenticationSettingsRequest,
54    ) -> Result<AuthenticationSettingsResponse> {
55        self.put_json(crate::paths::settings::AUTHENTICATION, req)
56            .await
57    }
58
59    /// Get agent certificate settings.
60    pub async fn get_agent_certificate_settings(&self) -> Result<AgentCertificateSettingsResponse> {
61        self.get(crate::paths::settings::AGENT_CERTIFICATES).await
62    }
63
64    /// Update agent certificate settings.
65    pub async fn update_agent_certificate_settings(
66        &self,
67        req: &UpdateAgentCertificateSettingsRequest,
68    ) -> Result<AgentCertificateSettingsResponse> {
69        self.put_json(crate::paths::settings::AGENT_CERTIFICATES, req)
70            .await
71    }
72
73    /// Get network settings.
74    pub async fn get_network_settings(&self) -> Result<NetworkSettingsResponse> {
75        self.get(crate::paths::settings::NETWORK).await
76    }
77
78    /// Update network settings.
79    pub async fn update_network_settings(
80        &self,
81        req: &UpdateNetworkSettingsRequest,
82    ) -> Result<NetworkSettingsResponse> {
83        self.put_json(crate::paths::settings::NETWORK, req).await
84    }
85
86    /// Rotate the CA certificate.
87    pub async fn rotate_ca(&self) -> Result<RotateCaResponse> {
88        self.post_empty(crate::paths::settings::ROTATE_CA).await
89    }
90
91    /// Renew the server TLS certificate.
92    pub async fn renew_server_certificate(&self) -> Result<RenewServerCertResponse> {
93        self.post_empty(crate::paths::settings::RENEW_SERVER_CERT)
94            .await
95    }
96
97    /// Reset all tenant-scoped data.
98    pub async fn reset_data(&self, req: &ResetDataRequest) -> Result<ResetDataResponse> {
99        self.post_json(crate::paths::settings::RESET_DATA, req)
100            .await
101    }
102}
103
104#[cfg(test)]
105mod tests {
106    use crate::types_impl::SecretString;
107    use crate::types_impl::registration::RegistrationMode;
108    use crate::types_impl::settings::UpdateRegistrationSettingsRequest;
109    use crate::types_impl::settings_agent_certs::UpdateAgentCertificateSettingsRequest;
110    use crate::types_impl::settings_auth::UpdateAuthenticationSettingsRequest;
111    use crate::types_impl::settings_network::UpdateNetworkSettingsRequest;
112
113    #[test]
114    fn update_registration_settings_serialization() {
115        let req = UpdateRegistrationSettingsRequest {
116            mode: RegistrationMode::Invite,
117            token: Some(SecretString::new("my-invite-token")),
118            require_token_for_oidc: Some(true),
119        };
120        let json = serde_json::to_value(&req).expect("serialize");
121        assert_eq!(json["mode"], "invite");
122        assert_eq!(json["token"], "my-invite-token");
123        assert_eq!(json["require_token_for_oidc"], true);
124    }
125
126    #[test]
127    fn update_authentication_settings_serialization() {
128        let req = UpdateAuthenticationSettingsRequest {
129            password_auth_enabled: Some(false),
130        };
131        let json = serde_json::to_value(&req).expect("serialize");
132        assert_eq!(json["password_auth_enabled"], false);
133    }
134
135    #[test]
136    fn update_agent_certificate_settings_serialization() {
137        let req = UpdateAgentCertificateSettingsRequest {
138            lifetime_hours: Some(8_760),
139            renewal_window_hours: Some(72),
140        };
141        let json = serde_json::to_value(&req).expect("serialize");
142        assert_eq!(json["lifetime_hours"], 8_760);
143        assert_eq!(json["renewal_window_hours"], 72);
144    }
145
146    #[test]
147    fn update_network_settings_serialization() {
148        let req = UpdateNetworkSettingsRequest {
149            trusted_proxies: Some(vec!["10.0.0.0/8".to_string()]),
150            real_ip_header: Some("X-Real-IP".to_string()),
151            sans: None,
152            https_addr: None,
153            forwarded_client_cert_info_header: None,
154            forwarded_client_cert_pem_header: None,
155            pki_addr: None,
156            regenerate_cert: None,
157        };
158        let json = serde_json::to_value(&req).expect("serialize");
159        assert_eq!(json["trusted_proxies"][0], "10.0.0.0/8");
160        assert_eq!(json["real_ip_header"], "X-Real-IP");
161    }
162}