bitwarden_policies/
policy.rs1use std::collections::HashMap;
2
3use bitwarden_api_api::models::PolicyResponseModel;
4use bitwarden_core::{MissingFieldError, require};
5use serde::{Deserialize, Serialize};
6use serde_repr::{Deserialize_repr, Serialize_repr};
7use uuid::Uuid;
8
9#[derive(Serialize, Deserialize, Debug)]
11pub struct Policy {
12 id: Uuid,
13 organization_id: Uuid,
14 r#type: PolicyType,
15 data: Option<HashMap<String, serde_json::Value>>,
16 enabled: bool,
17}
18
19#[derive(Serialize_repr, Deserialize_repr, Debug)]
20#[repr(u8)]
21pub enum PolicyType {
22 TwoFactorAuthentication = 0,
24 MasterPassword = 1,
26 PasswordGenerator = 2,
28 SingleOrg = 3,
30 RequireSso = 4,
32 PersonalOwnership = 5,
34 DisableSend = 6,
36 SendOptions = 7,
38 ResetPassword = 8,
40 MaximumVaultTimeout = 9,
42 DisablePersonalVaultExport = 10,
44 ActivateAutofill = 11,
46 AutomaticAppLogIn = 12,
47 FreeFamiliesSponsorshipPolicy = 13,
48 RemoveUnlockWithPin = 14,
49 RestrictedItemTypesPolicy = 15,
50 UriMatchDefaults = 16,
51 AutotypeDefaultSetting = 17,
52 AutomaticUserConfirmation = 18,
53 BlockClaimedDomainAccountCreation = 19,
54}
55
56impl TryFrom<PolicyResponseModel> for Policy {
57 type Error = MissingFieldError;
58
59 fn try_from(policy: PolicyResponseModel) -> Result<Self, Self::Error> {
60 Ok(Self {
61 id: require!(policy.id),
62 organization_id: require!(policy.organization_id),
63 r#type: require!(policy.r#type).try_into()?,
64 data: policy.data,
65 enabled: require!(policy.enabled),
66 })
67 }
68}
69
70impl TryFrom<bitwarden_api_api::models::PolicyType> for PolicyType {
71 type Error = MissingFieldError;
72
73 fn try_from(policy_type: bitwarden_api_api::models::PolicyType) -> Result<Self, Self::Error> {
74 Ok(match policy_type {
75 bitwarden_api_api::models::PolicyType::TwoFactorAuthentication => {
76 PolicyType::TwoFactorAuthentication
77 }
78 bitwarden_api_api::models::PolicyType::MasterPassword => PolicyType::MasterPassword,
79 bitwarden_api_api::models::PolicyType::PasswordGenerator => {
80 PolicyType::PasswordGenerator
81 }
82 bitwarden_api_api::models::PolicyType::SingleOrg => PolicyType::SingleOrg,
83 bitwarden_api_api::models::PolicyType::RequireSso => PolicyType::RequireSso,
84 bitwarden_api_api::models::PolicyType::OrganizationDataOwnership => {
85 PolicyType::PersonalOwnership
86 }
87 bitwarden_api_api::models::PolicyType::DisableSend => PolicyType::DisableSend,
88 bitwarden_api_api::models::PolicyType::SendOptions => PolicyType::SendOptions,
89 bitwarden_api_api::models::PolicyType::ResetPassword => PolicyType::ResetPassword,
90 bitwarden_api_api::models::PolicyType::MaximumVaultTimeout => {
91 PolicyType::MaximumVaultTimeout
92 }
93 bitwarden_api_api::models::PolicyType::DisablePersonalVaultExport => {
94 PolicyType::DisablePersonalVaultExport
95 }
96 bitwarden_api_api::models::PolicyType::ActivateAutofill => PolicyType::ActivateAutofill,
97 bitwarden_api_api::models::PolicyType::AutomaticAppLogIn => {
98 PolicyType::AutomaticAppLogIn
99 }
100 bitwarden_api_api::models::PolicyType::FreeFamiliesSponsorshipPolicy => {
101 PolicyType::FreeFamiliesSponsorshipPolicy
102 }
103 bitwarden_api_api::models::PolicyType::RemoveUnlockWithPin => {
104 PolicyType::RemoveUnlockWithPin
105 }
106 bitwarden_api_api::models::PolicyType::RestrictedItemTypesPolicy => {
107 PolicyType::RestrictedItemTypesPolicy
108 }
109 bitwarden_api_api::models::PolicyType::UriMatchDefaults => PolicyType::UriMatchDefaults,
110 bitwarden_api_api::models::PolicyType::AutotypeDefaultSetting => {
111 PolicyType::AutotypeDefaultSetting
112 }
113 bitwarden_api_api::models::PolicyType::AutomaticUserConfirmation => {
114 PolicyType::AutomaticUserConfirmation
115 }
116 bitwarden_api_api::models::PolicyType::BlockClaimedDomainAccountCreation => {
117 PolicyType::BlockClaimedDomainAccountCreation
118 }
119 bitwarden_api_api::models::PolicyType::__Unknown(_) => {
120 return Err(MissingFieldError("type"));
121 }
122 })
123 }
124}