bitwarden_uniffi/platform/
mod.rs1use std::sync::Arc;
2
3use bitwarden_core::{platform::FingerprintRequest, Client};
4use bitwarden_fido::ClientFido2Ext;
5use bitwarden_vault::Cipher;
6use repository::UniffiRepositoryBridge;
7
8use crate::error::{Error, Result};
9
10mod fido2;
11mod repository;
12
13#[derive(uniffi::Object)]
14pub struct PlatformClient(pub(crate) bitwarden_core::Client);
15
16#[uniffi::export]
17impl PlatformClient {
18 pub fn fingerprint(&self, req: FingerprintRequest) -> Result<String> {
20 Ok(self
21 .0
22 .platform()
23 .fingerprint(&req)
24 .map_err(Error::Fingerprint)?)
25 }
26
27 pub fn user_fingerprint(&self, fingerprint_material: String) -> Result<String> {
29 Ok(self
30 .0
31 .platform()
32 .user_fingerprint(fingerprint_material)
33 .map_err(Error::UserFingerprint)?)
34 }
35
36 pub fn load_flags(&self, flags: std::collections::HashMap<String, bool>) -> Result<()> {
38 self.0.internal.load_flags(flags);
39 Ok(())
40 }
41
42 pub fn fido2(&self) -> fido2::ClientFido2 {
44 fido2::ClientFido2(self.0.fido2())
45 }
46
47 pub fn state(&self) -> StateClient {
48 StateClient(self.0.clone())
49 }
50}
51
52#[derive(uniffi::Object)]
53pub struct StateClient(Client);
54
55repository::create_uniffi_repository!(CipherRepository, Cipher);
56
57#[uniffi::export]
58impl StateClient {
59 pub fn register_cipher_repository(&self, store: Arc<dyn CipherRepository>) {
60 let store_internal = UniffiRepositoryBridge::new(store);
61 self.0
62 .platform()
63 .state()
64 .register_client_managed(store_internal)
65 }
66}