bitwarden_core/auth/api/request/
mod.rs1#[cfg(feature = "secrets")]
2mod access_token_request;
3#[cfg(feature = "secrets")]
4pub(crate) use access_token_request::*;
5
6mod api_token_request;
7pub(crate) use api_token_request::*;
8
9#[cfg(feature = "internal")]
10mod password_token_request;
11#[cfg(feature = "internal")]
12pub(crate) use password_token_request::*;
13
14mod renew_token_request;
15pub(crate) use renew_token_request::*;
16
17mod auth_request_token_request;
18#[cfg(feature = "internal")]
19pub(crate) use auth_request_token_request::*;
20
21use crate::{
22 ApiError,
23 auth::{
24 api::response::{IdentityTokenResponse, parse_identity_response},
25 login::LoginError,
26 },
27 client::ApiConfigurations,
28};
29
30pub(crate) async fn send_identity_connect_request(
31 configurations: &ApiConfigurations,
32 body: impl serde::Serialize,
33) -> Result<IdentityTokenResponse, LoginError> {
34 let config = &configurations.identity_config;
35
36 let mut request = config
37 .client
38 .post(format!("{}/connect/token", &config.base_path))
39 .header(
40 reqwest::header::CONTENT_TYPE,
41 "application/x-www-form-urlencoded; charset=utf-8",
42 )
43 .header(reqwest::header::ACCEPT, "application/json")
44 .header("Device-Type", configurations.device_type as usize);
45
46 if let Some(ref user_agent) = config.user_agent {
47 request = request.header(reqwest::header::USER_AGENT, user_agent.clone());
48 }
49
50 let response = request
51 .body(serde_qs::to_string(&body).expect("Serialize should be infallible"))
52 .send()
53 .await
54 .map_err(ApiError::from)?;
55
56 let status = response.status();
57 let text = response.text().await.map_err(ApiError::from)?;
58
59 parse_identity_response(status, text)
60}