bitwarden_core/admin_console/
policy.rs1use 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#[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 TwoFactorAuthentication = 0,
25 MasterPassword = 1,
27 PasswordGenerator = 2,
29 SingleOrg = 3,
31 RequireSso = 4,
33 PersonalOwnership = 5,
35 DisableSend = 6,
37 SendOptions = 7,
39 ResetPassword = 8,
41 MaximumVaultTimeout = 9,
43 DisablePersonalVaultExport = 10,
45 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}