Skip to main content

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}