1use std::sync::Arc;
12
13use async_trait::async_trait;
14#[cfg(feature = "mockall")]
15use mockall::automock;
16use reqwest;
17use serde::{Deserialize, Serialize, de::Error as _};
18
19use super::{Error, configuration};
20use crate::{
21 apis::{AuthRequired, ContentType, ResponseContent},
22 models,
23};
24
25#[cfg_attr(feature = "mockall", automock)]
26#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
27#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
28pub trait ServiceAccountsApi: Send + Sync {
29 async fn bulk_delete<'a>(
31 &self,
32 uuid_colon_colon_uuid: Option<Vec<uuid::Uuid>>,
33 ) -> Result<models::BulkDeleteResponseModelListResponseModel, Error>;
34
35 async fn create<'a>(
37 &self,
38 organization_id: uuid::Uuid,
39 service_account_create_request_model: Option<models::ServiceAccountCreateRequestModel>,
40 ) -> Result<models::ServiceAccountResponseModel, Error>;
41
42 async fn create_access_token<'a>(
44 &self,
45 id: uuid::Uuid,
46 access_token_create_request_model: Option<models::AccessTokenCreateRequestModel>,
47 ) -> Result<models::AccessTokenCreationResponseModel, Error>;
48
49 async fn get_access_tokens<'a>(
51 &self,
52 id: uuid::Uuid,
53 ) -> Result<models::AccessTokenResponseModelListResponseModel, Error>;
54
55 async fn get_by_service_account_id<'a>(
57 &self,
58 id: uuid::Uuid,
59 ) -> Result<models::ServiceAccountResponseModel, Error>;
60
61 async fn list_by_organization<'a>(
63 &self,
64 organization_id: uuid::Uuid,
65 include_access_to_secrets: Option<bool>,
66 ) -> Result<models::ServiceAccountSecretsDetailsResponseModelListResponseModel, Error>;
67
68 async fn revoke_access_tokens<'a>(
70 &self,
71 id: uuid::Uuid,
72 revoke_access_tokens_request: Option<models::RevokeAccessTokensRequest>,
73 ) -> Result<(), Error>;
74
75 async fn update<'a>(
77 &self,
78 id: uuid::Uuid,
79 service_account_update_request_model: Option<models::ServiceAccountUpdateRequestModel>,
80 ) -> Result<models::ServiceAccountResponseModel, Error>;
81}
82
83pub struct ServiceAccountsApiClient {
84 configuration: Arc<configuration::Configuration>,
85}
86
87impl ServiceAccountsApiClient {
88 pub fn new(configuration: Arc<configuration::Configuration>) -> Self {
89 Self { configuration }
90 }
91}
92
93#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
94#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
95impl ServiceAccountsApi for ServiceAccountsApiClient {
96 async fn bulk_delete<'a>(
97 &self,
98 uuid_colon_colon_uuid: Option<Vec<uuid::Uuid>>,
99 ) -> Result<models::BulkDeleteResponseModelListResponseModel, Error> {
100 let local_var_configuration = &self.configuration;
101
102 let local_var_client = &local_var_configuration.client;
103
104 let local_var_uri_str = format!(
105 "{}/service-accounts/delete",
106 local_var_configuration.base_path
107 );
108 let mut local_var_req_builder =
109 local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
110
111 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
112 local_var_req_builder = local_var_req_builder.json(&uuid_colon_colon_uuid);
113
114 bitwarden_api_base::process_with_json_response(local_var_req_builder).await
115 }
116
117 async fn create<'a>(
118 &self,
119 organization_id: uuid::Uuid,
120 service_account_create_request_model: Option<models::ServiceAccountCreateRequestModel>,
121 ) -> Result<models::ServiceAccountResponseModel, Error> {
122 let local_var_configuration = &self.configuration;
123
124 let local_var_client = &local_var_configuration.client;
125
126 let local_var_uri_str = format!(
127 "{}/organizations/{organizationId}/service-accounts",
128 local_var_configuration.base_path,
129 organizationId = organization_id
130 );
131 let mut local_var_req_builder =
132 local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
133
134 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
135 local_var_req_builder = local_var_req_builder.json(&service_account_create_request_model);
136
137 bitwarden_api_base::process_with_json_response(local_var_req_builder).await
138 }
139
140 async fn create_access_token<'a>(
141 &self,
142 id: uuid::Uuid,
143 access_token_create_request_model: Option<models::AccessTokenCreateRequestModel>,
144 ) -> Result<models::AccessTokenCreationResponseModel, Error> {
145 let local_var_configuration = &self.configuration;
146
147 let local_var_client = &local_var_configuration.client;
148
149 let local_var_uri_str = format!(
150 "{}/service-accounts/{id}/access-tokens",
151 local_var_configuration.base_path,
152 id = id
153 );
154 let mut local_var_req_builder =
155 local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
156
157 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
158 local_var_req_builder = local_var_req_builder.json(&access_token_create_request_model);
159
160 bitwarden_api_base::process_with_json_response(local_var_req_builder).await
161 }
162
163 async fn get_access_tokens<'a>(
164 &self,
165 id: uuid::Uuid,
166 ) -> Result<models::AccessTokenResponseModelListResponseModel, Error> {
167 let local_var_configuration = &self.configuration;
168
169 let local_var_client = &local_var_configuration.client;
170
171 let local_var_uri_str = format!(
172 "{}/service-accounts/{id}/access-tokens",
173 local_var_configuration.base_path,
174 id = id
175 );
176 let mut local_var_req_builder =
177 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
178
179 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
180
181 bitwarden_api_base::process_with_json_response(local_var_req_builder).await
182 }
183
184 async fn get_by_service_account_id<'a>(
185 &self,
186 id: uuid::Uuid,
187 ) -> Result<models::ServiceAccountResponseModel, Error> {
188 let local_var_configuration = &self.configuration;
189
190 let local_var_client = &local_var_configuration.client;
191
192 let local_var_uri_str = format!(
193 "{}/service-accounts/{id}",
194 local_var_configuration.base_path,
195 id = id
196 );
197 let mut local_var_req_builder =
198 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
199
200 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
201
202 bitwarden_api_base::process_with_json_response(local_var_req_builder).await
203 }
204
205 async fn list_by_organization<'a>(
206 &self,
207 organization_id: uuid::Uuid,
208 include_access_to_secrets: Option<bool>,
209 ) -> Result<models::ServiceAccountSecretsDetailsResponseModelListResponseModel, Error> {
210 let local_var_configuration = &self.configuration;
211
212 let local_var_client = &local_var_configuration.client;
213
214 let local_var_uri_str = format!(
215 "{}/organizations/{organizationId}/service-accounts",
216 local_var_configuration.base_path,
217 organizationId = organization_id
218 );
219 let mut local_var_req_builder =
220 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
221
222 if let Some(ref param_value) = include_access_to_secrets {
223 local_var_req_builder = local_var_req_builder
224 .query(&[("includeAccessToSecrets", ¶m_value.to_string())]);
225 }
226 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
227
228 bitwarden_api_base::process_with_json_response(local_var_req_builder).await
229 }
230
231 async fn revoke_access_tokens<'a>(
232 &self,
233 id: uuid::Uuid,
234 revoke_access_tokens_request: Option<models::RevokeAccessTokensRequest>,
235 ) -> Result<(), Error> {
236 let local_var_configuration = &self.configuration;
237
238 let local_var_client = &local_var_configuration.client;
239
240 let local_var_uri_str = format!(
241 "{}/service-accounts/{id}/access-tokens/revoke",
242 local_var_configuration.base_path,
243 id = id
244 );
245 let mut local_var_req_builder =
246 local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
247
248 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
249 local_var_req_builder = local_var_req_builder.json(&revoke_access_tokens_request);
250
251 bitwarden_api_base::process_with_empty_response(local_var_req_builder).await
252 }
253
254 async fn update<'a>(
255 &self,
256 id: uuid::Uuid,
257 service_account_update_request_model: Option<models::ServiceAccountUpdateRequestModel>,
258 ) -> Result<models::ServiceAccountResponseModel, Error> {
259 let local_var_configuration = &self.configuration;
260
261 let local_var_client = &local_var_configuration.client;
262
263 let local_var_uri_str = format!(
264 "{}/service-accounts/{id}",
265 local_var_configuration.base_path,
266 id = id
267 );
268 let mut local_var_req_builder =
269 local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str());
270
271 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
272 local_var_req_builder = local_var_req_builder.json(&service_account_update_request_model);
273
274 bitwarden_api_base::process_with_json_response(local_var_req_builder).await
275 }
276}