cx_sdk/client/
ip_access.rs1use cx_api::proto::com::coralogixapis::aaa::v1::{
16    CreateCompanyIpAccessSettingsRequest,
17    CreateCompanyIpAccessSettingsResponse,
18    DeleteCompanyIpAccessSettingsRequest,
19    DeleteCompanyIpAccessSettingsResponse,
20    GetCompanyIpAccessSettingsRequest,
21    GetCompanyIpAccessSettingsResponse,
22    ReplaceCompanyIpAccessSettingsRequest,
23    ReplaceCompanyIpAccessSettingsResponse,
24    ip_access_service_client::IpAccessServiceClient,
25};
26
27use std::str::FromStr;
28
29use crate::{
30    CoralogixRegion,
31    auth::AuthContext,
32    error::{
33        Result,
34        SdkApiError,
35        SdkError,
36    },
37    metadata::CallProperties,
38    util::make_request_with_metadata,
39};
40
41use tokio::sync::Mutex;
42use tonic::{
43    metadata::MetadataMap,
44    transport::{
45        Channel,
46        ClientTlsConfig,
47        Endpoint,
48    },
49};
50
51pub use crate::com::coralogixapis::aaa::v1::{
52    CompanyIpAccessSettings,
53    CoralogixCustomerSupportAccess,
54    IpAccess,
55};
56
57const IP_ACCESS_FEATURE_GROUP_ID: &str = "aaa";
58
59pub struct IpAccessClient {
62    metadata_map: MetadataMap,
63    service_client: Mutex<IpAccessServiceClient<Channel>>,
64}
65
66impl IpAccessClient {
67    pub fn new(auth_context: AuthContext, region: CoralogixRegion) -> Result<Self> {
73        let channel: Channel = Endpoint::from_str(region.grpc_endpoint().as_str())?
74            .tls_config(ClientTlsConfig::new().with_native_roots())?
75            .connect_lazy();
76
77        let request_metadata: CallProperties = (&auth_context.team_level_api_key).into();
79
80        Ok(Self {
81            metadata_map: request_metadata.to_metadata_map(),
82            service_client: Mutex::new(IpAccessServiceClient::new(channel)),
83        })
84    }
85
86    pub async fn create(
92        &self,
93        ip_access: Vec<IpAccess>,
94        support_access: CoralogixCustomerSupportAccess,
95    ) -> Result<CreateCompanyIpAccessSettingsResponse> {
96        let req = CreateCompanyIpAccessSettingsRequest {
97            ip_access,
98            enable_coralogix_customer_support_access: support_access.into(),
99        };
100
101        let request = make_request_with_metadata(req, &self.metadata_map);
102
103        self.service_client
104            .lock()
105            .await
106            .create_company_ip_access_settings(request)
107            .await
108            .map(|r| r.into_inner())
109            .map_err(|status| {
110                SdkError::ApiError(SdkApiError {
111                    status,
112                    endpoint:
113                        "/com.coralogixapis.aaa.v1.IpAccessService/CreateCompanyIpAccessSettings"
114                            .into(),
115                    feature_group: IP_ACCESS_FEATURE_GROUP_ID.into(),
116                })
117            })
118    }
119
120    pub async fn replace(
127        &self,
128        id: Option<String>,
129        ip_access: Vec<IpAccess>,
130        support_access: CoralogixCustomerSupportAccess,
131    ) -> Result<ReplaceCompanyIpAccessSettingsResponse> {
132        let req = ReplaceCompanyIpAccessSettingsRequest {
133            id,
134            ip_access,
135            enable_coralogix_customer_support_access: support_access.into(),
136        };
137
138        let request = make_request_with_metadata(req, &self.metadata_map);
139
140        self.service_client
141            .lock()
142            .await
143            .replace_company_ip_access_settings(request)
144            .await
145            .map(|r| r.into_inner())
146            .map_err(|status| {
147                SdkError::ApiError(SdkApiError {
148                    status,
149                    endpoint:
150                        "/com.coralogixapis.aaa.v1.IpAccessService/ReplaceCompanyIpAccessSettings"
151                            .into(),
152                    feature_group: IP_ACCESS_FEATURE_GROUP_ID.into(),
153                })
154            })
155    }
156
157    pub async fn get(&self, id: Option<String>) -> Result<GetCompanyIpAccessSettingsResponse> {
162        let req = GetCompanyIpAccessSettingsRequest { id };
163
164        let request = make_request_with_metadata(req, &self.metadata_map);
165
166        self.service_client
167            .lock()
168            .await
169            .get_company_ip_access_settings(request)
170            .await
171            .map(|r| r.into_inner())
172            .map_err(|status| {
173                SdkError::ApiError(SdkApiError {
174                    status,
175                    endpoint:
176                        "/com.coralogixapis.aaa.v1.IpAccessService/GetCompanyIpAccessSettings"
177                            .into(),
178                    feature_group: IP_ACCESS_FEATURE_GROUP_ID.into(),
179                })
180            })
181    }
182
183    pub async fn delete(
188        &self,
189        id: Option<String>,
190    ) -> Result<DeleteCompanyIpAccessSettingsResponse> {
191        let req = DeleteCompanyIpAccessSettingsRequest { id };
192
193        let request = make_request_with_metadata(req, &self.metadata_map);
194
195        self.service_client
196            .lock()
197            .await
198            .delete_company_ip_access_settings(request)
199            .await
200            .map(|r| r.into_inner())
201            .map_err(|status| {
202                SdkError::ApiError(SdkApiError {
203                    status,
204                    endpoint:
205                        "/com.coralogixapis.aaa.v1.IpAccessService/DeleteCompanyIpAccessSettings"
206                            .into(),
207                    feature_group: IP_ACCESS_FEATURE_GROUP_ID.into(),
208                })
209            })
210    }
211}