bitwarden_core/key_management/
user_decryption.rs

1use bitwarden_api_api::models::UserDecryptionResponseModel;
2use serde::{Deserialize, Serialize};
3
4use crate::{
5    auth::UserDecryptionOptionsResponseModel,
6    key_management::master_password::{MasterPasswordError, MasterPasswordUnlockData},
7};
8
9/// Represents data required to decrypt user's vault.
10/// Currently, this is only used for master password unlock.
11#[allow(dead_code)]
12#[derive(Serialize, Deserialize, Debug)]
13#[serde(rename_all = "camelCase", deny_unknown_fields)]
14pub struct UserDecryptionData {
15    /// Optional master password unlock data.
16    pub master_password_unlock: Option<MasterPasswordUnlockData>,
17}
18
19impl TryFrom<&UserDecryptionResponseModel> for UserDecryptionData {
20    type Error = MasterPasswordError;
21
22    fn try_from(response: &UserDecryptionResponseModel) -> Result<Self, Self::Error> {
23        let master_password_unlock = response
24            .master_password_unlock
25            .as_deref()
26            .map(MasterPasswordUnlockData::try_from)
27            .transpose()?;
28
29        Ok(UserDecryptionData {
30            master_password_unlock,
31        })
32    }
33}
34
35impl TryFrom<&UserDecryptionOptionsResponseModel> for UserDecryptionData {
36    type Error = MasterPasswordError;
37
38    fn try_from(response: &UserDecryptionOptionsResponseModel) -> Result<Self, Self::Error> {
39        let master_password_unlock = response
40            .master_password_unlock
41            .as_ref()
42            .map(MasterPasswordUnlockData::try_from)
43            .transpose()?;
44
45        Ok(UserDecryptionData {
46            master_password_unlock,
47        })
48    }
49}