auth_framework/authentication/
advanced_auth.rs1use chrono::{DateTime, Utc};
5use serde::{Deserialize, Serialize};
6use std::collections::HashMap;
7
8#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
10pub enum DelegationType {
11 UserToUser,
12 UserToRole,
13 RoleToRole,
14}
15
16#[derive(Debug, Clone, Serialize, Deserialize)]
17pub struct Delegation {
18 pub id: String,
19 pub delegator: String, pub delegatee: String, pub delegation_type: DelegationType,
22 pub scopes: Vec<String>,
23 pub start_time: Option<DateTime<Utc>>,
24 pub end_time: Option<DateTime<Utc>>,
25 pub explicit: bool,
26 pub revoked: bool,
27 pub created_at: DateTime<Utc>,
28 pub revoked_at: Option<DateTime<Utc>>,
29 pub audit_log: Vec<String>, }
31
32#[derive(Debug, Clone, Serialize, Deserialize)]
34pub struct AbacPolicy {
35 pub id: String,
36 pub name: String,
37 pub dsl: String, pub attributes: HashMap<String, String>, pub enabled: bool,
40 pub dynamic: bool, pub created_at: DateTime<Utc>,
42 pub updated_at: Option<DateTime<Utc>>,
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize)]
47pub struct ManagedResource {
48 pub id: String,
49 pub resource_type: String, pub uri: String,
51 pub attributes: HashMap<String, String>,
52 pub registered_by: String,
53 pub registered_at: DateTime<Utc>,
54 pub permissions: Vec<String>, }
56
57#[derive(Debug, Clone, Serialize, Deserialize)]
59pub struct BackupCodeConfig {
60 pub code_count: usize,
61 pub code_length: usize,
62 pub code_format: String, pub code_complexity: String, pub expiry_seconds: u64,
65 pub rotate_on_use: bool,
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize)]
69pub struct UserBackupCodes {
70 pub user_id: String,
71 pub codes: Vec<String>,
72 pub used_codes: Vec<String>,
73 pub generated_at: DateTime<Utc>,
74 pub expires_at: DateTime<Utc>,
75 pub config: BackupCodeConfig,
76}
77
78pub trait DelegationManager {
80 fn create_delegation(&mut self, delegation: Delegation) -> Result<(), String>;
81 fn revoke_delegation(&mut self, delegation_id: &str, by: &str) -> Result<(), String>;
82 fn get_delegations_for(&self, user_or_role: &str) -> Vec<Delegation>;
83 fn audit_delegation(&mut self, delegation_id: &str, entry: &str);
84}
85
86pub trait AbacPolicyManager {
87 fn add_policy(&mut self, policy: AbacPolicy) -> Result<(), String>;
88 fn update_policy(&mut self, policy_id: &str, dsl: &str) -> Result<(), String>;
89 fn evaluate_policy(&self, policy_id: &str, attributes: &HashMap<String, String>) -> bool;
90}
91
92pub trait ResourceManager {
93 fn register_resource(&mut self, resource: ManagedResource) -> Result<(), String>;
94 fn update_resource(
95 &mut self,
96 resource_id: &str,
97 attributes: &HashMap<String, String>,
98 ) -> Result<(), String>;
99 fn get_resource(&self, resource_id: &str) -> Option<ManagedResource>;
100}
101
102pub trait BackupCodeManager {
103 fn generate_codes(&mut self, user_id: &str, config: &BackupCodeConfig) -> UserBackupCodes;
104 fn verify_code(&mut self, user_id: &str, code: &str) -> bool;
105 fn rotate_codes(&mut self, user_id: &str);
106}
107
108