auth_framework/prelude.rs
1//! Auth Framework Prelude
2//!
3//! This module provides a convenient way to import the most commonly used types
4//! and traits from the auth framework. Instead of importing individual types,
5//! you can simply use:
6//!
7//! ```rust
8//! use auth_framework::prelude::*;
9//! ```
10//!
11//! This imports all the essential types you need to get started with authentication
12//! and authorization in your application.
13//!
14//! # Recommended Entry Points
15//!
16//! - Use [`AuthFramework`] for the normal library entry point.
17//! - Use [`ModularAuthFramework`] only when you need direct access to the
18//! component managers from `auth_modular`.
19//! - Use [`AuthFramework::users`], [`AuthFramework::sessions`],
20//! [`AuthFramework::tokens`], and [`AuthFramework::authorization`] when you
21//! want grouped operations instead of the full façade.
22//! - Use [`AppConfigBuilder`] for simple app-defined configuration.
23//! - Use [`LayeredConfigBuilder`] and [`ConfigManager`] for layered config
24//! sourced from files and environment variables.
25//! - Use [`SessionManager`] for the standard session engine and
26//! [`SecureSessionManager`] when you need the hardened secure-session layer.
27//!
28//! # What's Included
29//!
30//! ## Core Framework Types
31//! - [`AuthFramework`] - Main authentication framework
32//! - [`AuthConfig`] - Configuration builder
33//! - [`AuthError`] - Error type with detailed error variants
34//! - [`AuthFrameworkResult`] - Convenient Result type alias
35//!
36//! ## Authentication Methods
37//! - [`JwtMethod`] - JWT authentication
38//! - [`OAuth2Method`] - OAuth 2.0 authentication
39//! - [`ApiKeyMethod`] - API key authentication
40//! - [`PasswordMethod`] - Password-based authentication
41//!
42//! ## Tokens and Sessions
43//! - [`AuthToken`] - Authentication token representation
44//! - [`SessionData`] - Session data structure
45//! - [`ProviderProfile`] - Provider-backed user profile information
46//!
47//! ## Permissions and Authorization
48//! - [`Permission`] - Permission representation
49//! - [`Role`] - Role representation with builder methods
50//! - [`AbacPolicy`] - Attribute-based access control policy with builder methods
51//! - [`Delegation`] - Permission delegation with builder methods
52//! - [`PermissionChecker`] - Permission validation trait
53//!
54//! ## Storage Abstractions
55//! - [`AuthStorage`] - Storage trait for persistence
56//! - [`MemoryStorage`] - In-memory storage implementation
57//!
58//! ## Web Framework Integration
59//! - `RequireAuth` - Middleware for requiring authentication
60//! - `AuthenticatedUser` - Extractor for authenticated users
61//! - `RequirePermission` - Middleware for permission checking
62//!
63//! ## Builder Patterns and Helpers
64//! - [`AuthBuilder`] - Fluent builder for framework setup
65//! - [`AuthConfigBuilder`] - Organized builder for AuthConfig with grouped settings
66//! - [`SecurityPreset`] - Pre-configured security levels
67//! - [`AppConfigBuilder`] - Simple application configuration builder
68//! - [`LayeredConfigBuilder`] - Layered configuration builder
69//! - [`AdvancedPermissionCheck`] - Builder for multi-source permission checks
70//! - [`ExecutionMode`] - `DryRun` vs `Execute` for maintenance operations
71//! - [`UserStatus`] - `Active` vs `Inactive` for user account state
72//! - [`SessionFilter`] - `ActiveOnly` vs `IncludeInactive` for session listing
73//!
74//! ## Time and Rate Limiting Helpers
75//! - Time duration helpers: [`hours`], [`minutes`], [`days`], [`weeks`]
76//! - Rate limiting helpers: [`requests`], [`RequestCount::per_second`],
77//! [`RequestCount::per_minute`], [`RequestCount::per_hour`]
78//!
79//! # Quick Start Example
80//!
81//! ```rust,no_run
82//! use auth_framework::prelude::*;
83//!
84//! #[tokio::main]
85//! async fn main() -> AuthFrameworkResult<()> {
86//! // Create auth framework with sensible defaults
87//! let auth = AuthFramework::quick_start()
88//! .jwt_auth_from_env()
89//! .with_postgres_from_env()
90//! .build().await?;
91//!
92//! // Create a token
93//! let token = auth.create_auth_token(
94//! "user123",
95//! vec!["read".to_string()],
96//! "jwt",
97//! None
98//! ).await?;
99//!
100//! // Validate token
101//! if auth.validate_token(&token).await? {
102//! println!("Token is valid!");
103//! }
104//!
105//! Ok(())
106//! }
107//! ```
108
109// Re-export core framework types
110pub use crate::AuthFramework;
111pub use crate::ModularAuthFramework;
112pub use crate::auth::{
113 AdminOperations, AuditOperations, AuthStats, AuthorizationOperations, MfaOperations,
114 MonitoringOperations, SessionOperations, TokenOperations, UserInfo, UserOperations,
115};
116
117// Re-export request / query structs for operations facades
118pub use crate::auth_operations::{
119 AuditLogQuery, DelegationRequest, ExecutionMode, PermissionContext, SessionCreateRequest,
120 SessionFilter, TokenCreateRequest, UserListQuery, UserStatus,
121};
122
123// Re-export configuration types
124pub use crate::config::app_config::{AppConfig, ConfigBuilder as AppConfigBuilder};
125pub use crate::config::config_manager::{
126 AuthFrameworkSettings, ConfigBuilder as LayeredConfigBuilder, ConfigManager,
127};
128pub use crate::config::{
129 AuditConfig, AuthConfig, AuthConfigBuilder, CookieSameSite, CorsConfig, JwtAlgorithm,
130 PasswordHashAlgorithm, RateLimitConfig, SecurityConfig, StorageConfig,
131};
132
133// Re-export error types
134pub use crate::errors::{
135 AuthError, DeviceFlowError, MfaError, OAuthProviderError, PermissionError, Result,
136 StorageError, TokenError,
137};
138
139// Re-export authentication methods
140pub use crate::methods::{
141 ApiKeyMethod, AuthMethod, AuthMethodEnum, JwtMethod, MethodResult, OAuth2Method, PasswordMethod,
142};
143
144// Re-export common domain types
145pub use crate::types::{
146 AdditionalParams, GrantTypes, IpList, Permissions, RedirectUris, ResponseTypes, Roles, Scopes,
147 UserAttributes, UserAttributesString,
148};
149
150// Re-export SAML if available
151#[cfg(feature = "saml")]
152pub use crate::methods::saml;
153
154// Re-export tokens and user data
155pub use crate::authentication::credentials::Credential;
156pub use crate::providers::{
157 OAuthProvider, OAuthProviderConfig, OAuthProviderConfigBuilder, ProviderProfile,
158};
159pub use crate::tokens::{AuthToken, AuthTokenBuilder, TokenMetadata, TokenMetadataBuilder};
160
161// Re-export permissions and roles
162pub use crate::permissions::{
163 AbacPolicy, AdvancedPermissionCheck, Delegation, Permission, PermissionChecker, Role,
164};
165
166// Re-export authorization if enhanced RBAC is enabled
167#[cfg(feature = "enhanced-rbac")]
168pub use crate::authorization::{
169 AbacPermission as AuthzPermission, AbacRole as AuthzRole, AccessCondition, AuthorizationEngine,
170};
171
172// Re-export storage abstractions
173pub use crate::storage::{AuthStorage, MemoryStorage, SessionData};
174
175// Re-export session management
176pub use crate::security::secure_session::{
177 DeviceFingerprint, SecureSession, SecureSessionConfig, SecureSessionManager, SecurityFlags,
178};
179pub use crate::session::manager::{
180 DeviceInfo, Session, SessionConfig, SessionManager, SessionState,
181};
182
183// Re-export middleware and extractors for web frameworks
184#[cfg(feature = "axum-integration")]
185pub use crate::integrations::axum::{
186 AuthMiddleware, AuthenticatedUser, RequireAuth, RequirePermission,
187};
188
189#[cfg(feature = "actix-integration")]
190pub use crate::integrations::actix_web::AuthMiddleware as ActixAuthMiddleware;
191
192#[cfg(feature = "warp-integration")]
193pub use crate::integrations::warp::{with_auth, with_permission};
194
195// Re-export monitoring and observability
196pub use crate::monitoring::{
197 HealthCheckResult, HealthStatus, MonitoringManager, PerformanceMetrics, SecurityEvent,
198 SecurityEventBuilder, SecurityEventSeverity, SecurityEventType,
199};
200
201// Re-export audit logging
202pub use crate::audit::{
203 AuditEvent, AuditEventBuilder, AuditEventType, AuditLogger, AuditQuery, AuditQueryBuilder,
204 EventOutcome, RiskLevel,
205};
206
207// Re-export security utilities
208pub use crate::security::secure_jwt::{SecureJwtClaims, SecureJwtConfig, SecureJwtValidator};
209pub use crate::security::secure_utils::{SecureComparison, SecureRandomGen};
210pub use crate::security::{
211 SecurityAuditReport, SecurityAuditStatus, SecurityIssue, SecuritySeverity,
212};
213
214// Re-export rate limiting
215pub use crate::utils::rate_limit::RateLimiter;
216
217// Re-export testing utilities
218#[cfg(test)]
219pub use crate::testing::{MockAuthMethod, MockStorage};
220
221// Re-export CLI tools if available
222#[cfg(feature = "cli")]
223pub use crate::cli;
224
225// Re-export API server if available
226#[cfg(feature = "api-server")]
227pub use crate::api::{ApiError, ApiResponse, ApiServer, ApiState};
228
229// Re-export OIDC server components
230pub use crate::server::oidc::core::{IdTokenRequest, OidcConfigBuilder};
231pub use crate::server::oidc::{
232 IdTokenClaims, Jwk, JwkSet, OidcConfig, OidcDiscoveryDocument, OidcProvider,
233 UserInfo as OidcUserInfo,
234};
235
236// Re-export OAuth2 server
237pub use crate::oauth2_server::{
238 AuthorizationRequest, GrantType, OAuth2Config, OAuth2ConfigBuilder, OAuth2Server, ResponseType,
239 TokenRequest, TokenResponse,
240};
241
242// Builder patterns and ergonomic helpers
243pub use crate::builders::*;
244
245// Time duration helpers for ergonomic configuration
246pub mod time {
247 use std::time::Duration;
248
249 /// Create a duration representing the specified number of hours
250 pub fn hours(h: u64) -> Duration {
251 Duration::from_secs(h * 3600)
252 }
253
254 /// Create a duration representing the specified number of minutes
255 pub fn minutes(m: u64) -> Duration {
256 Duration::from_secs(m * 60)
257 }
258
259 /// Create a duration representing the specified number of days
260 pub fn days(d: u64) -> Duration {
261 Duration::from_secs(d * 86400)
262 }
263
264 /// Create a duration representing the specified number of weeks
265 pub fn weeks(w: u64) -> Duration {
266 Duration::from_secs(w * 604800)
267 }
268
269 /// Create a duration representing the specified number of seconds
270 pub fn seconds(s: u64) -> Duration {
271 Duration::from_secs(s)
272 }
273}
274
275// Rate limiting helpers for ergonomic configuration
276pub mod rate {
277 use std::time::Duration;
278
279 /// Helper for specifying request counts in rate limiting
280 pub struct RequestCount(pub u32);
281
282 /// Helper for creating request count specifications
283 pub fn requests(count: u32) -> RequestCount {
284 RequestCount(count)
285 }
286
287 impl RequestCount {
288 /// Specify rate limit as "per second"
289 pub fn per_second(self) -> (u32, Duration) {
290 (self.0, Duration::from_secs(1))
291 }
292
293 /// Specify rate limit as "per minute"
294 pub fn per_minute(self) -> (u32, Duration) {
295 (self.0, Duration::from_secs(60))
296 }
297
298 /// Specify rate limit as "per hour"
299 pub fn per_hour(self) -> (u32, Duration) {
300 (self.0, Duration::from_secs(3600))
301 }
302
303 /// Specify rate limit as "per day"
304 pub fn per_day(self) -> (u32, Duration) {
305 (self.0, Duration::from_secs(86400))
306 }
307
308 /// Specify custom rate limit window
309 pub fn per(self, duration: Duration) -> (u32, Duration) {
310 (self.0, duration)
311 }
312 }
313}
314
315// Re-export time and rate helpers at the top level for convenience
316pub use rate::{RequestCount, requests};
317pub use time::{days, hours, minutes, seconds, weeks};
318
319// Common type aliases for ergonomics
320/// Convenience alias for `Result<T, AuthError>`.
321pub type AuthFrameworkResult<T> = Result<T, AuthError>;
322
323/// A boxed, `Send`-safe async future returning `AuthFrameworkResult<()>`.
324///
325/// Useful for storing async handler callbacks in collections.
326pub type AsyncAuthHandler =
327 std::pin::Pin<Box<dyn std::future::Future<Output = AuthFrameworkResult<()>> + Send>>;
328
329// Import security presets from the security module
330pub use crate::security::SecurityPreset; // Performance presets for optimization
331#[derive(Debug, Clone)]
332pub enum PerformancePreset {
333 /// Optimized for high request throughput
334 HighThroughput,
335 /// Optimized for low latency responses
336 LowLatency,
337 /// Optimized for minimal memory usage
338 LowMemory,
339 /// Balanced performance settings
340 Balanced,
341}
342
343// Use case presets for common application types
344#[derive(Debug, Clone)]
345pub enum UseCasePreset {
346 /// Web application with sessions and cookies
347 WebApp,
348 /// REST API service with JWT tokens
349 ApiService,
350 /// Microservices with distributed auth
351 Microservices,
352 /// Mobile app backend
353 MobileBackend,
354 /// Enterprise application with RBAC
355 Enterprise,
356}