bitwarden_auth/
auth_client.rs

1use bitwarden_core::Client;
2#[cfg(feature = "wasm")]
3use wasm_bindgen::prelude::*;
4
5use crate::{login::LoginClient, registration::RegistrationClient, send_access::SendAccessClient};
6
7/// Subclient containing auth functionality.
8#[derive(Clone)]
9#[cfg_attr(feature = "wasm", wasm_bindgen)]
10pub struct AuthClient {
11    // TODO: The AuthClient should probably not contain the whole bitwarden-core client.
12    // Instead, it should contain the ApiConfigurations and Tokens struct to do API requests and
13    // handle token renewals, and those structs should be shared between core and auth.
14    pub(crate) client: Client,
15}
16
17impl AuthClient {
18    /// Constructs a new `AuthClient` with the given `Client`.
19    pub fn new(client: Client) -> Self {
20        Self { client }
21    }
22}
23
24#[cfg_attr(feature = "wasm", wasm_bindgen)]
25impl AuthClient {
26    // TODO: in a future PR, we need to figure out a consistent mechanism for CoreClient
27    // vs ClientSettings instantiation across all subclients.
28
29    /// Client for login functionality
30    pub fn login(&self, client_settings: bitwarden_core::ClientSettings) -> LoginClient {
31        LoginClient::new(client_settings)
32    }
33
34    /// Client for send access functionality
35    pub fn send_access(&self) -> SendAccessClient {
36        SendAccessClient::new(self.client.clone())
37    }
38
39    /// Client for initializing user account cryptography and unlock methods after JIT provisioning
40    pub fn registration(&self) -> RegistrationClient {
41        RegistrationClient::new(self.client.clone())
42    }
43}
44
45/// Extension trait for `Client` to provide access to the `AuthClient`.
46pub trait AuthClientExt {
47    /// Creates a new `AuthClient` instance.
48    fn auth_new(&self) -> AuthClient;
49}
50
51impl AuthClientExt for Client {
52    fn auth_new(&self) -> AuthClient {
53        AuthClient {
54            client: self.clone(),
55        }
56    }
57}