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::{require, MissingFieldError};
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}
52
53impl TryFrom<PolicyResponseModel> for Policy {
54    type Error = MissingFieldError;
55
56    fn try_from(policy: PolicyResponseModel) -> Result<Self, Self::Error> {
57        Ok(Self {
58            id: require!(policy.id),
59            organization_id: require!(policy.organization_id),
60            r#type: require!(policy.r#type).into(),
61            data: policy.data,
62            enabled: require!(policy.enabled),
63        })
64    }
65}
66
67impl From<bitwarden_api_api::models::PolicyType> for PolicyType {
68    fn from(policy_type: bitwarden_api_api::models::PolicyType) -> Self {
69        match policy_type {
70            bitwarden_api_api::models::PolicyType::TwoFactorAuthentication => {
71                PolicyType::TwoFactorAuthentication
72            }
73            bitwarden_api_api::models::PolicyType::MasterPassword => PolicyType::MasterPassword,
74            bitwarden_api_api::models::PolicyType::PasswordGenerator => {
75                PolicyType::PasswordGenerator
76            }
77            bitwarden_api_api::models::PolicyType::SingleOrg => PolicyType::SingleOrg,
78            bitwarden_api_api::models::PolicyType::RequireSso => PolicyType::RequireSso,
79            bitwarden_api_api::models::PolicyType::OrganizationDataOwnership => {
80                PolicyType::PersonalOwnership
81            }
82            bitwarden_api_api::models::PolicyType::DisableSend => PolicyType::DisableSend,
83            bitwarden_api_api::models::PolicyType::SendOptions => PolicyType::SendOptions,
84            bitwarden_api_api::models::PolicyType::ResetPassword => PolicyType::ResetPassword,
85            bitwarden_api_api::models::PolicyType::MaximumVaultTimeout => {
86                PolicyType::MaximumVaultTimeout
87            }
88            bitwarden_api_api::models::PolicyType::DisablePersonalVaultExport => {
89                PolicyType::DisablePersonalVaultExport
90            }
91            bitwarden_api_api::models::PolicyType::ActivateAutofill => PolicyType::ActivateAutofill,
92            bitwarden_api_api::models::PolicyType::AutomaticAppLogIn => {
93                PolicyType::AutomaticAppLogIn
94            }
95            bitwarden_api_api::models::PolicyType::FreeFamiliesSponsorshipPolicy => {
96                PolicyType::FreeFamiliesSponsorshipPolicy
97            }
98            bitwarden_api_api::models::PolicyType::RemoveUnlockWithPin => {
99                PolicyType::RemoveUnlockWithPin
100            }
101            bitwarden_api_api::models::PolicyType::RestrictedItemTypesPolicy => {
102                PolicyType::RestrictedItemTypesPolicy
103            }
104        }
105    }
106}