bitwarden_core/auth/api/request/
mod.rs

1#[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    auth::{
23        api::response::{parse_identity_response, IdentityTokenResponse},
24        login::LoginError,
25    },
26    client::ApiConfigurations,
27    ApiError,
28};
29
30async fn send_identity_connect_request(
31    configurations: &ApiConfigurations,
32    body: impl serde::Serialize,
33) -> Result<IdentityTokenResponse, LoginError> {
34    let mut request = configurations
35        .identity
36        .client
37        .post(format!(
38            "{}/connect/token",
39            &configurations.identity.base_path
40        ))
41        .header(
42            reqwest::header::CONTENT_TYPE,
43            "application/x-www-form-urlencoded; charset=utf-8",
44        )
45        .header(reqwest::header::ACCEPT, "application/json")
46        .header("Device-Type", configurations.device_type as usize);
47
48    if let Some(ref user_agent) = configurations.identity.user_agent {
49        request = request.header(reqwest::header::USER_AGENT, user_agent.clone());
50    }
51
52    let response = request
53        .body(serde_qs::to_string(&body).expect("Serialize should be infallible"))
54        .send()
55        .await
56        .map_err(ApiError::from)?;
57
58    let status = response.status();
59    let text = response.text().await.map_err(ApiError::from)?;
60
61    parse_identity_response(status, text)
62}