Skip to main content

openauth_core/options/
session.rs

1use std::collections::BTreeMap;
2
3use crate::db::{DbFieldType, DbValue};
4
5use super::cookies::CookieCacheOptions;
6
7/// Session configuration.
8#[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 cookie_cache: CookieCacheOptions,
14    pub additional_fields: BTreeMap<String, SessionAdditionalField>,
15}
16
17/// Runtime metadata for custom session fields accepted by `/update-session`.
18#[derive(Debug, Clone, PartialEq)]
19pub struct SessionAdditionalField {
20    pub field_type: DbFieldType,
21    pub required: bool,
22    pub input: bool,
23    pub returned: bool,
24    pub default_value: Option<DbValue>,
25    pub db_name: Option<String>,
26}
27
28impl SessionAdditionalField {
29    pub fn new(field_type: DbFieldType) -> Self {
30        Self {
31            field_type,
32            required: true,
33            input: true,
34            returned: true,
35            default_value: None,
36            db_name: None,
37        }
38    }
39
40    #[must_use]
41    pub fn optional(mut self) -> Self {
42        self.required = false;
43        self
44    }
45
46    #[must_use]
47    pub fn generated(mut self) -> Self {
48        self.input = false;
49        self
50    }
51
52    #[must_use]
53    pub fn hidden(mut self) -> Self {
54        self.returned = false;
55        self
56    }
57
58    #[must_use]
59    pub fn default_value(mut self, value: DbValue) -> Self {
60        self.default_value = Some(value);
61        self
62    }
63
64    #[must_use]
65    pub fn db_name(mut self, db_name: impl Into<String>) -> Self {
66        self.db_name = Some(db_name.into());
67        self
68    }
69}