1use serde::{Deserialize, Serialize};
4use serde_repr::{Deserialize_repr, Serialize_repr};
5
6use crate::{PolicyParseError, policies::*, policy_definition::ErasedPolicy};
7
8#[derive(PartialEq, Eq, Hash, Serialize_repr, Deserialize_repr, Debug, Copy, Clone)]
12#[cfg_attr(feature = "uniffi", derive(uniffi::Enum))]
13#[bitwarden_ffi::wasm_object]
14#[repr(u8)]
15pub enum PolicyType {
16 TwoFactorAuthentication = 0,
18 MasterPassword = 1,
20 PasswordGenerator = 2,
22 SingleOrg = 3,
24 RequireSso = 4,
26 OrganizationDataOwnership = 5,
29 DisableSend = 6,
34 SendOptions = 7,
39 ResetPassword = 8,
41 MaximumVaultTimeout = 9,
43 DisablePersonalVaultExport = 10,
45 ActivateAutofill = 11,
47 AutomaticAppLogIn = 12,
49 FreeFamiliesSponsorship = 13,
51 RemoveUnlockWithPin = 14,
53 RestrictedItemTypes = 15,
55 UriMatchDefaults = 16,
57 AutotypeDefaultSetting = 17,
59 AutomaticUserConfirmation = 18,
61 BlockClaimedDomainAccountCreation = 19,
63 OrganizationUserNotification = 20,
65 SendControls = 21,
71 FillAssist = 22,
75}
76
77impl TryFrom<bitwarden_api_api::models::PolicyType> for PolicyType {
78 type Error = PolicyParseError;
79
80 fn try_from(value: bitwarden_api_api::models::PolicyType) -> Result<Self, Self::Error> {
81 use bitwarden_api_api::models::PolicyType as Api;
82 Ok(match value {
83 Api::TwoFactorAuthentication => PolicyType::TwoFactorAuthentication,
84 Api::MasterPassword => PolicyType::MasterPassword,
85 Api::PasswordGenerator => PolicyType::PasswordGenerator,
86 Api::SingleOrg => PolicyType::SingleOrg,
87 Api::RequireSso => PolicyType::RequireSso,
88 Api::OrganizationDataOwnership => PolicyType::OrganizationDataOwnership,
89 Api::DisableSend => PolicyType::DisableSend,
90 Api::SendOptions => PolicyType::SendOptions,
91 Api::ResetPassword => PolicyType::ResetPassword,
92 Api::MaximumVaultTimeout => PolicyType::MaximumVaultTimeout,
93 Api::DisablePersonalVaultExport => PolicyType::DisablePersonalVaultExport,
94 Api::ActivateAutofill => PolicyType::ActivateAutofill,
95 Api::AutomaticAppLogIn => PolicyType::AutomaticAppLogIn,
96 Api::FreeFamiliesSponsorshipPolicy => PolicyType::FreeFamiliesSponsorship,
97 Api::RemoveUnlockWithPin => PolicyType::RemoveUnlockWithPin,
98 Api::RestrictedItemTypesPolicy => PolicyType::RestrictedItemTypes,
99 Api::UriMatchDefaults => PolicyType::UriMatchDefaults,
100 Api::AutotypeDefaultSetting => PolicyType::AutotypeDefaultSetting,
101 Api::AutomaticUserConfirmation => PolicyType::AutomaticUserConfirmation,
102 Api::BlockClaimedDomainAccountCreation => PolicyType::BlockClaimedDomainAccountCreation,
103 Api::OrganizationUserNotification => PolicyType::OrganizationUserNotification,
104 Api::SendControls => PolicyType::SendControls,
105 Api::FillAssist => PolicyType::FillAssist,
106 Api::__Unknown(value) => return Err(PolicyParseError::UnknownPolicyType(value)),
107 })
108 }
109}
110
111impl PolicyType {
112 pub(crate) fn resolve_policy(self) -> Box<dyn ErasedPolicy> {
116 match self {
117 PolicyType::TwoFactorAuthentication => Box::new(TwoFactorAuthenticationPolicy),
118 PolicyType::MasterPassword => Box::new(MasterPasswordPolicy),
119 PolicyType::PasswordGenerator => Box::new(PasswordGeneratorPolicy),
120 PolicyType::SingleOrg => Box::new(SingleOrgPolicy),
121 PolicyType::RequireSso => Box::new(RequireSsoPolicy),
122 PolicyType::OrganizationDataOwnership => Box::new(OrganizationDataOwnershipPolicy),
123 PolicyType::DisableSend => Box::new(DisableSendPolicy),
124 PolicyType::SendOptions => Box::new(SendOptionsPolicy),
125 PolicyType::ResetPassword => Box::new(ResetPasswordPolicy),
126 PolicyType::MaximumVaultTimeout => Box::new(MaximumVaultTimeoutPolicy),
127 PolicyType::DisablePersonalVaultExport => Box::new(DisablePersonalVaultExportPolicy),
128 PolicyType::ActivateAutofill => Box::new(ActivateAutofillPolicy),
129 PolicyType::AutomaticAppLogIn => Box::new(AutomaticAppLogInPolicy),
130 PolicyType::FreeFamiliesSponsorship => Box::new(FreeFamiliesSponsorshipPolicy),
131 PolicyType::RemoveUnlockWithPin => Box::new(RemoveUnlockWithPinPolicy),
132 PolicyType::RestrictedItemTypes => Box::new(RestrictedItemTypesPolicy),
133 PolicyType::UriMatchDefaults => Box::new(UriMatchDefaultsPolicy),
134 PolicyType::AutotypeDefaultSetting => Box::new(AutotypeDefaultSettingPolicy),
135 PolicyType::AutomaticUserConfirmation => Box::new(AutomaticUserConfirmationPolicy),
136 PolicyType::BlockClaimedDomainAccountCreation => {
137 Box::new(BlockClaimedDomainAccountCreationPolicy)
138 }
139 PolicyType::OrganizationUserNotification => {
140 Box::new(OrganizationUserNotificationPolicy)
141 }
142 PolicyType::SendControls => Box::new(SendControlsPolicy),
143 PolicyType::FillAssist => Box::new(FillAssistPolicy),
144 }
145 }
146}
147
148#[allow(missing_docs)]
161#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
162#[serde(rename_all = "camelCase", tag = "_policyType")]
163#[cfg_attr(feature = "uniffi", derive(uniffi::Enum))]
164#[bitwarden_ffi::wasm_record]
165pub enum PolicyDataType {
169 TwoFactorAuthentication,
170 MasterPassword(MasterPasswordPolicyData),
171 PasswordGenerator(PasswordGeneratorPolicyData),
172 SingleOrg,
173 RequireSso,
174 OrganizationDataOwnership(OrganizationDataOwnershipPolicyData),
175 DisableSend,
176 SendOptions(SendOptionsPolicyData),
177 ResetPassword(ResetPasswordPolicyData),
178 MaximumVaultTimeout(MaximumVaultTimeoutPolicyData),
179 DisablePersonalVaultExport,
180 ActivateAutofill,
181 AutomaticAppLogIn(AutomaticAppLogInPolicyData),
182 FreeFamiliesSponsorship,
183 RemoveUnlockWithPin,
184 RestrictedItemTypes,
185 UriMatchDefaults,
186 AutotypeDefaultSetting,
187 AutomaticUserConfirmation,
188 BlockClaimedDomainAccountCreation,
189 OrganizationUserNotification(OrganizationUserNotificationPolicyData),
190 SendControls,
191 FillAssist(FillAssistPolicyData),
192}