bitwarden_api_api/models/access_rule_request_model.rs
1/*
2 * Bitwarden Internal API
3 *
4 * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
5 *
6 * The version of the OpenAPI document: latest
7 *
8 * Generated by: https://openapi-generator.tech
9 */
10
11use serde::{Deserialize, Serialize};
12
13use crate::models;
14
15#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
16pub struct AccessRuleRequestModel {
17 /// The rule's display name, shown wherever rules are listed and managed. Required; up to 256
18 /// characters.
19 #[serde(rename = "name", alias = "Name")]
20 pub name: String,
21 /// Optional free-text describing the rule's intent. Has no effect on evaluation; surfaced to
22 /// admins only.
23 #[serde(
24 rename = "description",
25 alias = "Description",
26 skip_serializing_if = "Option::is_none"
27 )]
28 pub description: Option<String>,
29 /// When false, the rule is inactive and does not gate access for the collections it governs.
30 /// Defaults to true so a request that omits the field creates an active rule.
31 #[serde(
32 rename = "enabled",
33 alias = "Enabled",
34 skip_serializing_if = "Option::is_none"
35 )]
36 pub enabled: Option<bool>,
37 /// The condition tree that decides how access is granted under this rule — for example
38 /// requiring human approval, or restricting to certain times of day or source IPs. Sent as a
39 /// JSON object and stored verbatim; an empty or null value means the rule imposes no
40 /// conditions.
41 #[serde(rename = "conditions", alias = "Conditions")]
42 pub conditions: Option<serde_json::Value>,
43 /// When true, the rule enforces a per-cipher singleton (at most one active lease per cipher
44 /// across all users).
45 #[serde(
46 rename = "singleActiveLease",
47 alias = "SingleActiveLease",
48 skip_serializing_if = "Option::is_none"
49 )]
50 pub single_active_lease: Option<bool>,
51 /// Default lease duration in seconds, used to pre-fill a request opened under this rule. Null
52 /// means the backend default applies.
53 #[serde(
54 rename = "defaultLeaseDurationSeconds",
55 alias = "DefaultLeaseDurationSeconds",
56 skip_serializing_if = "Option::is_none"
57 )]
58 pub default_lease_duration_seconds: Option<i32>,
59 /// Hard ceiling on the duration of any single lease granted under this rule, in seconds. Null
60 /// means no per-rule cap.
61 #[serde(
62 rename = "maxLeaseDurationSeconds",
63 alias = "MaxLeaseDurationSeconds",
64 skip_serializing_if = "Option::is_none"
65 )]
66 pub max_lease_duration_seconds: Option<i32>,
67 /// When true, a member holding an active lease under this rule may extend it once (always
68 /// auto-approved), by up to
69 /// Bit.Services.Pam.Api.Models.Request.AccessRuleRequestModel.MaxExtensionDurationSeconds.
70 #[serde(
71 rename = "allowsExtensions",
72 alias = "AllowsExtensions",
73 skip_serializing_if = "Option::is_none"
74 )]
75 pub allows_extensions: Option<bool>,
76 /// The longest a single extension may run, in seconds. Required to be positive when
77 /// Bit.Services.Pam.Api.Models.Request.AccessRuleRequestModel.AllowsExtensions is true.
78 #[serde(
79 rename = "maxExtensionDurationSeconds",
80 alias = "MaxExtensionDurationSeconds",
81 skip_serializing_if = "Option::is_none"
82 )]
83 pub max_extension_duration_seconds: Option<i32>,
84 /// The complete set of collections this rule governs. The rule's associations are replaced to
85 /// match exactly this set; an empty array clears all associations.
86 #[serde(rename = "collections", alias = "Collections")]
87 pub collections: Vec<uuid::Uuid>,
88}
89
90impl AccessRuleRequestModel {
91 pub fn new(
92 name: String,
93 conditions: Option<serde_json::Value>,
94 collections: Vec<uuid::Uuid>,
95 ) -> AccessRuleRequestModel {
96 AccessRuleRequestModel {
97 name,
98 description: None,
99 enabled: None,
100 conditions,
101 single_active_lease: None,
102 default_lease_duration_seconds: None,
103 max_lease_duration_seconds: None,
104 allows_extensions: None,
105 max_extension_duration_seconds: None,
106 collections,
107 }
108 }
109}