pub mod emergency;
pub mod guards;
pub(crate) mod mfa;
mod permissions;
pub(crate) mod recovery;
pub(crate) mod recovery_admin;
mod role;
pub(crate) mod sessions;
mod users;
pub use mfa::MfaPolicy;
pub(crate) use permissions::invalidate_user_cache;
pub use permissions::{
add_user_to_group, check_permission, create_group, grant_to_group, grant_to_user,
init_permission_tables, permissions_for_user, register_model_permissions,
remove_user_from_group, Permission, PermissionError, Superuser,
};
pub use recovery::{
DefaultPasswordPolicy, DefaultRecoveryPolicy, LoginThrottle, PasswordPolicy,
PasswordPolicyError, RecoveryPolicy, SharedPasswordPolicy, SharedRecoveryPolicy,
};
pub use role::{protected_roles, Role};
pub use sessions::{
create_session, current_session_id, delete_session, identity_from_session, init_session_tables,
invalidate_sessions, list_active_for_user, logout_session, purge_expired_sessions,
session_token_from_cookie, InvalidationOutcome, Session, SessionInvalidationReason,
SessionTarget, SessionTrust, SESSION_COOKIE,
};
#[allow(deprecated)]
pub use users::would_orphan_developers;
pub use users::{
create_user, find_user_by_email, hash_password, init_user_tables, load_user_profile, login,
migrate_user_schema, set_password, update_user_role, verdict_for_orphan_role, verify_password,
would_orphan_protected, would_orphan_role, Identity, StoredUser, UserProfile,
};
use crate::error::Result;
use crate::orm::Db;
pub async fn init_tables(db: &Db) -> Result<()> {
init_user_tables(db).await?;
migrate_user_schema(db).await?;
init_session_tables(db).await?;
sessions::migrate_session_schema(db).await?;
sessions::migrate_session_lifecycle(db).await?;
init_permission_tables(db).await?;
recovery::migrate_user_recovery_schema(db).await?;
recovery::init_recovery_tables(db).await?;
recovery_admin::migrate_user_lockout_schema(db).await?;
mfa::migrate_user_mfa_schema(db).await?;
crate::admin::audit::ensure_table(db).await?;
Ok(())
}