Skip to main content

uptrakit_openapi_client/
oidc_providers.rs

1use crate::Result;
2use crate::UptrakitClient;
3use crate::types_impl::oidc_providers::{
4    CreateOidcProviderRequest, OidcProviderResponse, UpdateOidcProviderRequest,
5};
6use uuid::Uuid;
7
8impl UptrakitClient {
9    /// Create a new OIDC provider.
10    pub async fn create_oidc_provider(
11        &self,
12        req: &CreateOidcProviderRequest,
13    ) -> Result<OidcProviderResponse> {
14        self.post_json(crate::paths::oidc_providers::BASE, req)
15            .await
16    }
17
18    /// List all OIDC providers.
19    pub async fn list_oidc_providers(&self) -> Result<Vec<OidcProviderResponse>> {
20        self.get(crate::paths::oidc_providers::BASE).await
21    }
22
23    /// Get a single OIDC provider by ID.
24    pub async fn get_oidc_provider(&self, id: &Uuid) -> Result<OidcProviderResponse> {
25        self.get(&crate::paths::oidc_providers::by_id(id)).await
26    }
27
28    /// Update an existing OIDC provider.
29    pub async fn update_oidc_provider(
30        &self,
31        id: &Uuid,
32        req: &UpdateOidcProviderRequest,
33    ) -> Result<OidcProviderResponse> {
34        self.put_json(&crate::paths::oidc_providers::by_id(id), req)
35            .await
36    }
37
38    /// Delete an OIDC provider.
39    pub async fn delete_oidc_provider(&self, id: &Uuid) -> Result<()> {
40        self.delete(&crate::paths::oidc_providers::by_id(id)).await
41    }
42
43    /// Activate an OIDC provider.
44    pub async fn activate_oidc_provider(&self, id: &Uuid) -> Result<OidcProviderResponse> {
45        self.post_empty(&crate::paths::oidc_providers::activate(id))
46            .await
47    }
48
49    /// Deactivate an OIDC provider.
50    pub async fn deactivate_oidc_provider(&self, id: &Uuid) -> Result<OidcProviderResponse> {
51        self.post_empty(&crate::paths::oidc_providers::deactivate(id))
52            .await
53    }
54}
55
56#[cfg(test)]
57mod tests {
58    use crate::types_impl::SecretString;
59    use crate::types_impl::oidc_providers::{CreateOidcProviderRequest, UpdateOidcProviderRequest};
60    use std::collections::HashMap;
61
62    #[test]
63    fn create_oidc_provider_request_serialization() {
64        let req = CreateOidcProviderRequest {
65            name: "Google".to_string(),
66            slug: "google".to_string(),
67            logo_url: None,
68            issuer_url: "https://accounts.google.com".to_string(),
69            client_id: "client-id-123".to_string(),
70            client_secret: SecretString::new("client-secret-456"),
71            scopes: "openid email profile groups".to_string(),
72            auto_create_users: true,
73            allow_private_network_issuers: Some(true),
74            role_claim_path: None,
75            role_mapping: HashMap::new(),
76        };
77        let json = serde_json::to_value(&req).expect("serialize");
78        assert_eq!(json["name"], "Google");
79        assert_eq!(json["slug"], "google");
80        assert_eq!(json["issuer_url"], "https://accounts.google.com");
81        assert_eq!(json["client_id"], "client-id-123");
82        assert_eq!(json["client_secret"], "client-secret-456");
83        assert_eq!(json["auto_create_users"], true);
84    }
85
86    #[test]
87    fn update_oidc_provider_request_serialization() {
88        let req = UpdateOidcProviderRequest {
89            name: Some("Google Workspace".to_string()),
90            slug: None,
91            logo_url: None,
92            issuer_url: None,
93            client_id: None,
94            client_secret: None,
95            scopes: None,
96            auto_create_users: Some(false),
97            allow_private_network_issuers: Some(false),
98            role_claim_path: None,
99            role_mapping: None,
100        };
101        let json = serde_json::to_value(&req).expect("serialize");
102        assert_eq!(json["name"], "Google Workspace");
103        assert_eq!(json["auto_create_users"], false);
104    }
105}