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 = "testing")]
46pub mod testing;
47
48#[cfg(feature = "mail")]
49pub use mail::{send_reset, send_verify, ResetPasswordMail, VerifyEmailMail};
50pub use feature::Feature;
51pub use guard::AuthExt;
52pub use migration::AuthMigrator;
53pub use paths::FortifyPaths;
54pub use plugin::Fortify;
55pub use store::{
56    assign_role, create_permission, create_role, delete_permission, delete_role, find_user_by_email,
57    find_user_by_id, list_permissions, list_roles, load_current_user, mark_email_verified,
58    register_user, revoke_role, set_avatar, set_user_roles, sync_role_permissions, update_permission,
59    update_role, user_ids_with_permission, user_ids_with_role, CurrentUser,
60};
61pub use token::{make_verify_token, parse_verify_token};
62
63#[cfg(feature = "vld")]
64pub use forms::{
65    ConfirmPasswordForm, DisableTwoFactorForm, ForgotForm, LoginForm, PasswordForm, ProfileForm,
66    RegisterForm, ResetForm, TwoFactorCodeForm,
67};