sova_auth/lib.rs
1//! Fortify-style authentication for Sova (register, verify, reset, 2FA, RBAC).
2//!
3//! Builds on [`sova_passport`] (session login) + [`sova_db`]. Enable feature `mail`
4//! (and install [`sova_mail::Mail`]) for email verification / password reset.
5//!
6//! ```ignore
7//! use sova_auth::{AuthMigrator, Feature, Fortify};
8//! // Facade re-exports the same enum as `AuthFeature`.
9//! // Fortify::new() enables Registration only; add mail-backed features explicitly.
10//!
11//! app.install(Db::from_env().migrations::<AuthMigrator>());
12//! app.install(memory_sessions());
13//! app.install(Mail::from_env()); // required for ResetPasswords / EmailVerification
14//! app.install(
15//! Fortify::new()
16//! .features([Feature::Registration, Feature::ResetPasswords, /* … */])
17//! .api_mount("/api/auth")
18//! .login_redirect("/login")
19//! .home("/cabinet"),
20//! );
21//! cabinet.use_middleware(Fortify::guard());
22//!
23//! // Programmatic login (impersonation / seed / admin switch):
24//! let cu = load_current_user(db, id).await?.unwrap();
25//! req.login_user(cu); // regenerates session + passport:user
26//! req.logout_user();
27//! ```
28
29mod actions;
30mod feature;
31mod forms;
32mod guard;
33#[cfg(feature = "mail")]
34mod mail;
35mod migration;
36mod paths;
37mod plugin;
38mod state;
39mod store;
40mod token;
41mod two_factor;
42
43#[cfg(feature = "activity")]
44mod activity_log;
45
46pub mod entity;
47
48#[cfg(feature = "testing")]
49pub mod testing;
50
51#[cfg(feature = "mail")]
52pub use mail::{send_reset, send_verify, ResetPasswordMail, VerifyEmailMail};
53pub use feature::Feature;
54pub use guard::AuthExt;
55pub use migration::AuthMigrator;
56pub use paths::FortifyPaths;
57pub use plugin::Fortify;
58pub use store::{
59 assign_role, create_permission, create_role, delete_permission, delete_role, find_user_by_email,
60 find_user_by_id, list_permissions, list_roles, load_current_user, mark_email_verified,
61 register_user, revoke_role, set_avatar, set_user_roles, sync_role_permissions, update_permission,
62 update_role, user_ids_with_permission, user_ids_with_role, CurrentUser,
63};
64pub use token::{make_verify_token, parse_verify_token};
65
66#[cfg(feature = "vld")]
67pub use forms::{
68 ConfirmPasswordForm, DisableTwoFactorForm, ForgotForm, LoginForm, PasswordForm, ProfileForm,
69 RegisterForm, ResetForm, TwoFactorCodeForm,
70};