bitwarden_core/admin_console/
policy.rs

1use std::collections::HashMap;
2
3use bitwarden_api_api::models::PolicyResponseModel;
4use serde::{Deserialize, Serialize};
5use serde_repr::{Deserialize_repr, Serialize_repr};
6use uuid::Uuid;
7
8use crate::{MissingFieldError, require};
9
10/// Represents a policy that can be applied to an organization.
11#[derive(Serialize, Deserialize, Debug)]
12pub struct Policy {
13    id: Uuid,
14    organization_id: Uuid,
15    r#type: PolicyType,
16    data: Option<HashMap<String, serde_json::Value>>,
17    enabled: bool,
18}
19
20#[derive(Serialize_repr, Deserialize_repr, Debug)]
21#[repr(u8)]
22pub enum PolicyType {
23    /// Requires users to have 2fa enabled
24    TwoFactorAuthentication = 0,
25    /// Sets minimum requirements for master password complexity
26    MasterPassword = 1,
27    /// Sets minimum requirements/default type for generated passwords/passphrases
28    PasswordGenerator = 2,
29    /// Allows users to only be apart of one organization
30    SingleOrg = 3,
31    /// Requires users to authenticate with SSO
32    RequireSso = 4,
33    /// Disables personal vault ownership for adding/cloning items
34    PersonalOwnership = 5,
35    /// Disables the ability to create and edit Bitwarden Sends
36    DisableSend = 6,
37    /// Sets restrictions or defaults for Bitwarden Sends
38    SendOptions = 7,
39    /// Allows orgs to use reset password : also can enable auto-enrollment during invite flow
40    ResetPassword = 8,
41    /// Sets the maximum allowed vault timeout
42    MaximumVaultTimeout = 9,
43    /// Disable personal vault export
44    DisablePersonalVaultExport = 10,
45    /// Activates autofill with page load on the browser extension
46    ActivateAutofill = 11,
47    AutomaticAppLogIn = 12,
48    FreeFamiliesSponsorshipPolicy = 13,
49    RemoveUnlockWithPin = 14,
50    RestrictedItemTypesPolicy = 15,
51    UriMatchDefaults = 16,
52    AutomaticUserConfirmation = 18,
53    AutotypeDefaultSetting = 17,
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).into(),
64            data: policy.data,
65            enabled: require!(policy.enabled),
66        })
67    }
68}
69
70impl From<bitwarden_api_api::models::PolicyType> for PolicyType {
71    fn from(policy_type: bitwarden_api_api::models::PolicyType) -> Self {
72        match policy_type {
73            bitwarden_api_api::models::PolicyType::TwoFactorAuthentication => {
74                PolicyType::TwoFactorAuthentication
75            }
76            bitwarden_api_api::models::PolicyType::MasterPassword => PolicyType::MasterPassword,
77            bitwarden_api_api::models::PolicyType::PasswordGenerator => {
78                PolicyType::PasswordGenerator
79            }
80            bitwarden_api_api::models::PolicyType::SingleOrg => PolicyType::SingleOrg,
81            bitwarden_api_api::models::PolicyType::RequireSso => PolicyType::RequireSso,
82            bitwarden_api_api::models::PolicyType::OrganizationDataOwnership => {
83                PolicyType::PersonalOwnership
84            }
85            bitwarden_api_api::models::PolicyType::DisableSend => PolicyType::DisableSend,
86            bitwarden_api_api::models::PolicyType::SendOptions => PolicyType::SendOptions,
87            bitwarden_api_api::models::PolicyType::ResetPassword => PolicyType::ResetPassword,
88            bitwarden_api_api::models::PolicyType::MaximumVaultTimeout => {
89                PolicyType::MaximumVaultTimeout
90            }
91            bitwarden_api_api::models::PolicyType::DisablePersonalVaultExport => {
92                PolicyType::DisablePersonalVaultExport
93            }
94            bitwarden_api_api::models::PolicyType::ActivateAutofill => PolicyType::ActivateAutofill,
95            bitwarden_api_api::models::PolicyType::AutomaticAppLogIn => {
96                PolicyType::AutomaticAppLogIn
97            }
98            bitwarden_api_api::models::PolicyType::FreeFamiliesSponsorshipPolicy => {
99                PolicyType::FreeFamiliesSponsorshipPolicy
100            }
101            bitwarden_api_api::models::PolicyType::RemoveUnlockWithPin => {
102                PolicyType::RemoveUnlockWithPin
103            }
104            bitwarden_api_api::models::PolicyType::RestrictedItemTypesPolicy => {
105                PolicyType::RestrictedItemTypesPolicy
106            }
107            bitwarden_api_api::models::PolicyType::UriMatchDefaults => PolicyType::UriMatchDefaults,
108            bitwarden_api_api::models::PolicyType::AutotypeDefaultSetting => {
109                PolicyType::AutotypeDefaultSetting
110            }
111            bitwarden_api_api::models::PolicyType::AutomaticUserConfirmation => {
112                PolicyType::AutomaticUserConfirmation
113            }
114        }
115    }
116}