#![forbid(unsafe_code)]
#![allow(missing_docs)] #![allow(clippy::module_name_repetitions)] #![allow(clippy::must_use_candidate)] #![allow(clippy::missing_errors_doc)] #![allow(clippy::missing_panics_doc)] #![allow(clippy::needless_pass_by_value)] #![allow(clippy::unused_async)] #![allow(clippy::similar_names)] #![allow(clippy::unused_self)] #![allow(clippy::unnecessary_wraps)] #![allow(clippy::too_many_lines)] #![allow(clippy::struct_excessive_bools)] #![allow(clippy::struct_field_names)] #![allow(clippy::doc_markdown)] #![allow(clippy::return_self_not_must_use)] #![allow(clippy::wildcard_imports)] #![allow(clippy::items_after_statements)] #![allow(clippy::cast_possible_truncation)] #![allow(clippy::cast_sign_loss)] #![allow(clippy::uninlined_format_args)] #![allow(clippy::redundant_closure_for_method_calls)] #![allow(clippy::single_match_else)] #![allow(clippy::manual_let_else)] #![allow(clippy::redundant_closure)] #![allow(clippy::missing_const_for_fn)] #![allow(clippy::format_push_string)] #![allow(clippy::match_same_arms)] #![allow(clippy::cast_possible_wrap)] #![allow(clippy::useless_format)] #![allow(clippy::cast_precision_loss)] #![allow(clippy::redundant_clone)] #![allow(clippy::missing_fields_in_debug)] #![allow(clippy::map_unwrap_or)] #![allow(clippy::cast_lossless)] #![allow(clippy::unnecessary_map_or)] #![allow(clippy::duration_suboptimal_units)] #![allow(clippy::single_char_pattern)] #![allow(clippy::float_cmp)] #![allow(clippy::ignored_unit_patterns)] #![allow(clippy::default_trait_access)]
pub mod audit_logger;
pub mod constant_time;
pub mod error;
pub mod error_sanitizer;
pub mod handlers;
pub mod jwks;
pub mod jwt;
pub mod middleware;
pub mod monitoring;
pub mod oauth;
pub mod oidc_provider;
pub mod operation_rbac;
pub mod provider;
pub mod providers;
pub mod proxy;
pub mod rate_limiting;
pub mod security_config;
pub mod security_init;
pub mod session;
pub mod session_postgres;
pub mod state_encryption;
pub mod state_store;
#[cfg(test)]
mod security_tests;
#[cfg(test)]
mod error_sanitization_tests;
#[cfg(test)]
mod constant_time_tests;
#[cfg(test)]
mod state_encryption_tests;
#[cfg(test)]
mod rate_limiting_tests;
#[cfg(test)]
mod integration_security_tests;
pub use audit_logger::{
AuditEntry, AuditEventType, AuditLogger, SecretType, StructuredAuditLogger, get_audit_logger,
init_audit_logger,
};
pub use constant_time::ConstantTimeOps;
pub use error::{AuthError, Result};
pub use error_sanitizer::{
AuthErrorSanitizer, Sanitizable, SanitizedError, messages as error_messages,
};
pub use handlers::{
AuthCallbackQuery, AuthLogoutRequest, AuthRefreshRequest, AuthStartRequest, AuthState,
auth_callback, auth_logout, auth_refresh, auth_start,
};
pub use jwks::JwksCache;
pub use jwt::{Claims, JwtValidator, generate_hs256_token, generate_rs256_token};
pub use middleware::{AuthMiddleware, AuthenticatedUser};
pub use monitoring::{AuthEvent, AuthMetrics, OperationTimer};
pub use oauth::{
ExternalAuthProvider, IdTokenClaims, NonceParameter, OAuth2Client, OAuth2ClientConfig,
OAuthAuditEvent, OAuthSession, OIDCClient, OIDCProviderConfig, PKCEChallenge,
ProviderFailoverManager, ProviderRegistry, ProviderType, StateParameter, TokenRefreshScheduler,
TokenRefreshWorker, TokenRefresher,
};
pub use oidc_provider::OidcProvider;
pub use operation_rbac::{OperationPermission, RBACPolicy, Role};
pub use provider::{OAuthProvider, PkceChallenge, TokenResponse, UserInfo};
pub use providers::{AzureADOAuth, GitHubOAuth, GoogleOAuth, KeycloakOAuth, create_provider};
pub use proxy::ProxyConfig;
pub use rate_limiting::{KeyedRateLimiter, RateLimitConfig, RateLimiters};
pub use security_config::{
AuditLoggingSettings, ErrorSanitizationSettings, RateLimitingSettings,
SecurityConfigFromSchema, StateEncryptionSettings,
};
pub use security_init::{
init_default_security_config, init_security_config, log_security_config,
validate_security_config,
};
pub use session::{SessionData, SessionStore, TokenPair};
pub use session_postgres::PostgresSessionStore;
pub use state_encryption::{EncryptedState, StateEncryption, generate_state_encryption_key};
pub use state_store::{InMemoryStateStore, StateStore};