Skip to main content

bitwarden_pam/
pam_client.rs

1use std::sync::Arc;
2
3use bitwarden_core::{Client, FromClient, client::ApiConfigurations};
4#[cfg(feature = "wasm")]
5use wasm_bindgen::prelude::*;
6
7use crate::{
8    access_requests::AccessRequestsClient, access_rules::AccessRulesClient, leases::LeasesClient,
9};
10
11/// Entry point for Privileged Access Management (PAM) operations.
12#[derive(Clone, FromClient)]
13#[cfg_attr(feature = "wasm", wasm_bindgen)]
14pub struct PamClient {
15    pub(crate) api_configurations: Arc<ApiConfigurations>,
16}
17
18#[cfg_attr(feature = "wasm", wasm_bindgen)]
19impl PamClient {
20    /// Access rule CRUD operations.
21    pub fn access_rules(&self) -> AccessRulesClient {
22        AccessRulesClient {
23            api_configurations: self.api_configurations.clone(),
24        }
25    }
26
27    /// Access request operations (activate, cancel, and read the caller's requests).
28    pub fn access_requests(&self) -> AccessRequestsClient {
29        AccessRequestsClient {
30            api_configurations: self.api_configurations.clone(),
31        }
32    }
33
34    /// Access lease operations (read, extend, and end the caller's leases).
35    pub fn leases(&self) -> LeasesClient {
36        LeasesClient {
37            api_configurations: self.api_configurations.clone(),
38        }
39    }
40}
41
42/// Extension trait that exposes [`PamClient`] on [`Client`].
43pub trait PamClientExt {
44    /// Returns a [`PamClient`] backed by this client.
45    fn pam(&self) -> PamClient;
46}
47
48impl PamClientExt for Client {
49    fn pam(&self) -> PamClient {
50        PamClient::from_client(self)
51    }
52}