Skip to main content

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//! app.install(Db::from_env().migrations::<sova_auth::AuthMigrator>());
8//! app.install(memory_sessions());
9//! app.install(
10//!   Fortify::new()
11//!     .features([Feature::Registration, Feature::ResetPasswords, /* … */])
12//!     .api_mount("/api/auth")
13//!     .login_redirect("/login")
14//!     .home("/cabinet"),
15//! );
16//! // Mail only when ResetPasswords / EmailVerification:
17//! // app.install(Mail::from_env());
18//! cabinet.use_middleware(Fortify::guard());
19//!
20//! // Programmatic login (impersonation / seed / admin switch):
21//! let cu = load_current_user(db, id).await?.unwrap();
22//! req.login_user(cu);   // regenerates session + passport:user
23//! req.logout_user();
24//! ```
25
26mod actions;
27mod feature;
28mod forms;
29mod guard;
30#[cfg(feature = "mail")]
31mod mail;
32mod migration;
33mod paths;
34mod plugin;
35mod state;
36mod store;
37mod token;
38mod two_factor;
39
40#[cfg(feature = "activity")]
41mod activity_log;
42
43pub mod entity;
44
45#[cfg(feature = "mail")]
46pub use mail::{send_reset, send_verify, ResetPasswordMail, VerifyEmailMail};
47pub use feature::Feature;
48pub use guard::AuthExt;
49pub use migration::AuthMigrator;
50pub use paths::FortifyPaths;
51pub use plugin::Fortify;
52pub use store::{
53    assign_role, create_permission, create_role, delete_permission, delete_role, find_user_by_email,
54    find_user_by_id, list_permissions, list_roles, load_current_user, mark_email_verified,
55    register_user, revoke_role, set_avatar, set_user_roles, sync_role_permissions, update_permission,
56    update_role, user_ids_with_permission, user_ids_with_role, CurrentUser,
57};
58pub use token::{make_verify_token, parse_verify_token};
59
60#[cfg(feature = "vld")]
61pub use forms::{
62    ConfirmPasswordForm, DisableTwoFactorForm, ForgotForm, LoginForm, PasswordForm, ProfileForm,
63    RegisterForm, ResetForm, TwoFactorCodeForm,
64};