Skip to main content

shared/intern/
auth.rs

1use crate::config::AnzarConfiguration;
2use crate::infrastructure::{cache::CacheAdapters, database::DatabaseAdapters};
3
4use crate::domain::repositories::{
5    AccountRepository, EmailVerificationTokenRepository, PasswordResetTokenRepository,
6    UserRepository,
7};
8
9use crate::utils::crypto::Crypto;
10
11#[derive(Clone)]
12pub struct AuthService {
13    pub(crate) user_repository: UserRepository,
14    pub(crate) account_repository: AccountRepository,
15    pub(crate) password_reset_token_repository: PasswordResetTokenRepository,
16    pub(crate) email_verification_token_repository: EmailVerificationTokenRepository,
17    pub(crate) crypto: Crypto,
18    pub(crate) configuration: AnzarConfiguration,
19}
20
21pub struct AuthContext<'a> {
22    pub service: &'a AuthService,
23    pub crypto: &'a Crypto,
24    pub configuration: &'a AnzarConfiguration,
25}
26
27impl AuthService {
28    pub fn new(
29        database_adapters: &DatabaseAdapters,
30        cache_adapters: &CacheAdapters,
31        crypto: &Crypto,
32        configuration: &AnzarConfiguration,
33    ) -> Self {
34        Self {
35            user_repository: UserRepository::new(
36                database_adapters.user_adapter.clone(),
37                cache_adapters.cache_adapter.clone(),
38            ),
39            account_repository: AccountRepository::new(database_adapters.account_adapter.clone()),
40            password_reset_token_repository: PasswordResetTokenRepository::new(
41                database_adapters.reset_token_adapter.clone(),
42            ),
43            email_verification_token_repository: EmailVerificationTokenRepository::new(
44                database_adapters.email_verification_token.clone(),
45            ),
46            crypto: crypto.clone(),
47            configuration: configuration.clone(),
48        }
49    }
50}