bitwarden_policies/
policy.rs1use std::collections::HashMap;
2
3use bitwarden_api_api::models::PolicyResponseModel;
4use bitwarden_core::{MissingFieldError, require};
5use serde::{Deserialize, Serialize};
6use serde_repr::{Deserialize_repr, Serialize_repr};
7use uuid::Uuid;
8
9#[derive(Serialize, Deserialize, Debug)]
11pub struct Policy {
12 id: Uuid,
13 organization_id: Uuid,
14 r#type: PolicyType,
15 data: Option<HashMap<String, serde_json::Value>>,
16 enabled: bool,
17}
18
19#[derive(Serialize_repr, Deserialize_repr, Debug)]
20#[repr(u8)]
21pub enum PolicyType {
22 TwoFactorAuthentication = 0,
24 MasterPassword = 1,
26 PasswordGenerator = 2,
28 SingleOrg = 3,
30 RequireSso = 4,
32 PersonalOwnership = 5,
34 DisableSend = 6,
36 SendOptions = 7,
38 ResetPassword = 8,
40 MaximumVaultTimeout = 9,
42 DisablePersonalVaultExport = 10,
44 ActivateAutofill = 11,
46 AutomaticAppLogIn = 12,
47 FreeFamiliesSponsorshipPolicy = 13,
48 RemoveUnlockWithPin = 14,
49 RestrictedItemTypesPolicy = 15,
50 UriMatchDefaults = 16,
51 AutotypeDefaultSetting = 17,
52 AutomaticUserConfirmation = 18,
53 BlockClaimedDomainAccountCreation = 19,
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 bitwarden_api_api::models::PolicyType::BlockClaimedDomainAccountCreation => {
115 PolicyType::BlockClaimedDomainAccountCreation
116 }
117 }
118 }
119}