Development Documentation (main branch) - For stable release docs, see docs.rs/eidetica

eidetica/user/
mod.rs

1//! User system for Eidetica.
2//!
3//! Provides multi-user account management with per-user key storage, database tracking,
4//! and sync preferences.
5//!
6//! # Architecture
7//!
8//! - **[`Instance`](crate::Instance)**: Manages infrastructure (user accounts, system databases, backends)
9//! - **[`User`]**: Handles contextual operations (database access, key management) via sessions
10//!
11//! Each user has a private database (`user:<username>`) storing:
12//! - **keys**: Encrypted Ed25519 keypairs with per-database SigKey mappings
13//! - **databases**: Tracked databases with sync preferences
14//! - **settings**: User configuration
15//!
16//! # Key Management
17//!
18//! Keys are Ed25519 keypairs, encrypted at rest using the user's password (Argon2id).
19//! Each key can authenticate with multiple databases via SigKey mappings, which are
20//! auto-discovered when tracking a database.
21//!
22//! # Sync Settings
23//!
24//! Per-database sync preferences ([`types::SyncSettings`]):
25//! - `sync_enabled`: Master switch
26//! - `sync_on_commit`: Trigger sync on each commit
27//! - `interval_seconds`: Periodic sync interval
28//!
29//! When multiple users track the same database, settings are merged to use the most aggressive settings.
30
31pub mod crypto;
32pub mod errors;
33pub mod key_manager;
34pub mod session;
35pub mod system_databases;
36pub mod types;
37
38pub use errors::UserError;
39pub use key_manager::UserKeyManager;
40pub use session::User;
41pub use types::*;