1use hex;
8use reqwest;
9
10use crate::{apis::ResponseContent, propelauth::auth::AUTH_HOSTNAME_HEADER};
11
12use super::{configuration, Error};
13
14#[derive(Clone, Debug, Default, Serialize)]
16pub struct ApiKeyQueryParams {
17 pub user_id: Option<String>,
18 pub user_email: Option<String>,
19 pub org_id: Option<String>,
20 pub page_size: Option<i64>,
21 pub page_number: Option<i64>,
22}
23
24#[derive(Clone, Debug, Default, Serialize)]
26pub struct CreateApiKeyParams {
27 pub expires_at_seconds: Option<i64>,
28 pub metadata: Option<serde_json::Value>,
29 pub user_id: Option<String>,
30 pub org_id: Option<String>,
31}
32
33#[derive(Clone, Debug, Default, Serialize)]
35pub struct UpdateApiKeyParams {
36 pub expires_at_seconds: Option<i64>,
37 pub metadata: Option<serde_json::Value>,
38 pub set_to_never_expire: Option<bool>,
39}
40
41#[derive(Clone, Debug, Default, Serialize)]
43pub struct ValidateApiKeyParams {
44 pub api_key_token: String,
45}
46
47#[derive(Debug, Clone, Deserialize)]
49#[serde(untagged)]
50pub enum ApiKeyError {
51 BadRequest(crate::models::BadUpdateOrgRequest),
52 InvalidIntegrationAPIKey,
53 InvalidAPIKey {
54 message: String,
55 },
56 RateLimited {
57 wait_seconds: f64,
58 user_facing_error: String,
59 },
60 PropelAuthRateLimit,
61 InvalidPersonalAPIKey,
62 InvalidOrgAPIKey,
63 NotFound,
64 UnknownValue(serde_json::Value),
65 UnknownError,
66 UnexpectedExceptionWithSDK,
67}
68
69#[derive(Debug, Clone, Deserialize)]
70#[serde(untagged)]
71pub enum ApiKeyValidationErrorResponse {
72 InvalidEndUserApiKey {
73 api_key_token: String,
74 },
75 EndUserApiKeyRateLimited {
76 wait_seconds: f64,
77 error_code: String,
78 user_facing_error: String,
79 },
80}
81
82pub async fn fetch_current_api_keys(
83 configuration: &configuration::Configuration,
84 params: ApiKeyQueryParams,
85) -> Result<crate::models::FetchApiKeysPagedResponse, Error<ApiKeyError>> {
86 let client = &configuration.client;
87
88 let uri = format!(
89 "{}/api/backend/v1/end_user_api_keys",
90 configuration.base_path
91 );
92 let mut req_builder = client.request(reqwest::Method::GET, uri.as_str());
93
94 if let Some(ref user_id) = params.user_id {
96 req_builder = req_builder.query(&[("user_id", user_id)]);
97 }
98 if let Some(ref user_email) = params.user_email {
99 req_builder = req_builder.query(&[("user_email", user_email)]);
100 }
101 if let Some(ref org_id) = params.org_id {
102 req_builder = req_builder.query(&[("org_id", org_id)]);
103 }
104 if let Some(ref page_size) = params.page_size {
105 req_builder = req_builder.query(&[("page_size", page_size)]);
106 }
107 if let Some(ref page_number) = params.page_number {
108 req_builder = req_builder.query(&[("page_number", page_number)]);
109 }
110
111 if let Some(ref user_agent) = configuration.user_agent {
112 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
113 }
114 if let Some(ref bearer_token) = configuration.bearer_access_token {
115 req_builder = req_builder.bearer_auth(bearer_token.to_owned());
116 }
117 req_builder = req_builder.header(AUTH_HOSTNAME_HEADER, configuration.auth_hostname.to_owned());
118
119 let req = req_builder.build()?;
120 let resp = client.execute(req).await?;
121
122 let status = resp.status();
123 let content = resp.text().await?;
124
125 if !status.is_client_error() && !status.is_server_error() {
126 serde_json::from_str(&content).map_err(Error::from)
127 } else {
128 let entity: Option<ApiKeyError> = serde_json::from_str(&content).ok();
129 let error = ResponseContent {
130 status,
131 content,
132 entity,
133 };
134 Err(Error::ResponseError(error))
135 }
136}
137
138pub async fn fetch_archived_api_keys(
139 configuration: &configuration::Configuration,
140 params: ApiKeyQueryParams,
141) -> Result<crate::models::FetchApiKeysPagedResponse, Error<ApiKeyError>> {
142 let client = &configuration.client;
143
144 let uri = format!(
145 "{}/api/backend/v1/end_user_api_keys/archived",
146 configuration.base_path
147 );
148 let mut req_builder = client.request(reqwest::Method::GET, uri.as_str());
149
150 if let Some(ref user_id) = params.user_id {
152 req_builder = req_builder.query(&[("user_id", user_id)]);
153 }
154 if let Some(ref user_email) = params.user_email {
155 req_builder = req_builder.query(&[("user_email", user_email)]);
156 }
157 if let Some(ref org_id) = params.org_id {
158 req_builder = req_builder.query(&[("org_id", org_id)]);
159 }
160 if let Some(ref page_size) = params.page_size {
161 req_builder = req_builder.query(&[("page_size", page_size)]);
162 }
163 if let Some(ref page_number) = params.page_number {
164 req_builder = req_builder.query(&[("page_number", page_number)]);
165 }
166
167 if let Some(ref user_agent) = configuration.user_agent {
168 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
169 }
170 if let Some(ref bearer_token) = configuration.bearer_access_token {
171 req_builder = req_builder.bearer_auth(bearer_token.to_owned());
172 }
173 req_builder = req_builder.header(AUTH_HOSTNAME_HEADER, configuration.auth_hostname.to_owned());
174
175 let req = req_builder.build()?;
176 let resp = client.execute(req).await?;
177
178 let status = resp.status();
179 let content = resp.text().await?;
180
181 if !status.is_client_error() && !status.is_server_error() {
182 serde_json::from_str(&content).map_err(Error::from)
183 } else {
184 let entity: Option<ApiKeyError> = serde_json::from_str(&content).ok();
185 let error = ResponseContent {
186 status,
187 content,
188 entity,
189 };
190 Err(Error::ResponseError(error))
191 }
192}
193
194pub async fn fetch_api_key(
195 configuration: &configuration::Configuration,
196 api_key_id: String,
197) -> Result<crate::models::FetchApiKeyResponse, Error<ApiKeyError>> {
198 if hex::decode(&api_key_id).is_err() {
199 return Err(Error::Params("Invalid API key ID format".to_string()));
200 }
201
202 let client = &configuration.client;
203
204 let uri = format!(
205 "{}/api/backend/v1/end_user_api_keys/{}",
206 configuration.base_path, api_key_id
207 );
208 let mut req_builder = client.request(reqwest::Method::GET, uri.as_str());
209
210 if let Some(ref user_agent) = configuration.user_agent {
211 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
212 }
213 if let Some(ref bearer_token) = configuration.bearer_access_token {
214 req_builder = req_builder.bearer_auth(bearer_token.to_owned());
215 }
216 req_builder = req_builder.header(AUTH_HOSTNAME_HEADER, configuration.auth_hostname.to_owned());
217
218 let req = req_builder.build()?;
219 let resp = client.execute(req).await?;
220
221 let status = resp.status();
222 let content = resp.text().await?;
223
224 if !status.is_client_error() && !status.is_server_error() {
225 serde_json::from_str(&content).map_err(Error::from)
226 } else {
227 let entity: Option<ApiKeyError> = serde_json::from_str(&content).ok();
228 let error = ResponseContent {
229 status,
230 content,
231 entity,
232 };
233 Err(Error::ResponseError(error))
234 }
235}
236
237pub async fn create_api_key(
238 configuration: &configuration::Configuration,
239 params: CreateApiKeyParams,
240) -> Result<crate::models::CreateApiKeyResponse, Error<ApiKeyError>> {
241 let client = &configuration.client;
242
243 let uri = format!(
244 "{}/api/backend/v1/end_user_api_keys",
245 configuration.base_path
246 );
247 let mut req_builder = client.request(reqwest::Method::POST, uri.as_str());
248
249 if let Some(ref user_agent) = configuration.user_agent {
250 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
251 }
252 if let Some(ref bearer_token) = configuration.bearer_access_token {
253 req_builder = req_builder.bearer_auth(bearer_token.to_owned());
254 }
255 req_builder = req_builder.header(AUTH_HOSTNAME_HEADER, configuration.auth_hostname.to_owned());
256
257 req_builder = req_builder.json(¶ms);
258
259 let req = req_builder.build()?;
260 let resp = client.execute(req).await?;
261
262 let status = resp.status();
263 let content = resp.text().await?;
264
265 if !status.is_client_error() && !status.is_server_error() {
266 serde_json::from_str(&content).map_err(Error::from)
267 } else {
268 let entity: Option<ApiKeyError> = serde_json::from_str(&content).ok();
269 let error = ResponseContent {
270 status,
271 content,
272 entity,
273 };
274 Err(Error::ResponseError(error))
275 }
276}
277
278pub async fn update_api_key(
279 configuration: &configuration::Configuration,
280 api_key_id: String,
281 params: UpdateApiKeyParams,
282) -> Result<crate::models::SuccessfulResponse, Error<ApiKeyError>> {
283 if hex::decode(&api_key_id).is_err() {
284 return Err(Error::Params("Invalid API key ID format".to_string()));
285 }
286
287 let client = &configuration.client;
288
289 let uri = format!(
290 "{}/api/backend/v1/end_user_api_keys/{}",
291 configuration.base_path, api_key_id
292 );
293 let mut req_builder = client.request(reqwest::Method::PATCH, uri.as_str());
294
295 if let Some(ref user_agent) = configuration.user_agent {
296 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
297 }
298 if let Some(ref bearer_token) = configuration.bearer_access_token {
299 req_builder = req_builder.bearer_auth(bearer_token.to_owned());
300 }
301 req_builder = req_builder.header(AUTH_HOSTNAME_HEADER, configuration.auth_hostname.to_owned());
302
303 req_builder = req_builder.json(¶ms);
304
305 let req = req_builder.build()?;
306 let resp = client.execute(req).await?;
307
308 let status = resp.status();
309 let content = resp.text().await?;
310
311 if !status.is_client_error() && !status.is_server_error() {
312 serde_json::from_str(&content).map_err(Error::from)
313 } else {
314 let entity: Option<ApiKeyError> = serde_json::from_str(&content).ok();
315 let error = ResponseContent {
316 status,
317 content,
318 entity,
319 };
320 Err(Error::ResponseError(error))
321 }
322}
323
324pub async fn delete_api_key(
325 configuration: &configuration::Configuration,
326 api_key_id: String,
327) -> Result<crate::models::SuccessfulResponse, Error<ApiKeyError>> {
328 if hex::decode(&api_key_id).is_err() {
329 return Err(Error::Params("Invalid API key ID format".to_string()));
330 }
331
332 let client = &configuration.client;
333
334 let uri = format!(
335 "{}/api/backend/v1/end_user_api_keys/{}",
336 configuration.base_path, api_key_id
337 );
338 let mut req_builder = client.request(reqwest::Method::DELETE, uri.as_str());
339
340 if let Some(ref user_agent) = configuration.user_agent {
341 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
342 }
343 if let Some(ref bearer_token) = configuration.bearer_access_token {
344 req_builder = req_builder.bearer_auth(bearer_token.to_owned());
345 }
346 req_builder = req_builder.header(AUTH_HOSTNAME_HEADER, configuration.auth_hostname.to_owned());
347
348 let req = req_builder.build()?;
349 let resp = client.execute(req).await?;
350
351 let status = resp.status();
352 let content = resp.text().await?;
353
354 if !status.is_client_error() && !status.is_server_error() {
355 Ok(crate::models::successful_response::SuccessfulResponse { message: None })
356 } else {
357 let entity: Option<ApiKeyError> = serde_json::from_str(&content).ok();
358 let error = ResponseContent {
359 status,
360 content,
361 entity,
362 };
363 Err(Error::ResponseError(error))
364 }
365}
366
367pub async fn validate_api_key(
368 configuration: &configuration::Configuration,
369 params: ValidateApiKeyParams,
370) -> Result<crate::models::ValidateApiKeyResponse, Error<ApiKeyValidationErrorResponse>> {
371 let client = &configuration.client;
372
373 let uri = format!(
374 "{}/api/backend/v1/end_user_api_keys/validate",
375 configuration.base_path
376 );
377 let mut req_builder = client.request(reqwest::Method::POST, uri.as_str());
378
379 if let Some(ref user_agent) = configuration.user_agent {
380 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
381 }
382 if let Some(ref bearer_token) = configuration.bearer_access_token {
383 req_builder = req_builder.bearer_auth(bearer_token.to_owned());
384 }
385 req_builder = req_builder.header(AUTH_HOSTNAME_HEADER, configuration.auth_hostname.to_owned());
386
387 req_builder = req_builder.json(¶ms);
388
389 let req = req_builder.build()?;
390 let resp = client.execute(req).await?;
391
392 let status = resp.status();
393 let content = resp.text().await?;
394
395 if !status.is_client_error() && !status.is_server_error() {
396 serde_json::from_str(&content).map_err(Error::from)
397 } else {
398 let entity: Option<ApiKeyValidationErrorResponse> = serde_json::from_str(&content).ok();
399 let error = ResponseContent {
400 status,
401 content,
402 entity,
403 };
404 Err(Error::ResponseError(error))
405 }
406}