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::{require, MissingFieldError};
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}
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}