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 AutotypeGaPolicy = 23,
78}
79
80impl TryFrom<bitwarden_api_api::models::PolicyType> for PolicyType {
81 type Error = PolicyParseError;
82
83 fn try_from(value: bitwarden_api_api::models::PolicyType) -> Result<Self, Self::Error> {
84 use bitwarden_api_api::models::PolicyType as Api;
85 Ok(match value {
86 Api::TwoFactorAuthentication => PolicyType::TwoFactorAuthentication,
87 Api::MasterPassword => PolicyType::MasterPassword,
88 Api::PasswordGenerator => PolicyType::PasswordGenerator,
89 Api::SingleOrg => PolicyType::SingleOrg,
90 Api::RequireSso => PolicyType::RequireSso,
91 Api::OrganizationDataOwnership => PolicyType::OrganizationDataOwnership,
92 Api::DisableSend => PolicyType::DisableSend,
93 Api::SendOptions => PolicyType::SendOptions,
94 Api::ResetPassword => PolicyType::ResetPassword,
95 Api::MaximumVaultTimeout => PolicyType::MaximumVaultTimeout,
96 Api::DisablePersonalVaultExport => PolicyType::DisablePersonalVaultExport,
97 Api::ActivateAutofill => PolicyType::ActivateAutofill,
98 Api::AutomaticAppLogIn => PolicyType::AutomaticAppLogIn,
99 Api::FreeFamiliesSponsorshipPolicy => PolicyType::FreeFamiliesSponsorship,
100 Api::RemoveUnlockWithPin => PolicyType::RemoveUnlockWithPin,
101 Api::RestrictedItemTypesPolicy => PolicyType::RestrictedItemTypes,
102 Api::UriMatchDefaults => PolicyType::UriMatchDefaults,
103 Api::AutotypeDefaultSetting => PolicyType::AutotypeDefaultSetting,
104 Api::AutomaticUserConfirmation => PolicyType::AutomaticUserConfirmation,
105 Api::BlockClaimedDomainAccountCreation => PolicyType::BlockClaimedDomainAccountCreation,
106 Api::OrganizationUserNotification => PolicyType::OrganizationUserNotification,
107 Api::SendControls => PolicyType::SendControls,
108 Api::FillAssist => PolicyType::FillAssist,
109 Api::AutotypeGaPolicy => PolicyType::AutotypeGaPolicy,
110 unknown => return Err(PolicyParseError::UnknownPolicyType(unknown.as_i64())),
113 })
114 }
115}
116
117impl PolicyType {
118 pub(crate) fn resolve_policy(self) -> Box<dyn ErasedPolicy> {
122 match self {
123 PolicyType::TwoFactorAuthentication => Box::new(TwoFactorAuthenticationPolicy),
124 PolicyType::MasterPassword => Box::new(MasterPasswordPolicy),
125 PolicyType::PasswordGenerator => Box::new(PasswordGeneratorPolicy),
126 PolicyType::SingleOrg => Box::new(SingleOrgPolicy),
127 PolicyType::RequireSso => Box::new(RequireSsoPolicy),
128 PolicyType::OrganizationDataOwnership => Box::new(OrganizationDataOwnershipPolicy),
129 PolicyType::DisableSend => Box::new(DisableSendPolicy),
130 PolicyType::SendOptions => Box::new(SendOptionsPolicy),
131 PolicyType::ResetPassword => Box::new(ResetPasswordPolicy),
132 PolicyType::MaximumVaultTimeout => Box::new(MaximumVaultTimeoutPolicy),
133 PolicyType::DisablePersonalVaultExport => Box::new(DisablePersonalVaultExportPolicy),
134 PolicyType::ActivateAutofill => Box::new(ActivateAutofillPolicy),
135 PolicyType::AutomaticAppLogIn => Box::new(AutomaticAppLogInPolicy),
136 PolicyType::FreeFamiliesSponsorship => Box::new(FreeFamiliesSponsorshipPolicy),
137 PolicyType::RemoveUnlockWithPin => Box::new(RemoveUnlockWithPinPolicy),
138 PolicyType::RestrictedItemTypes => Box::new(RestrictedItemTypesPolicy),
139 PolicyType::UriMatchDefaults => Box::new(UriMatchDefaultsPolicy),
140 PolicyType::AutotypeDefaultSetting => Box::new(AutotypeDefaultSettingPolicy),
141 PolicyType::AutomaticUserConfirmation => Box::new(AutomaticUserConfirmationPolicy),
142 PolicyType::BlockClaimedDomainAccountCreation => {
143 Box::new(BlockClaimedDomainAccountCreationPolicy)
144 }
145 PolicyType::OrganizationUserNotification => {
146 Box::new(OrganizationUserNotificationPolicy)
147 }
148 PolicyType::SendControls => Box::new(SendControlsPolicy),
149 PolicyType::FillAssist => Box::new(FillAssistPolicy),
150 PolicyType::AutotypeGaPolicy => Box::new(AutotypeGaPolicy),
151 }
152 }
153}
154
155#[allow(missing_docs)]
168#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
169#[serde(rename_all = "camelCase", tag = "_policyType")]
170#[cfg_attr(feature = "uniffi", derive(uniffi::Enum))]
171#[bitwarden_ffi::wasm_record]
172pub enum PolicyDataType {
176 TwoFactorAuthentication,
177 MasterPassword(MasterPasswordPolicyData),
178 PasswordGenerator(PasswordGeneratorPolicyData),
179 SingleOrg,
180 RequireSso,
181 OrganizationDataOwnership(OrganizationDataOwnershipPolicyData),
182 DisableSend,
183 SendOptions(SendOptionsPolicyData),
184 ResetPassword(ResetPasswordPolicyData),
185 MaximumVaultTimeout(MaximumVaultTimeoutPolicyData),
186 DisablePersonalVaultExport,
187 ActivateAutofill,
188 AutomaticAppLogIn(AutomaticAppLogInPolicyData),
189 FreeFamiliesSponsorship,
190 RemoveUnlockWithPin,
191 RestrictedItemTypes,
192 UriMatchDefaults,
193 AutotypeDefaultSetting,
194 AutomaticUserConfirmation,
195 BlockClaimedDomainAccountCreation,
196 OrganizationUserNotification(OrganizationUserNotificationPolicyData),
197 SendControls,
198 FillAssist(FillAssistPolicyData),
199 AutotypeGaPolicy,
200}