diff --git a/src/app_test.rs b/src/app_test.rs index 884aed6e..13b10fef 100644 --- a/src/app_test.rs +++ b/src/app_test.rs @@ -3,6 +3,8 @@ use std::sync::Arc; use torrust_tracker_configuration::Configuration; +use crate::core::authentication::key::repository::in_memory::InMemoryKeyRepository; +use crate::core::authentication::key::repository::persisted::DatabaseKeyRepository; use crate::core::databases::Database; use crate::core::services::initialize_database; use crate::core::whitelist::repository::in_memory::InMemoryWhitelist; @@ -25,7 +27,13 @@ pub fn initialize_tracker_dependencies( &config.core, &in_memory_whitelist.clone(), )); - let authentication = Arc::new(authentication::Facade::new(&config.core, &database.clone())); + let db_key_repository = Arc::new(DatabaseKeyRepository::new(&database)); + let in_memory_key_repository = Arc::new(InMemoryKeyRepository::default()); + let authentication = Arc::new(authentication::Facade::new( + &config.core, + &db_key_repository.clone(), + &in_memory_key_repository.clone(), + )); (database, in_memory_whitelist, whitelist_authorization, authentication) } diff --git a/src/bootstrap/app.rs b/src/bootstrap/app.rs index bc6b7a6b..a87e4ca8 100644 --- a/src/bootstrap/app.rs +++ b/src/bootstrap/app.rs @@ -22,6 +22,8 @@ use tracing::instrument; use super::config::initialize_configuration; use crate::bootstrap; use crate::container::AppContainer; +use crate::core::authentication::key::repository::in_memory::InMemoryKeyRepository; +use crate::core::authentication::key::repository::persisted::DatabaseKeyRepository; use crate::core::services::{initialize_database, initialize_tracker, initialize_whitelist_manager, statistics}; use crate::core::whitelist::repository::in_memory::InMemoryWhitelist; use crate::core::{authentication, whitelist}; @@ -89,7 +91,13 @@ pub fn initialize_app_container(configuration: &Configuration) -> AppContainer { &in_memory_whitelist.clone(), )); let whitelist_manager = initialize_whitelist_manager(database.clone(), in_memory_whitelist.clone()); - let authentication = Arc::new(authentication::Facade::new(&configuration.core, &database.clone())); + let db_key_repository = Arc::new(DatabaseKeyRepository::new(&database)); + let in_memory_key_repository = Arc::new(InMemoryKeyRepository::default()); + let authentication = Arc::new(authentication::Facade::new( + &configuration.core, + &db_key_repository.clone(), + &in_memory_key_repository.clone(), + )); let tracker = Arc::new(initialize_tracker( configuration, diff --git a/src/bootstrap/jobs/http_tracker.rs b/src/bootstrap/jobs/http_tracker.rs index b07ff935..abcc2a08 100644 --- a/src/bootstrap/jobs/http_tracker.rs +++ b/src/bootstrap/jobs/http_tracker.rs @@ -100,6 +100,8 @@ mod tests { use crate::bootstrap::app::initialize_global_services; use crate::bootstrap::jobs::http_tracker::start_job; + use crate::core::authentication::key::repository::in_memory::InMemoryKeyRepository; + use crate::core::authentication::key::repository::persisted::DatabaseKeyRepository; use crate::core::services::{initialize_database, initialize_tracker, statistics}; use crate::core::whitelist::repository::in_memory::InMemoryWhitelist; use crate::core::{authentication, whitelist}; @@ -123,7 +125,13 @@ mod tests { &cfg.core, &in_memory_whitelist.clone(), )); - let authentication = Arc::new(authentication::Facade::new(&cfg.core, &database.clone())); + let db_key_repository = Arc::new(DatabaseKeyRepository::new(&database)); + let in_memory_key_repository = Arc::new(InMemoryKeyRepository::default()); + let authentication = Arc::new(authentication::Facade::new( + &cfg.core, + &db_key_repository.clone(), + &in_memory_key_repository.clone(), + )); let tracker = Arc::new(initialize_tracker(&cfg, &database, &whitelist_authorization, &authentication)); diff --git a/src/bootstrap/jobs/tracker_apis.rs b/src/bootstrap/jobs/tracker_apis.rs index 70e2e673..56e4a2e4 100644 --- a/src/bootstrap/jobs/tracker_apis.rs +++ b/src/bootstrap/jobs/tracker_apis.rs @@ -149,6 +149,8 @@ mod tests { use crate::bootstrap::app::initialize_global_services; use crate::bootstrap::jobs::tracker_apis::start_job; + use crate::core::authentication::key::repository::in_memory::InMemoryKeyRepository; + use crate::core::authentication::key::repository::persisted::DatabaseKeyRepository; use crate::core::services::{initialize_database, initialize_tracker, initialize_whitelist_manager, statistics}; use crate::core::whitelist::repository::in_memory::InMemoryWhitelist; use crate::core::{authentication, whitelist}; @@ -176,7 +178,13 @@ mod tests { &in_memory_whitelist.clone(), )); let whitelist_manager = initialize_whitelist_manager(database.clone(), in_memory_whitelist.clone()); - let authentication = Arc::new(authentication::Facade::new(&cfg.core, &database.clone())); + let db_key_repository = Arc::new(DatabaseKeyRepository::new(&database)); + let in_memory_key_repository = Arc::new(InMemoryKeyRepository::default()); + let authentication = Arc::new(authentication::Facade::new( + &cfg.core, + &db_key_repository.clone(), + &in_memory_key_repository.clone(), + )); let tracker = Arc::new(initialize_tracker(&cfg, &database, &whitelist_authorization, &authentication)); diff --git a/src/core/authentication/mod.rs b/src/core/authentication/mod.rs index bab0de8a..d26379b0 100644 --- a/src/core/authentication/mod.rs +++ b/src/core/authentication/mod.rs @@ -7,7 +7,7 @@ use key::repository::persisted::DatabaseKeyRepository; use torrust_tracker_configuration::Core; use torrust_tracker_primitives::DurationSinceUnixEpoch; -use super::databases::{self, Database}; +use super::databases::{self}; use super::error::PeerKeyError; use crate::CurrentClock; @@ -29,12 +29,13 @@ pub struct Facade { impl Facade { #[must_use] - pub fn new(config: &Core, database: &Arc>) -> Self { - let db_key_repository = Arc::new(DatabaseKeyRepository::new(database)); - let in_memory_key_repository = Arc::new(InMemoryKeyRepository::default()); - + pub fn new( + config: &Core, + db_key_repository: &Arc, + in_memory_key_repository: &Arc, + ) -> Self { Self { - authentication_service: service::Service::new(config, &in_memory_key_repository), + authentication_service: service::Service::new(config, in_memory_key_repository), keys_handler: KeysHandler::new(&db_key_repository.clone(), &in_memory_key_repository.clone()), } } @@ -145,20 +146,22 @@ mod tests { mod the_tracker_configured_as_private { + use std::sync::Arc; use std::time::Duration; use torrust_tracker_configuration::v2_0_0::core::PrivateMode; + use torrust_tracker_configuration::Configuration; use torrust_tracker_test_helpers::configuration; use crate::core::authentication; + use crate::core::authentication::key::repository::in_memory::InMemoryKeyRepository; + use crate::core::authentication::key::repository::persisted::DatabaseKeyRepository; use crate::core::services::initialize_database; fn instantiate_authentication_facade() -> authentication::Facade { let config = configuration::ephemeral_private(); - let database = initialize_database(&config); - - authentication::Facade::new(&config.core, &database.clone()) + instantiate_authentication_facade_with_configuration(&config) } fn instantiate_authentication_facade_with_checking_keys_expiration_disabled() -> authentication::Facade { @@ -168,9 +171,16 @@ mod tests { check_keys_expiration: false, }); - let database = initialize_database(&config); - - authentication::Facade::new(&config.core, &database.clone()) + instantiate_authentication_facade_with_configuration(&config) + } + + fn instantiate_authentication_facade_with_configuration(config: &Configuration) -> authentication::Facade { + let database = initialize_database(config); + + let db_key_repository = Arc::new(DatabaseKeyRepository::new(&database)); + let in_memory_key_repository = Arc::new(InMemoryKeyRepository::default()); + + authentication::Facade::new(&config.core, &db_key_repository.clone(), &in_memory_key_repository.clone()) } #[tokio::test] diff --git a/src/servers/apis/server.rs b/src/servers/apis/server.rs index a11442a5..b6ff5099 100644 --- a/src/servers/apis/server.rs +++ b/src/servers/apis/server.rs @@ -342,6 +342,8 @@ mod tests { use crate::bootstrap::app::initialize_global_services; use crate::bootstrap::jobs::make_rust_tls; + use crate::core::authentication::key::repository::in_memory::InMemoryKeyRepository; + use crate::core::authentication::key::repository::persisted::DatabaseKeyRepository; use crate::core::services::{initialize_database, initialize_tracker, initialize_whitelist_manager, statistics}; use crate::core::whitelist::repository::in_memory::InMemoryWhitelist; use crate::core::{authentication, whitelist}; @@ -369,7 +371,13 @@ mod tests { &in_memory_whitelist.clone(), )); let whitelist_manager = initialize_whitelist_manager(database.clone(), in_memory_whitelist.clone()); - let authentication = Arc::new(authentication::Facade::new(&cfg.core, &database.clone())); + let db_key_repository = Arc::new(DatabaseKeyRepository::new(&database)); + let in_memory_key_repository = Arc::new(InMemoryKeyRepository::default()); + let authentication = Arc::new(authentication::Facade::new( + &cfg.core, + &db_key_repository.clone(), + &in_memory_key_repository.clone(), + )); let tracker = Arc::new(initialize_tracker(&cfg, &database, &whitelist_authorization, &authentication)); diff --git a/src/servers/http/server.rs b/src/servers/http/server.rs index e6370c77..140ef4e0 100644 --- a/src/servers/http/server.rs +++ b/src/servers/http/server.rs @@ -246,6 +246,8 @@ mod tests { use crate::bootstrap::app::initialize_global_services; use crate::bootstrap::jobs::make_rust_tls; + use crate::core::authentication::key::repository::in_memory::InMemoryKeyRepository; + use crate::core::authentication::key::repository::persisted::DatabaseKeyRepository; use crate::core::services::{initialize_database, initialize_tracker, initialize_whitelist_manager, statistics}; use crate::core::whitelist::repository::in_memory::InMemoryWhitelist; use crate::core::{authentication, whitelist}; @@ -268,7 +270,13 @@ mod tests { &in_memory_whitelist.clone(), )); let _whitelist_manager = initialize_whitelist_manager(database.clone(), in_memory_whitelist.clone()); - let authentication = Arc::new(authentication::Facade::new(&cfg.core, &database.clone())); + let db_key_repository = Arc::new(DatabaseKeyRepository::new(&database)); + let in_memory_key_repository = Arc::new(InMemoryKeyRepository::default()); + let authentication = Arc::new(authentication::Facade::new( + &cfg.core, + &db_key_repository.clone(), + &in_memory_key_repository.clone(), + )); let tracker = Arc::new(initialize_tracker(&cfg, &database, &whitelist_authorization, &authentication)); diff --git a/src/servers/udp/server/mod.rs b/src/servers/udp/server/mod.rs index 078510bc..fafb8299 100644 --- a/src/servers/udp/server/mod.rs +++ b/src/servers/udp/server/mod.rs @@ -64,6 +64,8 @@ mod tests { use super::spawner::Spawner; use super::Server; use crate::bootstrap::app::initialize_global_services; + use crate::core::authentication::key::repository::in_memory::InMemoryKeyRepository; + use crate::core::authentication::key::repository::persisted::DatabaseKeyRepository; use crate::core::services::{initialize_database, initialize_tracker, initialize_whitelist_manager, statistics}; use crate::core::whitelist::repository::in_memory::InMemoryWhitelist; use crate::core::{authentication, whitelist}; @@ -88,7 +90,14 @@ mod tests { &in_memory_whitelist.clone(), )); let _whitelist_manager = initialize_whitelist_manager(database.clone(), in_memory_whitelist.clone()); - let authentication = Arc::new(authentication::Facade::new(&cfg.core, &database.clone())); + let db_key_repository = Arc::new(DatabaseKeyRepository::new(&database)); + let in_memory_key_repository = Arc::new(InMemoryKeyRepository::default()); + let authentication = Arc::new(authentication::Facade::new( + &cfg.core, + &db_key_repository.clone(), + &in_memory_key_repository.clone(), + )); + let tracker = Arc::new(initialize_tracker(&cfg, &database, &whitelist_authorization, &authentication)); let udp_trackers = cfg.udp_trackers.clone().expect("missing UDP trackers configuration"); @@ -133,7 +142,14 @@ mod tests { &cfg.core, &in_memory_whitelist.clone(), )); - let authentication = Arc::new(authentication::Facade::new(&cfg.core, &database.clone())); + let db_key_repository = Arc::new(DatabaseKeyRepository::new(&database)); + let in_memory_key_repository = Arc::new(InMemoryKeyRepository::default()); + let authentication = Arc::new(authentication::Facade::new( + &cfg.core, + &db_key_repository.clone(), + &in_memory_key_repository.clone(), + )); + let tracker = Arc::new(initialize_tracker(&cfg, &database, &whitelist_authorization, &authentication)); let config = &cfg.udp_trackers.as_ref().unwrap().first().unwrap();