bitwarden_core/auth/api/request/
auth_request_token_request.rs

1use log::debug;
2use serde::{Deserialize, Serialize};
3use uuid::Uuid;
4
5use crate::{
6    auth::{api::response::IdentityTokenResponse, login::LoginError},
7    client::ApiConfigurations,
8    DeviceType,
9};
10
11#[derive(Serialize, Deserialize, Debug)]
12pub struct AuthRequestTokenRequest {
13    scope: String,
14    client_id: String,
15    #[serde(rename = "deviceType")]
16    device_type: u8,
17    #[serde(rename = "deviceIdentifier")]
18    device_identifier: String,
19    #[serde(rename = "deviceName")]
20    device_name: String,
21    grant_type: String,
22    #[serde(rename = "username")]
23    email: String,
24    #[serde(rename = "authRequest")]
25    auth_request_id: Uuid,
26    #[serde(rename = "password")]
27    access_code: String,
28}
29
30#[allow(dead_code)]
31impl AuthRequestTokenRequest {
32    pub fn new(
33        email: &str,
34        auth_request_id: &Uuid,
35        access_code: &str,
36        device_type: DeviceType,
37        device_identifier: &str,
38    ) -> Self {
39        let obj = Self {
40            scope: "api offline_access".to_string(),
41            client_id: "web".to_string(),
42            device_type: device_type as u8,
43            device_identifier: device_identifier.to_string(),
44            device_name: "chrome".to_string(),
45            grant_type: "password".to_string(),
46            email: email.to_string(),
47            auth_request_id: *auth_request_id,
48            access_code: access_code.to_string(),
49        };
50        debug!("initializing {:?}", obj);
51        obj
52    }
53
54    pub(crate) async fn send(
55        &self,
56        configurations: &ApiConfigurations,
57    ) -> Result<IdentityTokenResponse, LoginError> {
58        super::send_identity_connect_request(configurations, Some(&self.email), &self).await
59    }
60}