bitwarden_auth/login/models/
trusted_device_user_decryption_option.rs1use bitwarden_crypto::{EncString, UnsignedSharedKey};
2use serde::{Deserialize, Serialize};
3
4use crate::login::api::response::TrustedDeviceUserDecryptionOptionApiResponse;
5
6#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
8#[serde(rename_all = "camelCase")]
9#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
10#[bitwarden_ffi::wasm_record]
11pub struct TrustedDeviceUserDecryptionOption {
12 pub has_admin_approval: bool,
14
15 pub has_login_approving_device: bool,
17
18 pub has_manage_reset_password_permission: bool,
20
21 pub is_tde_offboarding: bool,
23
24 #[serde(skip_serializing_if = "Option::is_none")]
26 pub encrypted_private_key: Option<EncString>,
27
28 #[serde(skip_serializing_if = "Option::is_none")]
30 pub encrypted_user_key: Option<UnsignedSharedKey>,
31}
32
33impl From<TrustedDeviceUserDecryptionOptionApiResponse> for TrustedDeviceUserDecryptionOption {
34 fn from(api: TrustedDeviceUserDecryptionOptionApiResponse) -> Self {
35 Self {
36 has_admin_approval: api.has_admin_approval,
37 has_login_approving_device: api.has_login_approving_device,
38 has_manage_reset_password_permission: api.has_manage_reset_password_permission,
39 is_tde_offboarding: api.is_tde_offboarding,
40 encrypted_private_key: api.encrypted_private_key,
41 encrypted_user_key: api.encrypted_user_key,
42 }
43 }
44}
45
46#[cfg(test)]
47mod tests {
48 use super::*;
49
50 #[test]
51 fn test_trusted_device_conversion() {
52 let api = TrustedDeviceUserDecryptionOptionApiResponse {
53 has_admin_approval: true,
54 has_login_approving_device: false,
55 has_manage_reset_password_permission: true,
56 is_tde_offboarding: false,
57 encrypted_private_key: Some("2.pMS6/icTQABtulw52pq2lg==|XXbxKxDTh+mWiN1HjH2N1w==|Q6PkuT+KX/axrgN9ubD5Ajk2YNwxQkgs3WJM0S0wtG8=".parse().unwrap()),
58 encrypted_user_key: Some("4.ZheRb3PCfAunyFdQYPfyrFqpuvmln9H9w5nDjt88i5A7ug1XE0LJdQHCIYJl0YOZ1gCOGkhFu/CRY2StiLmT3iRKrrVBbC1+qRMjNNyDvRcFi91LWsmRXhONVSPjywzrJJXglsztDqGkLO93dKXNhuKpcmtBLsvgkphk/aFvxbaOvJ/FHdK/iV0dMGNhc/9tbys8laTdwBlI5xIChpRcrfH+XpSFM88+Bu03uK67N9G6eU1UmET+pISJwJvMuIDMqH+qkT7OOzgL3t6I0H2LDj+CnsumnQmDsvQzDiNfTR0IgjpoE9YH2LvPXVP2wVUkiTwXD9cG/E7XeoiduHyHjw==".parse().unwrap()),
59 };
60
61 let domain: TrustedDeviceUserDecryptionOption = api.clone().into();
62
63 assert_eq!(domain.has_admin_approval, api.has_admin_approval);
64 assert_eq!(
65 domain.has_login_approving_device,
66 api.has_login_approving_device
67 );
68 assert_eq!(
69 domain.has_manage_reset_password_permission,
70 api.has_manage_reset_password_permission
71 );
72 assert_eq!(domain.is_tde_offboarding, api.is_tde_offboarding);
73 assert_eq!(domain.encrypted_private_key, api.encrypted_private_key);
74 assert_eq!(domain.encrypted_user_key, api.encrypted_user_key);
75 }
76}