openauth_core/options/
session.rs1use std::collections::BTreeMap;
2
3use crate::db::{DbFieldType, DbValue};
4
5use super::cookies::CookieCacheOptions;
6
7#[derive(Debug, Clone, PartialEq, Default)]
9pub struct SessionOptions {
10 pub expires_in: Option<u64>,
11 pub update_age: Option<u64>,
12 pub fresh_age: Option<u64>,
13 pub disable_session_refresh: bool,
14 pub defer_session_refresh: bool,
15 pub store_session_in_database: bool,
16 pub preserve_session_in_database: bool,
17 pub cookie_cache: CookieCacheOptions,
18 pub additional_fields: BTreeMap<String, SessionAdditionalField>,
19}
20
21impl SessionOptions {
22 pub fn new() -> Self {
23 Self::default()
24 }
25
26 pub fn builder() -> Self {
27 Self::new()
28 }
29
30 #[must_use]
31 pub fn expires_in(mut self, expires_in: u64) -> Self {
32 self.expires_in = Some(expires_in);
33 self
34 }
35
36 #[must_use]
37 pub fn update_age(mut self, update_age: u64) -> Self {
38 self.update_age = Some(update_age);
39 self
40 }
41
42 #[must_use]
43 pub fn fresh_age(mut self, fresh_age: u64) -> Self {
44 self.fresh_age = Some(fresh_age);
45 self
46 }
47
48 #[must_use]
49 pub fn disable_session_refresh(mut self, disabled: bool) -> Self {
50 self.disable_session_refresh = disabled;
51 self
52 }
53
54 #[must_use]
55 pub fn defer_session_refresh(mut self, deferred: bool) -> Self {
56 self.defer_session_refresh = deferred;
57 self
58 }
59
60 #[must_use]
61 pub fn store_session_in_database(mut self, enabled: bool) -> Self {
62 self.store_session_in_database = enabled;
63 self
64 }
65
66 #[must_use]
67 pub fn preserve_session_in_database(mut self, enabled: bool) -> Self {
68 self.preserve_session_in_database = enabled;
69 self
70 }
71
72 #[must_use]
73 pub fn cookie_cache(mut self, cookie_cache: CookieCacheOptions) -> Self {
74 self.cookie_cache = cookie_cache;
75 self
76 }
77
78 #[must_use]
79 pub fn additional_field(
80 mut self,
81 name: impl Into<String>,
82 field: SessionAdditionalField,
83 ) -> Self {
84 self.additional_fields.insert(name.into(), field);
85 self
86 }
87}
88
89#[derive(Debug, Clone, PartialEq)]
91pub struct SessionAdditionalField {
92 pub field_type: DbFieldType,
93 pub required: bool,
94 pub input: bool,
95 pub returned: bool,
96 pub default_value: Option<DbValue>,
97 pub db_name: Option<String>,
98}
99
100impl SessionAdditionalField {
101 pub fn new(field_type: DbFieldType) -> Self {
102 Self {
103 field_type,
104 required: true,
105 input: true,
106 returned: true,
107 default_value: None,
108 db_name: None,
109 }
110 }
111
112 #[must_use]
113 pub fn optional(mut self) -> Self {
114 self.required = false;
115 self
116 }
117
118 #[must_use]
119 pub fn generated(mut self) -> Self {
120 self.input = false;
121 self
122 }
123
124 #[must_use]
125 pub fn hidden(mut self) -> Self {
126 self.returned = false;
127 self
128 }
129
130 #[must_use]
131 pub fn default_value(mut self, value: DbValue) -> Self {
132 self.default_value = Some(value);
133 self
134 }
135
136 #[must_use]
137 pub fn db_name(mut self, db_name: impl Into<String>) -> Self {
138 self.db_name = Some(db_name.into());
139 self
140 }
141}