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