alibi_core/config/identity.rs
1use std::sync::Arc;
2#[derive(Debug, Clone, Default)]
3pub struct UserConfig {
4 pub additional_fields: crate::field_policy::FieldConfigs,
5}
6
7/// Initialized identifier, persistence and cleanup policy for verification values.
8#[derive(Clone, Default)]
9pub struct VerificationConfig {
10 /// Keep globally expired verification rows during lookup. Default: false.
11 /// An atomic consume still invalidates an expired proof it selects.
12 pub disable_cleanup: bool,
13 /// Persist verification values alongside secondary storage. Without a
14 /// secondary backend, verification values always use the database.
15 pub store_in_database: bool,
16 /// Global identifier policy, applied after a plugin's own value codec.
17 pub store_identifier: crate::verification::VerificationIdentifierPolicy,
18 /// Optional shared secondary backend. Single-use values require its atomic
19 /// `get_and_delete` operation. This config does not change session storage.
20 pub secondary_storage: Option<Arc<dyn crate::store::CacheAdapter>>,
21}
22
23impl std::fmt::Debug for VerificationConfig {
24 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
25 f.debug_struct("VerificationConfig")
26 .field("disable_cleanup", &self.disable_cleanup)
27 .field("store_in_database", &self.store_in_database)
28 .field("store_identifier", &self.store_identifier)
29 .field("secondary_storage", &self.secondary_storage.is_some())
30 .finish()
31 }
32}
33
34/// Password strength rules. Length limits belong to the email/password plugin
35/// (`password_min_length`, `password_max_length`). Built-in hashing uses
36/// pinned scrypt parameters.
37#[derive(Debug, Clone, Default)]
38pub struct PasswordConfig {
39 /// Require uppercase letters
40 pub require_uppercase: bool,
41
42 /// Require lowercase letters
43 pub require_lowercase: bool,
44
45 /// Require numbers
46 pub require_numbers: bool,
47
48 /// Require special characters
49 pub require_special: bool,
50}