diff --git a/src/setup.rs b/src/app.rs similarity index 85% rename from src/setup.rs rename to src/app.rs index 86de0723c..5f75449ca 100644 --- a/src/setup.rs +++ b/src/app.rs @@ -4,14 +4,14 @@ use log::warn; use tokio::task::JoinHandle; use torrust_tracker_configuration::Configuration; -use crate::http::Version; -use crate::jobs::{http_tracker, torrent_cleanup, tracker_apis, udp_tracker}; +use crate::bootstrap::jobs::{http_tracker, torrent_cleanup, tracker_apis, udp_tracker}; +use crate::servers::http::Version; use crate::tracker; /// # Panics /// /// Will panic if the socket address for API can't be parsed. -pub async fn setup(config: &Configuration, tracker: Arc) -> Vec> { +pub async fn start(config: Arc, tracker: Arc) -> Vec> { let mut jobs: Vec> = Vec::new(); // Load peer keys @@ -61,7 +61,7 @@ pub async fn setup(config: &Configuration, tracker: Arc) -> Ve // Remove torrents without peers, every interval if config.inactive_peer_cleanup_interval > 0 { - jobs.push(torrent_cleanup::start_job(config, &tracker)); + jobs.push(torrent_cleanup::start_job(&config, &tracker)); } jobs diff --git a/src/bootstrap/app.rs b/src/bootstrap/app.rs new file mode 100644 index 000000000..e845feac0 --- /dev/null +++ b/src/bootstrap/app.rs @@ -0,0 +1,60 @@ +use std::env; +use std::sync::Arc; + +use torrust_tracker_configuration::Configuration; + +use crate::bootstrap; +use crate::shared::clock::static_time; +use crate::shared::crypto::ephemeral_instance_keys; +use crate::tracker::services::tracker_factory; +use crate::tracker::Tracker; + +#[must_use] +pub fn setup() -> (Arc, Arc) { + let configuration = Arc::new(initialize_configuration()); + let tracker = initialize_with_configuration(&configuration); + + (configuration, tracker) +} + +#[must_use] +pub fn initialize_with_configuration(configuration: &Arc) -> Arc { + initialize_static(); + initialize_logging(configuration); + Arc::new(initialize_tracker(configuration)) +} + +pub fn initialize_static() { + // Set the time of Torrust app starting + lazy_static::initialize(&static_time::TIME_AT_APP_START); + + // Initialize the Ephemeral Instance Random Seed + lazy_static::initialize(&ephemeral_instance_keys::RANDOM_SEED); +} + +/// # Panics +/// +/// Will panic if it can't load the configuration from either +/// `./config.toml` file or the env var `TORRUST_TRACKER_CONFIG`. +#[must_use] +fn initialize_configuration() -> Configuration { + const CONFIG_PATH: &str = "./config.toml"; + const CONFIG_ENV_VAR_NAME: &str = "TORRUST_TRACKER_CONFIG"; + + if env::var(CONFIG_ENV_VAR_NAME).is_ok() { + println!("Loading configuration from env var {CONFIG_ENV_VAR_NAME}"); + Configuration::load_from_env_var(CONFIG_ENV_VAR_NAME).unwrap() + } else { + println!("Loading configuration from config file {CONFIG_PATH}"); + Configuration::load_from_file(CONFIG_PATH).unwrap() + } +} + +#[must_use] +pub fn initialize_tracker(config: &Arc) -> Tracker { + tracker_factory(config.clone()) +} + +pub fn initialize_logging(config: &Arc) { + bootstrap::logging::setup(config); +} diff --git a/src/jobs/http_tracker.rs b/src/bootstrap/jobs/http_tracker.rs similarity index 97% rename from src/jobs/http_tracker.rs rename to src/bootstrap/jobs/http_tracker.rs index e0091958b..43bd0076f 100644 --- a/src/jobs/http_tracker.rs +++ b/src/bootstrap/jobs/http_tracker.rs @@ -6,8 +6,8 @@ use tokio::sync::oneshot; use tokio::task::JoinHandle; use torrust_tracker_configuration::HttpTracker; -use crate::http::v1::launcher; -use crate::http::Version; +use crate::servers::http::v1::launcher; +use crate::servers::http::Version; use crate::tracker; #[derive(Debug)] diff --git a/src/jobs/mod.rs b/src/bootstrap/jobs/mod.rs similarity index 100% rename from src/jobs/mod.rs rename to src/bootstrap/jobs/mod.rs diff --git a/src/jobs/torrent_cleanup.rs b/src/bootstrap/jobs/torrent_cleanup.rs similarity index 92% rename from src/jobs/torrent_cleanup.rs rename to src/bootstrap/jobs/torrent_cleanup.rs index 4c4ed1f53..64240bffe 100644 --- a/src/jobs/torrent_cleanup.rs +++ b/src/bootstrap/jobs/torrent_cleanup.rs @@ -8,7 +8,7 @@ use torrust_tracker_configuration::Configuration; use crate::tracker; #[must_use] -pub fn start_job(config: &Configuration, tracker: &Arc) -> JoinHandle<()> { +pub fn start_job(config: &Arc, tracker: &Arc) -> JoinHandle<()> { let weak_tracker = std::sync::Arc::downgrade(tracker); let interval = config.inactive_peer_cleanup_interval; diff --git a/src/jobs/tracker_apis.rs b/src/bootstrap/jobs/tracker_apis.rs similarity index 98% rename from src/jobs/tracker_apis.rs rename to src/bootstrap/jobs/tracker_apis.rs index 939b58638..cdebc21a8 100644 --- a/src/jobs/tracker_apis.rs +++ b/src/bootstrap/jobs/tracker_apis.rs @@ -6,7 +6,7 @@ use tokio::sync::oneshot; use tokio::task::JoinHandle; use torrust_tracker_configuration::HttpApi; -use crate::apis::server; +use crate::servers::apis::server; use crate::tracker; #[derive(Debug)] diff --git a/src/jobs/udp_tracker.rs b/src/bootstrap/jobs/udp_tracker.rs similarity index 94% rename from src/jobs/udp_tracker.rs rename to src/bootstrap/jobs/udp_tracker.rs index 57232855b..138222daf 100644 --- a/src/jobs/udp_tracker.rs +++ b/src/bootstrap/jobs/udp_tracker.rs @@ -4,8 +4,8 @@ use log::{error, info, warn}; use tokio::task::JoinHandle; use torrust_tracker_configuration::UdpTracker; +use crate::servers::udp::server::Udp; use crate::tracker; -use crate::udp::server::Udp; #[must_use] pub fn start_job(config: &UdpTracker, tracker: Arc) -> JoinHandle<()> { diff --git a/src/logging.rs b/src/bootstrap/logging.rs similarity index 100% rename from src/logging.rs rename to src/bootstrap/logging.rs diff --git a/src/bootstrap/mod.rs b/src/bootstrap/mod.rs new file mode 100644 index 000000000..e3b6467ee --- /dev/null +++ b/src/bootstrap/mod.rs @@ -0,0 +1,3 @@ +pub mod app; +pub mod jobs; +pub mod logging; diff --git a/src/lib.rs b/src/lib.rs index f01ff0468..bd775f8cf 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,33 +1,8 @@ -pub mod apis; -pub mod databases; -pub mod http; -pub mod jobs; -pub mod logging; -pub mod protocol; -pub mod setup; -pub mod signals; -pub mod stats; +pub mod app; +pub mod bootstrap; +pub mod servers; +pub mod shared; pub mod tracker; -pub mod udp; #[macro_use] extern crate lazy_static; - -pub mod static_time { - use std::time::SystemTime; - - lazy_static! { - pub static ref TIME_AT_APP_START: SystemTime = SystemTime::now(); - } -} - -pub mod ephemeral_instance_keys { - use rand::rngs::ThreadRng; - use rand::Rng; - - pub type Seed = [u8; 32]; - - lazy_static! { - pub static ref RANDOM_SEED: Seed = Rng::gen(&mut ThreadRng::default()); - } -} diff --git a/src/main.rs b/src/main.rs index b0cc68b12..87c0fc367 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,49 +1,13 @@ -use std::env; -use std::sync::Arc; - use log::info; -use torrust_tracker::stats::setup_statistics; -use torrust_tracker::{ephemeral_instance_keys, logging, setup, static_time, tracker}; -use torrust_tracker_configuration::Configuration; +use torrust_tracker::{app, bootstrap}; #[tokio::main] async fn main() { - const CONFIG_PATH: &str = "./config.toml"; - const CONFIG_ENV_VAR_NAME: &str = "TORRUST_TRACKER_CONFIG"; - - // Set the time of Torrust app starting - lazy_static::initialize(&static_time::TIME_AT_APP_START); - - // Initialize the Ephemeral Instance Random Seed - lazy_static::initialize(&ephemeral_instance_keys::RANDOM_SEED); - - // Initialize Torrust config - let config = if env::var(CONFIG_ENV_VAR_NAME).is_ok() { - println!("Loading configuration from env var {CONFIG_ENV_VAR_NAME}"); - Arc::new(Configuration::load_from_env_var(CONFIG_ENV_VAR_NAME).unwrap()) - } else { - println!("Loading configuration from config file {CONFIG_PATH}"); - Arc::new(Configuration::load_from_file(CONFIG_PATH).unwrap()) - }; - - // Initialize statistics - let (stats_event_sender, stats_repository) = setup_statistics(config.tracker_usage_statistics); - - // Initialize Torrust tracker - let tracker = match tracker::Tracker::new(config.clone(), stats_event_sender, stats_repository) { - Ok(tracker) => Arc::new(tracker), - Err(error) => { - panic!("{}", error) - } - }; - - // Initialize logging - logging::setup(&config); + let (config, tracker) = bootstrap::app::setup(); - // Run jobs - let jobs = setup::setup(&config, tracker.clone()).await; + let jobs = app::start(config.clone(), tracker.clone()).await; - // handle the signals here + // handle the signals tokio::select! { _ = tokio::signal::ctrl_c() => { info!("Torrust shutting down.."); diff --git a/src/protocol/crypto.rs b/src/protocol/crypto.rs deleted file mode 100644 index a335e2dba..000000000 --- a/src/protocol/crypto.rs +++ /dev/null @@ -1,98 +0,0 @@ -pub mod keys { - - pub mod seeds { - use self::detail::CURRENT_SEED; - use crate::ephemeral_instance_keys::{Seed, RANDOM_SEED}; - - pub trait Keeper { - type Seed: Sized + Default + AsMut<[u8]>; - fn get_seed() -> &'static Self::Seed; - } - - pub struct Instance; - pub struct Current; - - impl Keeper for Instance { - type Seed = Seed; - - fn get_seed() -> &'static Self::Seed { - &RANDOM_SEED - } - } - - impl Keeper for Current { - type Seed = Seed; - - #[allow(clippy::needless_borrow)] - fn get_seed() -> &'static Self::Seed { - &CURRENT_SEED - } - } - - #[cfg(test)] - mod tests { - use super::detail::ZEROED_TEST_SEED; - use super::{Current, Instance, Keeper}; - use crate::ephemeral_instance_keys::Seed; - - pub struct ZeroedTestSeed; - - impl Keeper for ZeroedTestSeed { - type Seed = Seed; - - #[allow(clippy::needless_borrow)] - fn get_seed() -> &'static Self::Seed { - &ZEROED_TEST_SEED - } - } - - #[test] - fn the_default_seed_and_the_zeroed_seed_should_be_the_same_when_testing() { - assert_eq!(Current::get_seed(), ZeroedTestSeed::get_seed()); - } - - #[test] - fn the_default_seed_and_the_instance_seed_should_be_different_when_testing() { - assert_ne!(Current::get_seed(), Instance::get_seed()); - } - } - - mod detail { - use crate::ephemeral_instance_keys::Seed; - - #[allow(dead_code)] - pub const ZEROED_TEST_SEED: &Seed = &[0u8; 32]; - - #[cfg(test)] - pub use ZEROED_TEST_SEED as CURRENT_SEED; - - #[cfg(not(test))] - pub use crate::ephemeral_instance_keys::RANDOM_SEED as CURRENT_SEED; - - #[cfg(test)] - mod tests { - use std::convert::TryInto; - - use crate::ephemeral_instance_keys::RANDOM_SEED; - use crate::protocol::crypto::keys::seeds::detail::ZEROED_TEST_SEED; - use crate::protocol::crypto::keys::seeds::CURRENT_SEED; - - #[test] - fn it_should_have_a_zero_test_seed() { - assert_eq!(*ZEROED_TEST_SEED, [0u8; 32]); - } - - #[test] - fn it_should_default_to_zeroed_seed_when_testing() { - assert_eq!(*CURRENT_SEED, *ZEROED_TEST_SEED); - } - - #[test] - fn it_should_have_a_large_random_seed() { - assert!(u128::from_ne_bytes((*RANDOM_SEED)[..16].try_into().unwrap()) > u128::from(u64::MAX)); - assert!(u128::from_ne_bytes((*RANDOM_SEED)[16..].try_into().unwrap()) > u128::from(u64::MAX)); - } - } - } - } -} diff --git a/src/protocol/mod.rs b/src/protocol/mod.rs deleted file mode 100644 index bd4310dcf..000000000 --- a/src/protocol/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -pub mod clock; -pub mod common; -pub mod crypto; -pub mod info_hash; -pub mod utils; diff --git a/src/apis/mod.rs b/src/servers/apis/mod.rs similarity index 100% rename from src/apis/mod.rs rename to src/servers/apis/mod.rs diff --git a/src/apis/routes.rs b/src/servers/apis/routes.rs similarity index 100% rename from src/apis/routes.rs rename to src/servers/apis/routes.rs diff --git a/src/apis/server.rs b/src/servers/apis/server.rs similarity index 98% rename from src/apis/server.rs rename to src/servers/apis/server.rs index daac35999..e4714cd9a 100644 --- a/src/apis/server.rs +++ b/src/servers/apis/server.rs @@ -9,7 +9,7 @@ use futures::Future; use log::info; use super::routes::router; -use crate::signals::shutdown_signal; +use crate::servers::signals::shutdown_signal; use crate::tracker::Tracker; #[derive(Debug)] @@ -219,7 +219,7 @@ mod tests { use torrust_tracker_configuration::Configuration; use torrust_tracker_test_helpers::configuration; - use crate::apis::server::ApiServer; + use crate::servers::apis::server::ApiServer; use crate::tracker; use crate::tracker::statistics; diff --git a/src/apis/v1/context/auth_key/handlers.rs b/src/servers/apis/v1/context/auth_key/handlers.rs similarity index 90% rename from src/apis/v1/context/auth_key/handlers.rs rename to src/servers/apis/v1/context/auth_key/handlers.rs index cb1cd1113..d2e633206 100644 --- a/src/apis/v1/context/auth_key/handlers.rs +++ b/src/servers/apis/v1/context/auth_key/handlers.rs @@ -9,8 +9,8 @@ use serde::Deserialize; use super::responses::{ auth_key_response, failed_to_delete_key_response, failed_to_generate_key_response, failed_to_reload_keys_response, }; -use crate::apis::v1::context::auth_key::resources::AuthKey; -use crate::apis::v1::responses::{invalid_auth_key_param_response, ok_response}; +use crate::servers::apis::v1::context::auth_key::resources::AuthKey; +use crate::servers::apis::v1::responses::{invalid_auth_key_param_response, ok_response}; use crate::tracker::auth::Key; use crate::tracker::Tracker; diff --git a/src/apis/v1/context/auth_key/mod.rs b/src/servers/apis/v1/context/auth_key/mod.rs similarity index 100% rename from src/apis/v1/context/auth_key/mod.rs rename to src/servers/apis/v1/context/auth_key/mod.rs diff --git a/src/apis/v1/context/auth_key/resources.rs b/src/servers/apis/v1/context/auth_key/resources.rs similarity index 96% rename from src/apis/v1/context/auth_key/resources.rs rename to src/servers/apis/v1/context/auth_key/resources.rs index cf43a6f3d..400b34eb7 100644 --- a/src/apis/v1/context/auth_key/resources.rs +++ b/src/servers/apis/v1/context/auth_key/resources.rs @@ -2,7 +2,7 @@ use std::convert::From; use serde::{Deserialize, Serialize}; -use crate::protocol::clock::convert_from_iso_8601_to_timestamp; +use crate::shared::clock::convert_from_iso_8601_to_timestamp; use crate::tracker::auth::{self, Key}; #[derive(Serialize, Deserialize, Debug, PartialEq, Eq)] @@ -36,7 +36,7 @@ mod tests { use std::time::Duration; use super::AuthKey; - use crate::protocol::clock::{Current, TimeNow}; + use crate::shared::clock::{Current, TimeNow}; use crate::tracker::auth::{self, Key}; struct TestTime { diff --git a/src/apis/v1/context/auth_key/responses.rs b/src/servers/apis/v1/context/auth_key/responses.rs similarity index 86% rename from src/apis/v1/context/auth_key/responses.rs rename to src/servers/apis/v1/context/auth_key/responses.rs index 9b8fcebe2..4e3b0c711 100644 --- a/src/apis/v1/context/auth_key/responses.rs +++ b/src/servers/apis/v1/context/auth_key/responses.rs @@ -3,8 +3,8 @@ use std::error::Error; use axum::http::{header, StatusCode}; use axum::response::{IntoResponse, Response}; -use crate::apis::v1::context::auth_key::resources::AuthKey; -use crate::apis::v1::responses::unhandled_rejection_response; +use crate::servers::apis::v1::context::auth_key::resources::AuthKey; +use crate::servers::apis::v1::responses::unhandled_rejection_response; /// # Panics /// diff --git a/src/apis/v1/context/auth_key/routes.rs b/src/servers/apis/v1/context/auth_key/routes.rs similarity index 100% rename from src/apis/v1/context/auth_key/routes.rs rename to src/servers/apis/v1/context/auth_key/routes.rs diff --git a/src/apis/v1/context/mod.rs b/src/servers/apis/v1/context/mod.rs similarity index 100% rename from src/apis/v1/context/mod.rs rename to src/servers/apis/v1/context/mod.rs diff --git a/src/apis/v1/context/stats/handlers.rs b/src/servers/apis/v1/context/stats/handlers.rs similarity index 100% rename from src/apis/v1/context/stats/handlers.rs rename to src/servers/apis/v1/context/stats/handlers.rs diff --git a/src/apis/v1/context/stats/mod.rs b/src/servers/apis/v1/context/stats/mod.rs similarity index 100% rename from src/apis/v1/context/stats/mod.rs rename to src/servers/apis/v1/context/stats/mod.rs diff --git a/src/apis/v1/context/stats/resources.rs b/src/servers/apis/v1/context/stats/resources.rs similarity index 100% rename from src/apis/v1/context/stats/resources.rs rename to src/servers/apis/v1/context/stats/resources.rs diff --git a/src/apis/v1/context/stats/responses.rs b/src/servers/apis/v1/context/stats/responses.rs similarity index 100% rename from src/apis/v1/context/stats/responses.rs rename to src/servers/apis/v1/context/stats/responses.rs diff --git a/src/apis/v1/context/stats/routes.rs b/src/servers/apis/v1/context/stats/routes.rs similarity index 100% rename from src/apis/v1/context/stats/routes.rs rename to src/servers/apis/v1/context/stats/routes.rs diff --git a/src/apis/v1/context/torrent/handlers.rs b/src/servers/apis/v1/context/torrent/handlers.rs similarity index 91% rename from src/apis/v1/context/torrent/handlers.rs rename to src/servers/apis/v1/context/torrent/handlers.rs index fc816cdbf..4032f2e9a 100644 --- a/src/apis/v1/context/torrent/handlers.rs +++ b/src/servers/apis/v1/context/torrent/handlers.rs @@ -8,9 +8,9 @@ use serde::{de, Deserialize, Deserializer}; use super::resources::torrent::ListItem; use super::responses::{torrent_info_response, torrent_list_response, torrent_not_known_response}; -use crate::apis::v1::responses::invalid_info_hash_param_response; -use crate::apis::InfoHashParam; -use crate::protocol::info_hash::InfoHash; +use crate::servers::apis::v1::responses::invalid_info_hash_param_response; +use crate::servers::apis::InfoHashParam; +use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::services::torrent::{get_torrent_info, get_torrents, Pagination}; use crate::tracker::Tracker; diff --git a/src/apis/v1/context/torrent/mod.rs b/src/servers/apis/v1/context/torrent/mod.rs similarity index 100% rename from src/apis/v1/context/torrent/mod.rs rename to src/servers/apis/v1/context/torrent/mod.rs diff --git a/src/apis/v1/context/torrent/resources/mod.rs b/src/servers/apis/v1/context/torrent/resources/mod.rs similarity index 100% rename from src/apis/v1/context/torrent/resources/mod.rs rename to src/servers/apis/v1/context/torrent/resources/mod.rs diff --git a/src/apis/v1/context/torrent/resources/peer.rs b/src/servers/apis/v1/context/torrent/resources/peer.rs similarity index 100% rename from src/apis/v1/context/torrent/resources/peer.rs rename to src/servers/apis/v1/context/torrent/resources/peer.rs diff --git a/src/apis/v1/context/torrent/resources/torrent.rs b/src/servers/apis/v1/context/torrent/resources/torrent.rs similarity index 93% rename from src/apis/v1/context/torrent/resources/torrent.rs rename to src/servers/apis/v1/context/torrent/resources/torrent.rs index 48f4c58f0..e328f80c4 100644 --- a/src/apis/v1/context/torrent/resources/torrent.rs +++ b/src/servers/apis/v1/context/torrent/resources/torrent.rs @@ -75,10 +75,10 @@ mod tests { use aquatic_udp_protocol::{AnnounceEvent, NumberOfBytes}; use super::Torrent; - use crate::apis::v1::context::torrent::resources::peer::Peer; - use crate::apis::v1::context::torrent::resources::torrent::ListItem; - use crate::protocol::clock::DurationSinceUnixEpoch; - use crate::protocol::info_hash::InfoHash; + use crate::servers::apis::v1::context::torrent::resources::peer::Peer; + use crate::servers::apis::v1::context::torrent::resources::torrent::ListItem; + use crate::shared::bit_torrent::info_hash::InfoHash; + use crate::shared::clock::DurationSinceUnixEpoch; use crate::tracker::peer; use crate::tracker::services::torrent::{BasicInfo, Info}; diff --git a/src/apis/v1/context/torrent/responses.rs b/src/servers/apis/v1/context/torrent/responses.rs similarity index 100% rename from src/apis/v1/context/torrent/responses.rs rename to src/servers/apis/v1/context/torrent/responses.rs diff --git a/src/apis/v1/context/torrent/routes.rs b/src/servers/apis/v1/context/torrent/routes.rs similarity index 100% rename from src/apis/v1/context/torrent/routes.rs rename to src/servers/apis/v1/context/torrent/routes.rs diff --git a/src/apis/v1/context/whitelist/handlers.rs b/src/servers/apis/v1/context/whitelist/handlers.rs similarity index 88% rename from src/apis/v1/context/whitelist/handlers.rs rename to src/servers/apis/v1/context/whitelist/handlers.rs index 325f20e26..25e285c0b 100644 --- a/src/apis/v1/context/whitelist/handlers.rs +++ b/src/servers/apis/v1/context/whitelist/handlers.rs @@ -7,9 +7,9 @@ use axum::response::Response; use super::responses::{ failed_to_reload_whitelist_response, failed_to_remove_torrent_from_whitelist_response, failed_to_whitelist_torrent_response, }; -use crate::apis::v1::responses::{invalid_info_hash_param_response, ok_response}; -use crate::apis::InfoHashParam; -use crate::protocol::info_hash::InfoHash; +use crate::servers::apis::v1::responses::{invalid_info_hash_param_response, ok_response}; +use crate::servers::apis::InfoHashParam; +use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::Tracker; pub async fn add_torrent_to_whitelist_handler( diff --git a/src/apis/v1/context/whitelist/mod.rs b/src/servers/apis/v1/context/whitelist/mod.rs similarity index 100% rename from src/apis/v1/context/whitelist/mod.rs rename to src/servers/apis/v1/context/whitelist/mod.rs diff --git a/src/apis/v1/context/whitelist/responses.rs b/src/servers/apis/v1/context/whitelist/responses.rs similarity index 89% rename from src/apis/v1/context/whitelist/responses.rs rename to src/servers/apis/v1/context/whitelist/responses.rs index 197d4c90b..06d4a9448 100644 --- a/src/apis/v1/context/whitelist/responses.rs +++ b/src/servers/apis/v1/context/whitelist/responses.rs @@ -2,7 +2,7 @@ use std::error::Error; use axum::response::Response; -use crate::apis::v1::responses::unhandled_rejection_response; +use crate::servers::apis::v1::responses::unhandled_rejection_response; #[must_use] pub fn failed_to_remove_torrent_from_whitelist_response(e: E) -> Response { diff --git a/src/apis/v1/context/whitelist/routes.rs b/src/servers/apis/v1/context/whitelist/routes.rs similarity index 100% rename from src/apis/v1/context/whitelist/routes.rs rename to src/servers/apis/v1/context/whitelist/routes.rs diff --git a/src/apis/v1/middlewares/auth.rs b/src/servers/apis/v1/middlewares/auth.rs similarity index 95% rename from src/apis/v1/middlewares/auth.rs rename to src/servers/apis/v1/middlewares/auth.rs index e729072b6..f0c63250b 100644 --- a/src/apis/v1/middlewares/auth.rs +++ b/src/servers/apis/v1/middlewares/auth.rs @@ -7,7 +7,7 @@ use axum::response::{IntoResponse, Response}; use serde::Deserialize; use torrust_tracker_configuration::{Configuration, HttpApi}; -use crate::apis::v1::responses::unhandled_rejection_response; +use crate::servers::apis::v1::responses::unhandled_rejection_response; #[derive(Deserialize, Debug)] pub struct QueryParams { diff --git a/src/apis/v1/middlewares/mod.rs b/src/servers/apis/v1/middlewares/mod.rs similarity index 100% rename from src/apis/v1/middlewares/mod.rs rename to src/servers/apis/v1/middlewares/mod.rs diff --git a/src/apis/v1/mod.rs b/src/servers/apis/v1/mod.rs similarity index 100% rename from src/apis/v1/mod.rs rename to src/servers/apis/v1/mod.rs diff --git a/src/apis/v1/responses.rs b/src/servers/apis/v1/responses.rs similarity index 100% rename from src/apis/v1/responses.rs rename to src/servers/apis/v1/responses.rs diff --git a/src/apis/v1/routes.rs b/src/servers/apis/v1/routes.rs similarity index 100% rename from src/apis/v1/routes.rs rename to src/servers/apis/v1/routes.rs diff --git a/src/http/mod.rs b/src/servers/http/mod.rs similarity index 100% rename from src/http/mod.rs rename to src/servers/http/mod.rs diff --git a/src/http/percent_encoding.rs b/src/servers/http/percent_encoding.rs similarity index 89% rename from src/http/percent_encoding.rs rename to src/servers/http/percent_encoding.rs index 3774519fb..019735e0f 100644 --- a/src/http/percent_encoding.rs +++ b/src/servers/http/percent_encoding.rs @@ -1,4 +1,4 @@ -use crate::protocol::info_hash::{ConversionError, InfoHash}; +use crate::shared::bit_torrent::info_hash::{ConversionError, InfoHash}; use crate::tracker::peer::{self, IdConversionError}; /// # Errors @@ -21,8 +21,8 @@ pub fn percent_decode_peer_id(raw_peer_id: &str) -> Result responses::error::Error { mod tests { use super::parse_key; - use crate::http::v1::responses::error::Error; + use crate::servers::http::v1::responses::error::Error; fn assert_error_response(error: &Error, error_message: &str) { assert!( diff --git a/src/http/v1/extractors/client_ip_sources.rs b/src/servers/http/v1/extractors/client_ip_sources.rs similarity index 93% rename from src/http/v1/extractors/client_ip_sources.rs rename to src/servers/http/v1/extractors/client_ip_sources.rs index c8b3659f3..b291eba12 100644 --- a/src/http/v1/extractors/client_ip_sources.rs +++ b/src/servers/http/v1/extractors/client_ip_sources.rs @@ -8,7 +8,7 @@ use axum::http::request::Parts; use axum::response::Response; use axum_client_ip::RightmostXForwardedFor; -use crate::http::v1::services::peer_ip_resolver::ClientIpSources; +use crate::servers::http::v1::services::peer_ip_resolver::ClientIpSources; pub struct Extract(pub ClientIpSources); diff --git a/src/http/v1/extractors/mod.rs b/src/servers/http/v1/extractors/mod.rs similarity index 100% rename from src/http/v1/extractors/mod.rs rename to src/servers/http/v1/extractors/mod.rs diff --git a/src/http/v1/extractors/scrape_request.rs b/src/servers/http/v1/extractors/scrape_request.rs similarity index 91% rename from src/http/v1/extractors/scrape_request.rs rename to src/servers/http/v1/extractors/scrape_request.rs index d63470897..ee2502066 100644 --- a/src/http/v1/extractors/scrape_request.rs +++ b/src/servers/http/v1/extractors/scrape_request.rs @@ -5,9 +5,9 @@ use axum::extract::FromRequestParts; use axum::http::request::Parts; use axum::response::{IntoResponse, Response}; -use crate::http::v1::query::Query; -use crate::http::v1::requests::scrape::{ParseScrapeQueryError, Scrape}; -use crate::http::v1::responses; +use crate::servers::http::v1::query::Query; +use crate::servers::http::v1::requests::scrape::{ParseScrapeQueryError, Scrape}; +use crate::servers::http::v1::responses; pub struct ExtractRequest(pub Scrape); @@ -53,9 +53,9 @@ mod tests { use std::str::FromStr; use super::extract_scrape_from; - use crate::http::v1::requests::scrape::Scrape; - use crate::http::v1::responses::error::Error; - use crate::protocol::info_hash::InfoHash; + use crate::servers::http::v1::requests::scrape::Scrape; + use crate::servers::http::v1::responses::error::Error; + use crate::shared::bit_torrent::info_hash::InfoHash; struct TestInfoHash { pub bencoded: String, diff --git a/src/http/v1/handlers/announce.rs b/src/servers/http/v1/handlers/announce.rs similarity index 85% rename from src/http/v1/handlers/announce.rs rename to src/servers/http/v1/handlers/announce.rs index 1f10c3fa4..db41388ab 100644 --- a/src/http/v1/handlers/announce.rs +++ b/src/servers/http/v1/handlers/announce.rs @@ -7,15 +7,15 @@ use axum::extract::State; use axum::response::{IntoResponse, Response}; use log::debug; -use crate::http::v1::extractors::announce_request::ExtractRequest; -use crate::http::v1::extractors::authentication_key::Extract as ExtractKey; -use crate::http::v1::extractors::client_ip_sources::Extract as ExtractClientIpSources; -use crate::http::v1::handlers::common::auth; -use crate::http::v1::requests::announce::{Announce, Compact, Event}; -use crate::http::v1::responses::{self, announce}; -use crate::http::v1::services::peer_ip_resolver::ClientIpSources; -use crate::http::v1::services::{self, peer_ip_resolver}; -use crate::protocol::clock::{Current, Time}; +use crate::servers::http::v1::extractors::announce_request::ExtractRequest; +use crate::servers::http::v1::extractors::authentication_key::Extract as ExtractKey; +use crate::servers::http::v1::extractors::client_ip_sources::Extract as ExtractClientIpSources; +use crate::servers::http::v1::handlers::common::auth; +use crate::servers::http::v1::requests::announce::{Announce, Compact, Event}; +use crate::servers::http::v1::responses::{self, announce}; +use crate::servers::http::v1::services::peer_ip_resolver::ClientIpSources; +use crate::servers::http::v1::services::{self, peer_ip_resolver}; +use crate::shared::clock::{Current, Time}; use crate::tracker::auth::Key; use crate::tracker::peer::Peer; use crate::tracker::{AnnounceData, Tracker}; @@ -141,11 +141,11 @@ mod tests { use torrust_tracker_test_helpers::configuration; - use crate::http::v1::requests::announce::Announce; - use crate::http::v1::responses; - use crate::http::v1::services::peer_ip_resolver::ClientIpSources; - use crate::protocol::info_hash::InfoHash; - use crate::tracker::services::common::tracker_factory; + use crate::servers::http::v1::requests::announce::Announce; + use crate::servers::http::v1::responses; + use crate::servers::http::v1::services::peer_ip_resolver::ClientIpSources; + use crate::shared::bit_torrent::info_hash::InfoHash; + use crate::tracker::services::tracker_factory; use crate::tracker::{peer, Tracker}; fn private_tracker() -> Tracker { @@ -197,8 +197,8 @@ mod tests { use std::sync::Arc; use super::{private_tracker, sample_announce_request, sample_client_ip_sources}; - use crate::http::v1::handlers::announce::handle_announce; - use crate::http::v1::handlers::announce::tests::assert_error_response; + use crate::servers::http::v1::handlers::announce::handle_announce; + use crate::servers::http::v1::handlers::announce::tests::assert_error_response; use crate::tracker::auth; #[tokio::test] @@ -238,8 +238,8 @@ mod tests { use std::sync::Arc; use super::{sample_announce_request, sample_client_ip_sources, whitelisted_tracker}; - use crate::http::v1::handlers::announce::handle_announce; - use crate::http::v1::handlers::announce::tests::assert_error_response; + use crate::servers::http::v1::handlers::announce::handle_announce; + use crate::servers::http::v1::handlers::announce::tests::assert_error_response; #[tokio::test] async fn it_should_fail_when_the_announced_torrent_is_not_whitelisted() { @@ -266,9 +266,9 @@ mod tests { use std::sync::Arc; use super::{sample_announce_request, tracker_on_reverse_proxy}; - use crate::http::v1::handlers::announce::handle_announce; - use crate::http::v1::handlers::announce::tests::assert_error_response; - use crate::http::v1::services::peer_ip_resolver::ClientIpSources; + use crate::servers::http::v1::handlers::announce::handle_announce; + use crate::servers::http::v1::handlers::announce::tests::assert_error_response; + use crate::servers::http::v1::services::peer_ip_resolver::ClientIpSources; #[tokio::test] async fn it_should_fail_when_the_right_most_x_forwarded_for_header_ip_is_not_available() { @@ -295,9 +295,9 @@ mod tests { use std::sync::Arc; use super::{sample_announce_request, tracker_not_on_reverse_proxy}; - use crate::http::v1::handlers::announce::handle_announce; - use crate::http::v1::handlers::announce::tests::assert_error_response; - use crate::http::v1::services::peer_ip_resolver::ClientIpSources; + use crate::servers::http::v1::handlers::announce::handle_announce; + use crate::servers::http::v1::handlers::announce::tests::assert_error_response; + use crate::servers::http::v1::services::peer_ip_resolver::ClientIpSources; #[tokio::test] async fn it_should_fail_when_the_client_ip_from_the_connection_info_is_not_available() { diff --git a/src/http/v1/handlers/common/auth.rs b/src/servers/http/v1/handlers/common/auth.rs similarity index 96% rename from src/http/v1/handlers/common/auth.rs rename to src/servers/http/v1/handlers/common/auth.rs index 938fc3f01..644556e95 100644 --- a/src/http/v1/handlers/common/auth.rs +++ b/src/servers/http/v1/handlers/common/auth.rs @@ -2,7 +2,7 @@ use std::panic::Location; use thiserror::Error; -use crate::http::v1::responses; +use crate::servers::http::v1::responses; use crate::tracker::auth; #[derive(Debug, Error)] diff --git a/src/http/v1/handlers/common/mod.rs b/src/servers/http/v1/handlers/common/mod.rs similarity index 100% rename from src/http/v1/handlers/common/mod.rs rename to src/servers/http/v1/handlers/common/mod.rs diff --git a/src/http/v1/handlers/common/peer_ip.rs b/src/servers/http/v1/handlers/common/peer_ip.rs similarity index 77% rename from src/http/v1/handlers/common/peer_ip.rs rename to src/servers/http/v1/handlers/common/peer_ip.rs index e182c716b..685324b4a 100644 --- a/src/http/v1/handlers/common/peer_ip.rs +++ b/src/servers/http/v1/handlers/common/peer_ip.rs @@ -1,5 +1,5 @@ -use crate::http::v1::responses; -use crate::http::v1::services::peer_ip_resolver::PeerIpResolutionError; +use crate::servers::http::v1::responses; +use crate::servers::http::v1::services::peer_ip_resolver::PeerIpResolutionError; impl From for responses::error::Error { fn from(err: PeerIpResolutionError) -> Self { @@ -13,8 +13,8 @@ impl From for responses::error::Error { mod tests { use std::panic::Location; - use crate::http::v1::responses; - use crate::http::v1::services::peer_ip_resolver::PeerIpResolutionError; + use crate::servers::http::v1::responses; + use crate::servers::http::v1::services::peer_ip_resolver::PeerIpResolutionError; fn assert_error_response(error: &responses::error::Error, error_message: &str) { assert!( diff --git a/src/http/v1/handlers/mod.rs b/src/servers/http/v1/handlers/mod.rs similarity index 100% rename from src/http/v1/handlers/mod.rs rename to src/servers/http/v1/handlers/mod.rs diff --git a/src/http/v1/handlers/scrape.rs b/src/servers/http/v1/handlers/scrape.rs similarity index 85% rename from src/http/v1/handlers/scrape.rs rename to src/servers/http/v1/handlers/scrape.rs index 50f92cd36..f55194810 100644 --- a/src/http/v1/handlers/scrape.rs +++ b/src/servers/http/v1/handlers/scrape.rs @@ -4,12 +4,12 @@ use axum::extract::State; use axum::response::{IntoResponse, Response}; use log::debug; -use crate::http::v1::extractors::authentication_key::Extract as ExtractKey; -use crate::http::v1::extractors::client_ip_sources::Extract as ExtractClientIpSources; -use crate::http::v1::extractors::scrape_request::ExtractRequest; -use crate::http::v1::requests::scrape::Scrape; -use crate::http::v1::services::peer_ip_resolver::{self, ClientIpSources}; -use crate::http::v1::{responses, services}; +use crate::servers::http::v1::extractors::authentication_key::Extract as ExtractKey; +use crate::servers::http::v1::extractors::client_ip_sources::Extract as ExtractClientIpSources; +use crate::servers::http::v1::extractors::scrape_request::ExtractRequest; +use crate::servers::http::v1::requests::scrape::Scrape; +use crate::servers::http::v1::services::peer_ip_resolver::{self, ClientIpSources}; +use crate::servers::http::v1::{responses, services}; use crate::tracker::auth::Key; use crate::tracker::{ScrapeData, Tracker}; @@ -99,11 +99,11 @@ mod tests { use torrust_tracker_test_helpers::configuration; - use crate::http::v1::requests::scrape::Scrape; - use crate::http::v1::responses; - use crate::http::v1::services::peer_ip_resolver::ClientIpSources; - use crate::protocol::info_hash::InfoHash; - use crate::tracker::services::common::tracker_factory; + use crate::servers::http::v1::requests::scrape::Scrape; + use crate::servers::http::v1::responses; + use crate::servers::http::v1::services::peer_ip_resolver::ClientIpSources; + use crate::shared::bit_torrent::info_hash::InfoHash; + use crate::tracker::services::tracker_factory; use crate::tracker::Tracker; fn private_tracker() -> Tracker { @@ -147,7 +147,7 @@ mod tests { use std::sync::Arc; use super::{private_tracker, sample_client_ip_sources, sample_scrape_request}; - use crate::http::v1::handlers::scrape::handle_scrape; + use crate::servers::http::v1::handlers::scrape::handle_scrape; use crate::tracker::{auth, ScrapeData}; #[tokio::test] @@ -189,7 +189,7 @@ mod tests { use std::sync::Arc; use super::{sample_client_ip_sources, sample_scrape_request, whitelisted_tracker}; - use crate::http::v1::handlers::scrape::handle_scrape; + use crate::servers::http::v1::handlers::scrape::handle_scrape; use crate::tracker::ScrapeData; #[tokio::test] @@ -212,9 +212,9 @@ mod tests { use std::sync::Arc; use super::{sample_scrape_request, tracker_on_reverse_proxy}; - use crate::http::v1::handlers::scrape::handle_scrape; - use crate::http::v1::handlers::scrape::tests::assert_error_response; - use crate::http::v1::services::peer_ip_resolver::ClientIpSources; + use crate::servers::http::v1::handlers::scrape::handle_scrape; + use crate::servers::http::v1::handlers::scrape::tests::assert_error_response; + use crate::servers::http::v1::services::peer_ip_resolver::ClientIpSources; #[tokio::test] async fn it_should_fail_when_the_right_most_x_forwarded_for_header_ip_is_not_available() { @@ -240,9 +240,9 @@ mod tests { use std::sync::Arc; use super::{sample_scrape_request, tracker_not_on_reverse_proxy}; - use crate::http::v1::handlers::scrape::handle_scrape; - use crate::http::v1::handlers::scrape::tests::assert_error_response; - use crate::http::v1::services::peer_ip_resolver::ClientIpSources; + use crate::servers::http::v1::handlers::scrape::handle_scrape; + use crate::servers::http::v1::handlers::scrape::tests::assert_error_response; + use crate::servers::http::v1::services::peer_ip_resolver::ClientIpSources; #[tokio::test] async fn it_should_fail_when_the_client_ip_from_the_connection_info_is_not_available() { diff --git a/src/http/v1/launcher.rs b/src/servers/http/v1/launcher.rs similarity index 98% rename from src/http/v1/launcher.rs rename to src/servers/http/v1/launcher.rs index 45bc54664..4cfa4295d 100644 --- a/src/http/v1/launcher.rs +++ b/src/servers/http/v1/launcher.rs @@ -10,7 +10,7 @@ use futures::future::BoxFuture; use log::info; use super::routes::router; -use crate::http::server::HttpServerLauncher; +use crate::servers::http::server::HttpServerLauncher; use crate::tracker::Tracker; #[derive(Debug)] diff --git a/src/http/v1/mod.rs b/src/servers/http/v1/mod.rs similarity index 100% rename from src/http/v1/mod.rs rename to src/servers/http/v1/mod.rs diff --git a/src/http/v1/query.rs b/src/servers/http/v1/query.rs similarity index 97% rename from src/http/v1/query.rs rename to src/servers/http/v1/query.rs index 45484ea38..c40e7949f 100644 --- a/src/http/v1/query.rs +++ b/src/servers/http/v1/query.rs @@ -174,7 +174,7 @@ impl std::fmt::Display for FieldValuePairSet { mod tests { mod url_query { - use crate::http::v1::query::Query; + use crate::servers::http::v1::query::Query; #[test] fn should_parse_the_query_params_from_an_url_query_string() { @@ -227,7 +227,7 @@ mod tests { } mod should_allow_more_than_one_value_for_the_same_param { - use crate::http::v1::query::Query; + use crate::servers::http::v1::query::Query; #[test] fn instantiated_from_a_vector() { @@ -249,7 +249,7 @@ mod tests { } mod should_be_displayed { - use crate::http::v1::query::Query; + use crate::servers::http::v1::query::Query; #[test] fn with_one_param() { @@ -270,7 +270,7 @@ mod tests { } mod param_name_value_pair { - use crate::http::v1::query::NameValuePair; + use crate::servers::http::v1::query::NameValuePair; #[test] fn should_parse_a_single_query_param() { diff --git a/src/http/v1/requests/announce.rs b/src/servers/http/v1/requests/announce.rs similarity index 96% rename from src/http/v1/requests/announce.rs rename to src/servers/http/v1/requests/announce.rs index eeab97d5f..7ab260d99 100644 --- a/src/http/v1/requests/announce.rs +++ b/src/servers/http/v1/requests/announce.rs @@ -5,10 +5,10 @@ use std::str::FromStr; use thiserror::Error; use torrust_tracker_located_error::{Located, LocatedError}; -use crate::http::percent_encoding::{percent_decode_info_hash, percent_decode_peer_id}; -use crate::http::v1::query::{ParseQueryError, Query}; -use crate::http::v1::responses; -use crate::protocol::info_hash::{ConversionError, InfoHash}; +use crate::servers::http::percent_encoding::{percent_decode_info_hash, percent_decode_peer_id}; +use crate::servers::http::v1::query::{ParseQueryError, Query}; +use crate::servers::http::v1::responses; +use crate::shared::bit_torrent::info_hash::{ConversionError, InfoHash}; use crate::tracker::peer::{self, IdConversionError}; pub type NumberOfBytes = i64; @@ -280,11 +280,11 @@ mod tests { mod announce_request { - use crate::http::v1::query::Query; - use crate::http::v1::requests::announce::{ + use crate::servers::http::v1::query::Query; + use crate::servers::http::v1::requests::announce::{ Announce, Compact, Event, COMPACT, DOWNLOADED, EVENT, INFO_HASH, LEFT, PEER_ID, PORT, UPLOADED, }; - use crate::protocol::info_hash::InfoHash; + use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::peer; #[test] @@ -350,8 +350,8 @@ mod tests { mod when_it_is_instantiated_from_the_url_query_params { - use crate::http::v1::query::Query; - use crate::http::v1::requests::announce::{ + use crate::servers::http::v1::query::Query; + use crate::servers::http::v1::requests::announce::{ Announce, COMPACT, DOWNLOADED, EVENT, INFO_HASH, LEFT, PEER_ID, PORT, UPLOADED, }; diff --git a/src/http/v1/requests/mod.rs b/src/servers/http/v1/requests/mod.rs similarity index 100% rename from src/http/v1/requests/mod.rs rename to src/servers/http/v1/requests/mod.rs diff --git a/src/http/v1/requests/scrape.rs b/src/servers/http/v1/requests/scrape.rs similarity index 86% rename from src/http/v1/requests/scrape.rs rename to src/servers/http/v1/requests/scrape.rs index 6257f0733..a7ec962e2 100644 --- a/src/http/v1/requests/scrape.rs +++ b/src/servers/http/v1/requests/scrape.rs @@ -3,10 +3,10 @@ use std::panic::Location; use thiserror::Error; use torrust_tracker_located_error::{Located, LocatedError}; -use crate::http::percent_encoding::percent_decode_info_hash; -use crate::http::v1::query::Query; -use crate::http::v1::responses; -use crate::protocol::info_hash::{ConversionError, InfoHash}; +use crate::servers::http::percent_encoding::percent_decode_info_hash; +use crate::servers::http::v1::query::Query; +use crate::servers::http::v1::responses; +use crate::shared::bit_torrent::info_hash::{ConversionError, InfoHash}; pub type NumberOfBytes = i64; @@ -85,9 +85,9 @@ mod tests { mod scrape_request { - use crate::http::v1::query::Query; - use crate::http::v1::requests::scrape::{Scrape, INFO_HASH}; - use crate::protocol::info_hash::InfoHash; + use crate::servers::http::v1::query::Query; + use crate::servers::http::v1::requests::scrape::{Scrape, INFO_HASH}; + use crate::shared::bit_torrent::info_hash::InfoHash; #[test] fn should_be_instantiated_from_the_url_query_with_only_one_infohash() { @@ -107,8 +107,8 @@ mod tests { mod when_it_is_instantiated_from_the_url_query_params { - use crate::http::v1::query::Query; - use crate::http::v1::requests::scrape::{Scrape, INFO_HASH}; + use crate::servers::http::v1::query::Query; + use crate::servers::http::v1::requests::scrape::{Scrape, INFO_HASH}; #[test] fn it_should_fail_if_the_query_does_not_include_the_info_hash_param() { diff --git a/src/http/v1/responses/announce.rs b/src/servers/http/v1/responses/announce.rs similarity index 98% rename from src/http/v1/responses/announce.rs rename to src/servers/http/v1/responses/announce.rs index 8b178ff7e..4902e0d62 100644 --- a/src/http/v1/responses/announce.rs +++ b/src/servers/http/v1/responses/announce.rs @@ -8,7 +8,7 @@ use bip_bencode::{ben_bytes, ben_int, ben_list, ben_map, BMutAccess, BencodeMut} use serde::{self, Deserialize, Serialize}; use thiserror::Error; -use crate::http::v1::responses; +use crate::servers::http::v1::responses; use crate::tracker::{self, AnnounceData}; /// Normal (non compact) "announce" response @@ -250,7 +250,7 @@ mod tests { use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; use super::{NonCompact, Peer}; - use crate::http::v1::responses::announce::{Compact, CompactPeer}; + use crate::servers::http::v1::responses::announce::{Compact, CompactPeer}; // Some ascii values used in tests: // diff --git a/src/http/v1/responses/error.rs b/src/servers/http/v1/responses/error.rs similarity index 100% rename from src/http/v1/responses/error.rs rename to src/servers/http/v1/responses/error.rs diff --git a/src/http/v1/responses/mod.rs b/src/servers/http/v1/responses/mod.rs similarity index 100% rename from src/http/v1/responses/mod.rs rename to src/servers/http/v1/responses/mod.rs diff --git a/src/http/v1/responses/scrape.rs b/src/servers/http/v1/responses/scrape.rs similarity index 95% rename from src/http/v1/responses/scrape.rs rename to src/servers/http/v1/responses/scrape.rs index 5cbe6502e..36e4f3282 100644 --- a/src/http/v1/responses/scrape.rs +++ b/src/servers/http/v1/responses/scrape.rs @@ -55,8 +55,8 @@ impl IntoResponse for Bencoded { mod tests { mod scrape_response { - use crate::http::v1::responses::scrape::Bencoded; - use crate::protocol::info_hash::InfoHash; + use crate::servers::http::v1::responses::scrape::Bencoded; + use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::torrent::SwarmMetadata; use crate::tracker::ScrapeData; diff --git a/src/http/v1/routes.rs b/src/servers/http/v1/routes.rs similarity index 100% rename from src/http/v1/routes.rs rename to src/servers/http/v1/routes.rs diff --git a/src/http/v1/services/announce.rs b/src/servers/http/v1/services/announce.rs similarity index 94% rename from src/http/v1/services/announce.rs rename to src/servers/http/v1/services/announce.rs index a8b9f0d06..116dc1e95 100644 --- a/src/http/v1/services/announce.rs +++ b/src/servers/http/v1/services/announce.rs @@ -1,7 +1,7 @@ use std::net::IpAddr; use std::sync::Arc; -use crate::protocol::info_hash::InfoHash; +use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::peer::Peer; use crate::tracker::{statistics, AnnounceData, Tracker}; @@ -30,9 +30,9 @@ mod tests { use aquatic_udp_protocol::{AnnounceEvent, NumberOfBytes}; use torrust_tracker_test_helpers::configuration; - use crate::protocol::clock::DurationSinceUnixEpoch; - use crate::protocol::info_hash::InfoHash; - use crate::tracker::services::common::tracker_factory; + use crate::shared::bit_torrent::info_hash::InfoHash; + use crate::shared::clock::DurationSinceUnixEpoch; + use crate::tracker::services::tracker_factory; use crate::tracker::{peer, Tracker}; fn public_tracker() -> Tracker { @@ -77,8 +77,8 @@ mod tests { use torrust_tracker_test_helpers::configuration; use super::{sample_peer_using_ipv4, sample_peer_using_ipv6}; - use crate::http::v1::services::announce::invoke; - use crate::http::v1::services::announce::tests::{public_tracker, sample_info_hash, sample_peer}; + use crate::servers::http::v1::services::announce::invoke; + use crate::servers::http::v1::services::announce::tests::{public_tracker, sample_info_hash, sample_peer}; use crate::tracker::peer::Peer; use crate::tracker::torrent::SwarmStats; use crate::tracker::{statistics, AnnounceData, Tracker}; diff --git a/src/http/v1/services/mod.rs b/src/servers/http/v1/services/mod.rs similarity index 100% rename from src/http/v1/services/mod.rs rename to src/servers/http/v1/services/mod.rs diff --git a/src/http/v1/services/peer_ip_resolver.rs b/src/servers/http/v1/services/peer_ip_resolver.rs similarity index 95% rename from src/http/v1/services/peer_ip_resolver.rs rename to src/servers/http/v1/services/peer_ip_resolver.rs index c7bc183b4..ac5b8c79f 100644 --- a/src/http/v1/services/peer_ip_resolver.rs +++ b/src/servers/http/v1/services/peer_ip_resolver.rs @@ -73,7 +73,7 @@ mod tests { use std::str::FromStr; use super::invoke; - use crate::http::v1::services::peer_ip_resolver::{ClientIpSources, PeerIpResolutionError}; + use crate::servers::http::v1::services::peer_ip_resolver::{ClientIpSources, PeerIpResolutionError}; #[test] fn it_should_get_the_peer_ip_from_the_connection_info() { @@ -112,7 +112,7 @@ mod tests { use std::net::IpAddr; use std::str::FromStr; - use crate::http::v1::services::peer_ip_resolver::{invoke, ClientIpSources, PeerIpResolutionError}; + use crate::servers::http::v1::services::peer_ip_resolver::{invoke, ClientIpSources, PeerIpResolutionError}; #[test] fn it_should_get_the_peer_ip_from_the_right_most_ip_in_the_x_forwarded_for_header() { diff --git a/src/http/v1/services/scrape.rs b/src/servers/http/v1/services/scrape.rs similarity index 92% rename from src/http/v1/services/scrape.rs rename to src/servers/http/v1/services/scrape.rs index b6f319375..82ecc72e0 100644 --- a/src/http/v1/services/scrape.rs +++ b/src/servers/http/v1/services/scrape.rs @@ -1,7 +1,7 @@ use std::net::IpAddr; use std::sync::Arc; -use crate::protocol::info_hash::InfoHash; +use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::{statistics, ScrapeData, Tracker}; pub async fn invoke(tracker: &Arc, info_hashes: &Vec, original_peer_ip: &IpAddr) -> ScrapeData { @@ -39,9 +39,9 @@ mod tests { use aquatic_udp_protocol::{AnnounceEvent, NumberOfBytes}; use torrust_tracker_test_helpers::configuration; - use crate::protocol::clock::DurationSinceUnixEpoch; - use crate::protocol::info_hash::InfoHash; - use crate::tracker::services::common::tracker_factory; + use crate::shared::bit_torrent::info_hash::InfoHash; + use crate::shared::clock::DurationSinceUnixEpoch; + use crate::tracker::services::tracker_factory; use crate::tracker::{peer, Tracker}; fn public_tracker() -> Tracker { @@ -77,8 +77,10 @@ mod tests { use mockall::predicate::eq; use torrust_tracker_test_helpers::configuration; - use crate::http::v1::services::scrape::invoke; - use crate::http::v1::services::scrape::tests::{public_tracker, sample_info_hash, sample_info_hashes, sample_peer}; + use crate::servers::http::v1::services::scrape::invoke; + use crate::servers::http::v1::services::scrape::tests::{ + public_tracker, sample_info_hash, sample_info_hashes, sample_peer, + }; use crate::tracker::torrent::SwarmMetadata; use crate::tracker::{statistics, ScrapeData, Tracker}; @@ -167,8 +169,10 @@ mod tests { use mockall::predicate::eq; use torrust_tracker_test_helpers::configuration; - use crate::http::v1::services::scrape::fake; - use crate::http::v1::services::scrape::tests::{public_tracker, sample_info_hash, sample_info_hashes, sample_peer}; + use crate::servers::http::v1::services::scrape::fake; + use crate::servers::http::v1::services::scrape::tests::{ + public_tracker, sample_info_hash, sample_info_hashes, sample_peer, + }; use crate::tracker::{statistics, ScrapeData, Tracker}; #[tokio::test] diff --git a/src/servers/mod.rs b/src/servers/mod.rs new file mode 100644 index 000000000..a71b3f029 --- /dev/null +++ b/src/servers/mod.rs @@ -0,0 +1,4 @@ +pub mod apis; +pub mod http; +pub mod signals; +pub mod udp; diff --git a/src/signals.rs b/src/servers/signals.rs similarity index 100% rename from src/signals.rs rename to src/servers/signals.rs diff --git a/src/udp/connection_cookie.rs b/src/servers/udp/connection_cookie.rs similarity index 95% rename from src/udp/connection_cookie.rs rename to src/servers/udp/connection_cookie.rs index ef2a8b219..4a75145c1 100644 --- a/src/udp/connection_cookie.rs +++ b/src/servers/udp/connection_cookie.rs @@ -4,7 +4,7 @@ use std::panic::Location; use aquatic_udp_protocol::ConnectionId; use super::error::Error; -use crate::protocol::clock::time_extent::{Extent, TimeExtent}; +use crate::shared::clock::time_extent::{Extent, TimeExtent}; pub type Cookie = [u8; 8]; @@ -61,8 +61,8 @@ mod cookie_builder { use std::net::SocketAddr; use super::{Cookie, SinceUnixEpochTimeExtent, COOKIE_LIFETIME}; - use crate::protocol::clock::time_extent::{DefaultTimeExtentMaker, Extent, Make, TimeExtent}; - use crate::protocol::crypto::keys::seeds::{Current, Keeper}; + use crate::shared::clock::time_extent::{DefaultTimeExtentMaker, Extent, Make, TimeExtent}; + use crate::shared::crypto::keys::seeds::{Current, Keeper}; pub(super) fn get_last_time_extent() -> SinceUnixEpochTimeExtent { DefaultTimeExtentMaker::now(&COOKIE_LIFETIME.increment) @@ -90,9 +90,9 @@ mod tests { use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr}; use super::cookie_builder::{self}; - use crate::protocol::clock::time_extent::{self, Extent}; - use crate::protocol::clock::{Stopped, StoppedTime}; - use crate::udp::connection_cookie::{check, make, Cookie, COOKIE_LIFETIME}; + use crate::servers::udp::connection_cookie::{check, make, Cookie, COOKIE_LIFETIME}; + use crate::shared::clock::time_extent::{self, Extent}; + use crate::shared::clock::{Stopped, StoppedTime}; // #![feature(const_socketaddr)] // const REMOTE_ADDRESS_IPV4_ZERO: SocketAddr = SocketAddr::new(IpAddr::V4(Ipv4Addr::UNSPECIFIED), 0); diff --git a/src/udp/error.rs b/src/servers/udp/error.rs similarity index 100% rename from src/udp/error.rs rename to src/servers/udp/error.rs diff --git a/src/udp/handlers.rs b/src/servers/udp/handlers.rs similarity index 93% rename from src/udp/handlers.rs rename to src/servers/udp/handlers.rs index 41b1184dc..e00203cfc 100644 --- a/src/udp/handlers.rs +++ b/src/servers/udp/handlers.rs @@ -9,12 +9,12 @@ use aquatic_udp_protocol::{ use log::debug; use super::connection_cookie::{check, from_connection_id, into_connection_id, make}; -use crate::protocol::common::MAX_SCRAPE_TORRENTS; -use crate::protocol::info_hash::InfoHash; +use crate::servers::udp::error::Error; +use crate::servers::udp::peer_builder; +use crate::servers::udp::request::AnnounceWrapper; +use crate::shared::bit_torrent::common::MAX_SCRAPE_TORRENTS; +use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::{statistics, Tracker}; -use crate::udp::error::Error; -use crate::udp::peer_builder; -use crate::udp::request::AnnounceWrapper; pub async fn handle_packet(remote_addr: SocketAddr, payload: Vec, tracker: &Tracker) -> Response { match Request::from_bytes(&payload[..payload.len()], MAX_SCRAPE_TORRENTS).map_err(|e| Error::InternalServer { @@ -241,9 +241,9 @@ mod tests { use torrust_tracker_configuration::Configuration; use torrust_tracker_test_helpers::configuration; - use crate::protocol::clock::{Current, Time}; - use crate::tracker::services::common::tracker_factory; - use crate::tracker::{self, peer}; + use crate::shared::clock::{Current, Time}; + use crate::tracker::services::tracker_factory; + use crate::tracker::{peer, Tracker}; fn tracker_configuration() -> Arc { Arc::new(default_testing_tracker_configuration()) @@ -253,19 +253,19 @@ mod tests { configuration::ephemeral() } - fn public_tracker() -> Arc { + fn public_tracker() -> Arc { initialized_tracker(configuration::ephemeral_mode_public().into()) } - fn private_tracker() -> Arc { + fn private_tracker() -> Arc { initialized_tracker(configuration::ephemeral_mode_private().into()) } - fn whitelisted_tracker() -> Arc { + fn whitelisted_tracker() -> Arc { initialized_tracker(configuration::ephemeral_mode_whitelisted().into()) } - fn initialized_tracker(configuration: Arc) -> Arc { + fn initialized_tracker(configuration: Arc) -> Arc { tracker_factory(configuration).into() } @@ -354,10 +354,10 @@ mod tests { use mockall::predicate::eq; use super::{sample_ipv4_socket_address, sample_ipv6_remote_addr, tracker_configuration}; + use crate::servers::udp::connection_cookie::{into_connection_id, make}; + use crate::servers::udp::handlers::handle_connect; + use crate::servers::udp::handlers::tests::{public_tracker, sample_ipv4_remote_addr}; use crate::tracker::{self, statistics}; - use crate::udp::connection_cookie::{into_connection_id, make}; - use crate::udp::handlers::handle_connect; - use crate::udp::handlers::tests::{public_tracker, sample_ipv4_remote_addr}; fn sample_connect_request() -> ConnectRequest { ConnectRequest { @@ -451,8 +451,8 @@ mod tests { TransactionId, }; - use crate::udp::connection_cookie::{into_connection_id, make}; - use crate::udp::handlers::tests::sample_ipv4_remote_addr; + use crate::servers::udp::connection_cookie::{into_connection_id, make}; + use crate::servers::udp::handlers::tests::sample_ipv4_remote_addr; struct AnnounceRequestBuilder { request: AnnounceRequest, @@ -525,13 +525,13 @@ mod tests { }; use mockall::predicate::eq; - use crate::tracker::{self, peer, statistics}; - use crate::udp::connection_cookie::{into_connection_id, make}; - use crate::udp::handlers::handle_announce; - use crate::udp::handlers::tests::announce_request::AnnounceRequestBuilder; - use crate::udp::handlers::tests::{ + use crate::servers::udp::connection_cookie::{into_connection_id, make}; + use crate::servers::udp::handlers::handle_announce; + use crate::servers::udp::handlers::tests::announce_request::AnnounceRequestBuilder; + use crate::servers::udp::handlers::tests::{ public_tracker, sample_ipv4_socket_address, tracker_configuration, TorrentPeerBuilder, }; + use crate::tracker::{self, peer, statistics}; #[tokio::test] async fn an_announced_peer_should_be_added_to_the_tracker() { @@ -692,11 +692,11 @@ mod tests { use aquatic_udp_protocol::{InfoHash as AquaticInfoHash, PeerId as AquaticPeerId}; + use crate::servers::udp::connection_cookie::{into_connection_id, make}; + use crate::servers::udp::handlers::handle_announce; + use crate::servers::udp::handlers::tests::announce_request::AnnounceRequestBuilder; + use crate::servers::udp::handlers::tests::{public_tracker, TorrentPeerBuilder}; use crate::tracker::peer; - use crate::udp::connection_cookie::{into_connection_id, make}; - use crate::udp::handlers::handle_announce; - use crate::udp::handlers::tests::announce_request::AnnounceRequestBuilder; - use crate::udp::handlers::tests::{public_tracker, TorrentPeerBuilder}; #[tokio::test] async fn the_peer_ip_should_be_changed_to_the_external_ip_in_the_tracker_configuration_if_defined() { @@ -746,13 +746,13 @@ mod tests { }; use mockall::predicate::eq; - use crate::tracker::{self, peer, statistics}; - use crate::udp::connection_cookie::{into_connection_id, make}; - use crate::udp::handlers::handle_announce; - use crate::udp::handlers::tests::announce_request::AnnounceRequestBuilder; - use crate::udp::handlers::tests::{ + use crate::servers::udp::connection_cookie::{into_connection_id, make}; + use crate::servers::udp::handlers::handle_announce; + use crate::servers::udp::handlers::tests::announce_request::AnnounceRequestBuilder; + use crate::servers::udp::handlers::tests::{ public_tracker, sample_ipv6_remote_addr, tracker_configuration, TorrentPeerBuilder, }; + use crate::tracker::{self, peer, statistics}; #[tokio::test] async fn an_announced_peer_should_be_added_to_the_tracker() { @@ -921,12 +921,12 @@ mod tests { use aquatic_udp_protocol::{InfoHash as AquaticInfoHash, PeerId as AquaticPeerId}; + use crate::servers::udp::connection_cookie::{into_connection_id, make}; + use crate::servers::udp::handlers::handle_announce; + use crate::servers::udp::handlers::tests::announce_request::AnnounceRequestBuilder; + use crate::servers::udp::handlers::tests::TrackerConfigurationBuilder; use crate::tracker; use crate::tracker::statistics::Keeper; - use crate::udp::connection_cookie::{into_connection_id, make}; - use crate::udp::handlers::handle_announce; - use crate::udp::handlers::tests::announce_request::AnnounceRequestBuilder; - use crate::udp::handlers::tests::TrackerConfigurationBuilder; #[tokio::test] async fn the_peer_ip_should_be_changed_to_the_external_ip_in_the_tracker_configuration() { @@ -983,10 +983,10 @@ mod tests { }; use super::TorrentPeerBuilder; + use crate::servers::udp::connection_cookie::{into_connection_id, make}; + use crate::servers::udp::handlers::handle_scrape; + use crate::servers::udp::handlers::tests::{public_tracker, sample_ipv4_remote_addr}; use crate::tracker::{self, peer}; - use crate::udp::connection_cookie::{into_connection_id, make}; - use crate::udp::handlers::handle_scrape; - use crate::udp::handlers::tests::{public_tracker, sample_ipv4_remote_addr}; fn zeroed_torrent_statistics() -> TorrentScrapeStatistics { TorrentScrapeStatistics { @@ -1067,8 +1067,8 @@ mod tests { mod with_a_public_tracker { use aquatic_udp_protocol::{NumberOfDownloads, NumberOfPeers, TorrentScrapeStatistics}; - use crate::udp::handlers::tests::public_tracker; - use crate::udp::handlers::tests::scrape_request::{add_a_sample_seeder_and_scrape, match_scrape_response}; + use crate::servers::udp::handlers::tests::public_tracker; + use crate::servers::udp::handlers::tests::scrape_request::{add_a_sample_seeder_and_scrape, match_scrape_response}; #[tokio::test] async fn should_return_torrent_statistics_when_the_tracker_has_the_requested_torrent() { @@ -1090,11 +1090,11 @@ mod tests { use aquatic_udp_protocol::InfoHash; - use crate::udp::handlers::handle_scrape; - use crate::udp::handlers::tests::scrape_request::{ + use crate::servers::udp::handlers::handle_scrape; + use crate::servers::udp::handlers::tests::scrape_request::{ add_a_sample_seeder_and_scrape, build_scrape_request, match_scrape_response, zeroed_torrent_statistics, }; - use crate::udp::handlers::tests::{private_tracker, sample_ipv4_remote_addr}; + use crate::servers::udp::handlers::tests::{private_tracker, sample_ipv4_remote_addr}; #[tokio::test] async fn should_return_zeroed_statistics_when_the_tracker_does_not_have_the_requested_torrent() { @@ -1128,11 +1128,11 @@ mod tests { mod with_a_whitelisted_tracker { use aquatic_udp_protocol::{InfoHash, NumberOfDownloads, NumberOfPeers, TorrentScrapeStatistics}; - use crate::udp::handlers::handle_scrape; - use crate::udp::handlers::tests::scrape_request::{ + use crate::servers::udp::handlers::handle_scrape; + use crate::servers::udp::handlers::tests::scrape_request::{ add_a_seeder, build_scrape_request, match_scrape_response, zeroed_torrent_statistics, }; - use crate::udp::handlers::tests::{sample_ipv4_remote_addr, whitelisted_tracker}; + use crate::servers::udp::handlers::tests::{sample_ipv4_remote_addr, whitelisted_tracker}; #[tokio::test] async fn should_return_the_torrent_statistics_when_the_requested_torrent_is_whitelisted() { @@ -1195,9 +1195,9 @@ mod tests { use mockall::predicate::eq; use super::sample_scrape_request; + use crate::servers::udp::handlers::handle_scrape; + use crate::servers::udp::handlers::tests::{sample_ipv4_remote_addr, tracker_configuration}; use crate::tracker::{self, statistics}; - use crate::udp::handlers::handle_scrape; - use crate::udp::handlers::tests::{sample_ipv4_remote_addr, tracker_configuration}; #[tokio::test] async fn should_send_the_upd4_scrape_event() { @@ -1227,9 +1227,9 @@ mod tests { use mockall::predicate::eq; use super::sample_scrape_request; + use crate::servers::udp::handlers::handle_scrape; + use crate::servers::udp::handlers::tests::{sample_ipv6_remote_addr, tracker_configuration}; use crate::tracker::{self, statistics}; - use crate::udp::handlers::handle_scrape; - use crate::udp::handlers::tests::{sample_ipv6_remote_addr, tracker_configuration}; #[tokio::test] async fn should_send_the_upd6_scrape_event() { diff --git a/src/udp/mod.rs b/src/servers/udp/mod.rs similarity index 100% rename from src/udp/mod.rs rename to src/servers/udp/mod.rs diff --git a/src/udp/peer_builder.rs b/src/servers/udp/peer_builder.rs similarity index 93% rename from src/udp/peer_builder.rs rename to src/servers/udp/peer_builder.rs index 84eae64f9..8d8852dc7 100644 --- a/src/udp/peer_builder.rs +++ b/src/servers/udp/peer_builder.rs @@ -1,7 +1,7 @@ use std::net::{IpAddr, SocketAddr}; use super::request::AnnounceWrapper; -use crate::protocol::clock::{Current, Time}; +use crate::shared::clock::{Current, Time}; use crate::tracker::peer::{Id, Peer}; #[must_use] diff --git a/src/udp/request.rs b/src/servers/udp/request.rs similarity index 88% rename from src/udp/request.rs rename to src/servers/udp/request.rs index 28d75f860..4be99e6d0 100644 --- a/src/udp/request.rs +++ b/src/servers/udp/request.rs @@ -1,6 +1,6 @@ use aquatic_udp_protocol::AnnounceRequest; -use crate::protocol::info_hash::InfoHash; +use crate::shared::bit_torrent::info_hash::InfoHash; pub struct AnnounceWrapper { pub announce_request: AnnounceRequest, diff --git a/src/udp/server.rs b/src/servers/udp/server.rs similarity index 97% rename from src/udp/server.rs rename to src/servers/udp/server.rs index e52b8fd52..9eb9836fe 100644 --- a/src/udp/server.rs +++ b/src/servers/udp/server.rs @@ -9,10 +9,10 @@ use log::{debug, error, info}; use tokio::net::UdpSocket; use tokio::task::JoinHandle; -use crate::signals::shutdown_signal; +use crate::servers::signals::shutdown_signal; +use crate::servers::udp::handlers::handle_packet; +use crate::servers::udp::MAX_PACKET_SIZE; use crate::tracker::Tracker; -use crate::udp::handlers::handle_packet; -use crate::udp::MAX_PACKET_SIZE; #[derive(Debug)] pub enum Error { diff --git a/src/protocol/common.rs b/src/shared/bit_torrent/common.rs similarity index 100% rename from src/protocol/common.rs rename to src/shared/bit_torrent/common.rs diff --git a/src/protocol/info_hash.rs b/src/shared/bit_torrent/info_hash.rs similarity index 100% rename from src/protocol/info_hash.rs rename to src/shared/bit_torrent/info_hash.rs diff --git a/src/shared/bit_torrent/mod.rs b/src/shared/bit_torrent/mod.rs new file mode 100644 index 000000000..7579a0780 --- /dev/null +++ b/src/shared/bit_torrent/mod.rs @@ -0,0 +1,2 @@ +pub mod common; +pub mod info_hash; diff --git a/src/protocol/clock/mod.rs b/src/shared/clock/mod.rs similarity index 95% rename from src/protocol/clock/mod.rs rename to src/shared/clock/mod.rs index 73df37b58..b5001e10e 100644 --- a/src/protocol/clock/mod.rs +++ b/src/shared/clock/mod.rs @@ -1,3 +1,7 @@ +pub mod static_time; +pub mod time_extent; +pub mod utils; + use std::num::IntErrorKind; use std::str::FromStr; use std::time::Duration; @@ -77,7 +81,7 @@ pub fn convert_from_timestamp_to_datetime_utc(duration: DurationSinceUnixEpoch) mod tests { use std::any::TypeId; - use crate::protocol::clock::{Current, Stopped, Time, Working}; + use crate::shared::clock::{Current, Stopped, Time, Working}; #[test] fn it_should_be_the_stopped_clock_as_default_when_testing() { @@ -95,7 +99,7 @@ mod tests { mod timestamp { use chrono::{DateTime, NaiveDateTime, Utc}; - use crate::protocol::clock::{ + use crate::shared::clock::{ convert_from_datetime_utc_to_timestamp, convert_from_iso_8601_to_timestamp, convert_from_timestamp_to_datetime_utc, DurationSinceUnixEpoch, }; @@ -227,7 +231,7 @@ mod stopped_clock { use std::thread; use std::time::Duration; - use crate::protocol::clock::{DurationSinceUnixEpoch, Stopped, StoppedTime, Time, TimeNow, Working}; + use crate::shared::clock::{DurationSinceUnixEpoch, Stopped, StoppedTime, Time, TimeNow, Working}; #[test] fn it_should_default_to_zero_when_testing() { @@ -286,8 +290,7 @@ mod stopped_clock { use std::cell::RefCell; use std::time::SystemTime; - use crate::protocol::clock::DurationSinceUnixEpoch; - use crate::static_time; + use crate::shared::clock::{static_time, DurationSinceUnixEpoch}; pub fn get_app_start_time() -> DurationSinceUnixEpoch { (*static_time::TIME_AT_APP_START) @@ -311,7 +314,7 @@ mod stopped_clock { mod tests { use std::time::Duration; - use crate::protocol::clock::stopped_clock::detail::{get_app_start_time, get_default_fixed_time}; + use crate::shared::clock::stopped_clock::detail::{get_app_start_time, get_default_fixed_time}; #[test] fn it_should_get_the_zero_start_time_when_testing() { @@ -326,5 +329,3 @@ mod stopped_clock { } } } - -pub mod time_extent; diff --git a/src/shared/clock/static_time.rs b/src/shared/clock/static_time.rs new file mode 100644 index 000000000..f916cec9c --- /dev/null +++ b/src/shared/clock/static_time.rs @@ -0,0 +1,5 @@ +use std::time::SystemTime; + +lazy_static! { + pub static ref TIME_AT_APP_START: SystemTime = SystemTime::now(); +} diff --git a/src/protocol/clock/time_extent.rs b/src/shared/clock/time_extent.rs similarity index 99% rename from src/protocol/clock/time_extent.rs rename to src/shared/clock/time_extent.rs index b4c20cd70..64142c404 100644 --- a/src/protocol/clock/time_extent.rs +++ b/src/shared/clock/time_extent.rs @@ -176,10 +176,10 @@ pub type DefaultTimeExtentMaker = StoppedTimeExtentMaker; #[cfg(test)] mod test { - use crate::protocol::clock::time_extent::{ + use crate::shared::clock::time_extent::{ checked_duration_from_nanos, Base, DefaultTimeExtentMaker, Extent, Make, Multiplier, Product, TimeExtent, MAX, ZERO, }; - use crate::protocol::clock::{Current, DurationSinceUnixEpoch, StoppedTime}; + use crate::shared::clock::{Current, DurationSinceUnixEpoch, StoppedTime}; const TIME_EXTENT_VAL: TimeExtent = TimeExtent::from_sec(2, &239_812_388_723); diff --git a/src/protocol/utils.rs b/src/shared/clock/utils.rs similarity index 89% rename from src/protocol/utils.rs rename to src/shared/clock/utils.rs index cec02ceaf..9127f97b1 100644 --- a/src/protocol/utils.rs +++ b/src/shared/clock/utils.rs @@ -1,4 +1,4 @@ -use super::clock::DurationSinceUnixEpoch; +use super::DurationSinceUnixEpoch; /// # Errors /// diff --git a/src/shared/crypto/ephemeral_instance_keys.rs b/src/shared/crypto/ephemeral_instance_keys.rs new file mode 100644 index 000000000..635d10fbd --- /dev/null +++ b/src/shared/crypto/ephemeral_instance_keys.rs @@ -0,0 +1,8 @@ +use rand::rngs::ThreadRng; +use rand::Rng; + +pub type Seed = [u8; 32]; + +lazy_static! { + pub static ref RANDOM_SEED: Seed = Rng::gen(&mut ThreadRng::default()); +} diff --git a/src/shared/crypto/keys.rs b/src/shared/crypto/keys.rs new file mode 100644 index 000000000..5e04eb551 --- /dev/null +++ b/src/shared/crypto/keys.rs @@ -0,0 +1,95 @@ +pub mod seeds { + use self::detail::CURRENT_SEED; + use crate::shared::crypto::ephemeral_instance_keys::{Seed, RANDOM_SEED}; + + pub trait Keeper { + type Seed: Sized + Default + AsMut<[u8]>; + fn get_seed() -> &'static Self::Seed; + } + + pub struct Instance; + pub struct Current; + + impl Keeper for Instance { + type Seed = Seed; + + fn get_seed() -> &'static Self::Seed { + &RANDOM_SEED + } + } + + impl Keeper for Current { + type Seed = Seed; + + #[allow(clippy::needless_borrow)] + fn get_seed() -> &'static Self::Seed { + &CURRENT_SEED + } + } + + #[cfg(test)] + mod tests { + use super::detail::ZEROED_TEST_SEED; + use super::{Current, Instance, Keeper}; + use crate::shared::crypto::ephemeral_instance_keys::Seed; + + pub struct ZeroedTestSeed; + + impl Keeper for ZeroedTestSeed { + type Seed = Seed; + + #[allow(clippy::needless_borrow)] + fn get_seed() -> &'static Self::Seed { + &ZEROED_TEST_SEED + } + } + + #[test] + fn the_default_seed_and_the_zeroed_seed_should_be_the_same_when_testing() { + assert_eq!(Current::get_seed(), ZeroedTestSeed::get_seed()); + } + + #[test] + fn the_default_seed_and_the_instance_seed_should_be_different_when_testing() { + assert_ne!(Current::get_seed(), Instance::get_seed()); + } + } + + mod detail { + use crate::shared::crypto::ephemeral_instance_keys::Seed; + + #[allow(dead_code)] + pub const ZEROED_TEST_SEED: &Seed = &[0u8; 32]; + + #[cfg(test)] + pub use ZEROED_TEST_SEED as CURRENT_SEED; + + #[cfg(not(test))] + pub use crate::shared::crypto::ephemeral_instance_keys::RANDOM_SEED as CURRENT_SEED; + + #[cfg(test)] + mod tests { + use std::convert::TryInto; + + use crate::shared::crypto::ephemeral_instance_keys::RANDOM_SEED; + use crate::shared::crypto::keys::seeds::detail::ZEROED_TEST_SEED; + use crate::shared::crypto::keys::seeds::CURRENT_SEED; + + #[test] + fn it_should_have_a_zero_test_seed() { + assert_eq!(*ZEROED_TEST_SEED, [0u8; 32]); + } + + #[test] + fn it_should_default_to_zeroed_seed_when_testing() { + assert_eq!(*CURRENT_SEED, *ZEROED_TEST_SEED); + } + + #[test] + fn it_should_have_a_large_random_seed() { + assert!(u128::from_ne_bytes((*RANDOM_SEED)[..16].try_into().unwrap()) > u128::from(u64::MAX)); + assert!(u128::from_ne_bytes((*RANDOM_SEED)[16..].try_into().unwrap()) > u128::from(u64::MAX)); + } + } + } +} diff --git a/src/shared/crypto/mod.rs b/src/shared/crypto/mod.rs new file mode 100644 index 000000000..066eb0f46 --- /dev/null +++ b/src/shared/crypto/mod.rs @@ -0,0 +1,2 @@ +pub mod ephemeral_instance_keys; +pub mod keys; diff --git a/src/shared/mod.rs b/src/shared/mod.rs new file mode 100644 index 000000000..4b0d9138e --- /dev/null +++ b/src/shared/mod.rs @@ -0,0 +1,3 @@ +pub mod bit_torrent; +pub mod clock; +pub mod crypto; diff --git a/src/tracker/auth.rs b/src/tracker/auth.rs index 75bc543a8..31e1f50e4 100644 --- a/src/tracker/auth.rs +++ b/src/tracker/auth.rs @@ -11,8 +11,8 @@ use serde::{Deserialize, Serialize}; use thiserror::Error; use torrust_tracker_located_error::LocatedError; -use crate::protocol::clock::{convert_from_timestamp_to_datetime_utc, Current, DurationSinceUnixEpoch, Time, TimeNow}; -use crate::protocol::common::AUTH_KEY_LENGTH; +use crate::shared::bit_torrent::common::AUTH_KEY_LENGTH; +use crate::shared::clock::{convert_from_timestamp_to_datetime_utc, Current, DurationSinceUnixEpoch, Time, TimeNow}; #[must_use] /// # Panics @@ -146,7 +146,7 @@ mod tests { use std::str::FromStr; use std::time::Duration; - use crate::protocol::clock::{Current, StoppedTime}; + use crate::shared::clock::{Current, StoppedTime}; use crate::tracker::auth; #[test] diff --git a/src/databases/driver.rs b/src/tracker/databases/driver.rs similarity index 100% rename from src/databases/driver.rs rename to src/tracker/databases/driver.rs diff --git a/src/databases/error.rs b/src/tracker/databases/error.rs similarity index 100% rename from src/databases/error.rs rename to src/tracker/databases/error.rs diff --git a/src/databases/mod.rs b/src/tracker/databases/mod.rs similarity index 97% rename from src/databases/mod.rs rename to src/tracker/databases/mod.rs index 0af6f5723..f68288bbe 100644 --- a/src/databases/mod.rs +++ b/src/tracker/databases/mod.rs @@ -8,7 +8,7 @@ use std::marker::PhantomData; use async_trait::async_trait; use self::error::Error; -use crate::protocol::info_hash::InfoHash; +use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::auth::{self, Key}; pub(self) struct Builder diff --git a/src/databases/mysql.rs b/src/tracker/databases/mysql.rs similarity index 98% rename from src/databases/mysql.rs rename to src/tracker/databases/mysql.rs index f6918974f..7e4aab99e 100644 --- a/src/databases/mysql.rs +++ b/src/tracker/databases/mysql.rs @@ -9,9 +9,9 @@ use r2d2_mysql::mysql::{params, Opts, OptsBuilder}; use r2d2_mysql::MySqlConnectionManager; use torrust_tracker_primitives::DatabaseDriver; -use crate::databases::{Database, Error}; -use crate::protocol::common::AUTH_KEY_LENGTH; -use crate::protocol::info_hash::InfoHash; +use super::{Database, Error}; +use crate::shared::bit_torrent::common::AUTH_KEY_LENGTH; +use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::auth::{self, Key}; const DRIVER: DatabaseDriver = DatabaseDriver::MySQL; diff --git a/src/databases/sqlite.rs b/src/tracker/databases/sqlite.rs similarity index 98% rename from src/databases/sqlite.rs rename to src/tracker/databases/sqlite.rs index adb201def..931289183 100644 --- a/src/databases/sqlite.rs +++ b/src/tracker/databases/sqlite.rs @@ -6,9 +6,9 @@ use r2d2::Pool; use r2d2_sqlite::SqliteConnectionManager; use torrust_tracker_primitives::DatabaseDriver; -use crate::databases::{Database, Error}; -use crate::protocol::clock::DurationSinceUnixEpoch; -use crate::protocol::info_hash::InfoHash; +use super::{Database, Error}; +use crate::shared::bit_torrent::info_hash::InfoHash; +use crate::shared::clock::DurationSinceUnixEpoch; use crate::tracker::auth::{self, Key}; const DRIVER: DatabaseDriver = DatabaseDriver::Sqlite3; diff --git a/src/tracker/error.rs b/src/tracker/error.rs index 10ca5ec19..aaf755e0d 100644 --- a/src/tracker/error.rs +++ b/src/tracker/error.rs @@ -16,7 +16,7 @@ pub enum Error { // Authorization errors #[error("The torrent: {info_hash}, is not whitelisted, {location}")] TorrentNotWhitelisted { - info_hash: crate::protocol::info_hash::InfoHash, + info_hash: crate::shared::bit_torrent::info_hash::InfoHash, location: &'static Location<'static>, }, } diff --git a/src/tracker/mod.rs b/src/tracker/mod.rs index 71bb41f90..a89d6df2c 100644 --- a/src/tracker/mod.rs +++ b/src/tracker/mod.rs @@ -1,4 +1,5 @@ pub mod auth; +pub mod databases; pub mod error; pub mod peer; pub mod services; @@ -21,8 +22,8 @@ use self::auth::Key; use self::error::Error; use self::peer::Peer; use self::torrent::{SwarmMetadata, SwarmStats}; -use crate::databases::{self, Database}; -use crate::protocol::info_hash::InfoHash; +use crate::shared::bit_torrent::info_hash::InfoHash; +use crate::tracker::databases::Database; pub struct Tracker { pub config: Arc, @@ -556,10 +557,10 @@ mod tests { use aquatic_udp_protocol::{AnnounceEvent, NumberOfBytes}; use torrust_tracker_test_helpers::configuration; - use crate::protocol::clock::DurationSinceUnixEpoch; - use crate::protocol::info_hash::InfoHash; + use crate::shared::bit_torrent::info_hash::InfoHash; + use crate::shared::clock::DurationSinceUnixEpoch; use crate::tracker::peer::{self, Peer}; - use crate::tracker::services::common::tracker_factory; + use crate::tracker::services::tracker_factory; use crate::tracker::{TorrentsMetrics, Tracker}; fn public_tracker() -> Tracker { @@ -910,7 +911,7 @@ mod tests { use std::net::{IpAddr, Ipv4Addr}; - use crate::protocol::info_hash::InfoHash; + use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::tests::the_tracker::{complete_peer, incomplete_peer, public_tracker}; use crate::tracker::{ScrapeData, SwarmMetadata}; @@ -1067,7 +1068,7 @@ mod tests { mod handling_an_scrape_request { - use crate::protocol::info_hash::InfoHash; + use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::tests::the_tracker::{ complete_peer, incomplete_peer, peer_ip, sample_info_hash, whitelisted_tracker, }; diff --git a/src/tracker/peer.rs b/src/tracker/peer.rs index 3012770bb..6a298c9df 100644 --- a/src/tracker/peer.rs +++ b/src/tracker/peer.rs @@ -6,9 +6,9 @@ use serde; use serde::Serialize; use thiserror::Error; -use crate::protocol::clock::DurationSinceUnixEpoch; -use crate::protocol::common::{AnnounceEventDef, NumberOfBytesDef}; -use crate::protocol::utils::ser_unix_time_value; +use crate::shared::bit_torrent::common::{AnnounceEventDef, NumberOfBytesDef}; +use crate::shared::clock::utils::ser_unix_time_value; +use crate::shared::clock::DurationSinceUnixEpoch; #[derive(PartialEq, Eq, Debug)] pub enum IPVersion { @@ -28,8 +28,6 @@ pub struct Peer { pub downloaded: NumberOfBytes, #[serde(with = "NumberOfBytesDef")] pub left: NumberOfBytes, // The number of bytes this peer still has to download - // code-review: aquatic_udp_protocol::request::AnnounceEvent is used also for the HTTP tracker. - // Maybe we should use our own enum and use the”is one only for the UDP tracker. #[serde(with = "AnnounceEventDef")] pub event: AnnounceEvent, } @@ -397,7 +395,7 @@ mod test { use aquatic_udp_protocol::{AnnounceEvent, NumberOfBytes}; use serde_json::Value; - use crate::protocol::clock::{Current, Time}; + use crate::shared::clock::{Current, Time}; use crate::tracker::peer::{self, Peer}; #[test] diff --git a/src/tracker/services/common.rs b/src/tracker/services/common.rs deleted file mode 100644 index 757725263..000000000 --- a/src/tracker/services/common.rs +++ /dev/null @@ -1,25 +0,0 @@ -use std::sync::Arc; - -use torrust_tracker_configuration::Configuration; - -use crate::tracker::statistics::Keeper; -use crate::tracker::Tracker; - -/// # Panics -/// -/// Will panic if tracker cannot be instantiated. -#[must_use] -pub fn tracker_factory(configuration: Arc) -> Tracker { - // todo: the tracker initialization is duplicated in many places. - - // Initialize stats tracker - let (stats_event_sender, stats_repository) = Keeper::new_active_instance(); - - // Initialize Torrust tracker - match Tracker::new(configuration, Some(stats_event_sender), stats_repository) { - Ok(tracker) => tracker, - Err(error) => { - panic!("{}", error) - } - } -} diff --git a/src/tracker/services/mod.rs b/src/tracker/services/mod.rs index 2fd557d54..8667f79a9 100644 --- a/src/tracker/services/mod.rs +++ b/src/tracker/services/mod.rs @@ -1,3 +1,25 @@ -pub mod common; pub mod statistics; pub mod torrent; + +use std::sync::Arc; + +use torrust_tracker_configuration::Configuration; + +use crate::tracker::Tracker; + +/// # Panics +/// +/// Will panic if tracker cannot be instantiated. +#[must_use] +pub fn tracker_factory(config: Arc) -> Tracker { + // Initialize statistics + let (stats_event_sender, stats_repository) = statistics::setup::factory(config.tracker_usage_statistics); + + // Initialize Torrust tracker + match Tracker::new(config, stats_event_sender, stats_repository) { + Ok(tracker) => tracker, + Err(error) => { + panic!("{}", error) + } + } +} diff --git a/src/tracker/services/statistics.rs b/src/tracker/services/statistics/mod.rs similarity index 97% rename from src/tracker/services/statistics.rs rename to src/tracker/services/statistics/mod.rs index 28cd0b962..cae4d1d69 100644 --- a/src/tracker/services/statistics.rs +++ b/src/tracker/services/statistics/mod.rs @@ -1,3 +1,5 @@ +pub mod setup; + use std::sync::Arc; use crate::tracker::statistics::Metrics; @@ -40,8 +42,8 @@ mod tests { use torrust_tracker_test_helpers::configuration; use crate::tracker; - use crate::tracker::services::common::tracker_factory; use crate::tracker::services::statistics::{get_metrics, TrackerMetrics}; + use crate::tracker::services::tracker_factory; pub fn tracker_configuration() -> Arc { Arc::new(configuration::ephemeral()) diff --git a/src/stats.rs b/src/tracker/services/statistics/setup.rs similarity index 66% rename from src/stats.rs rename to src/tracker/services/statistics/setup.rs index 8f87c01a3..b7cb831cb 100644 --- a/src/stats.rs +++ b/src/tracker/services/statistics/setup.rs @@ -1,7 +1,7 @@ use crate::tracker::statistics; #[must_use] -pub fn setup_statistics(tracker_usage_statistics: bool) -> (Option>, statistics::Repo) { +pub fn factory(tracker_usage_statistics: bool) -> (Option>, statistics::Repo) { let mut stats_event_sender = None; let mut stats_tracker = statistics::Keeper::new(); @@ -15,13 +15,13 @@ pub fn setup_statistics(tracker_usage_statistics: bool) -> (Option peer::Peer { @@ -140,10 +140,10 @@ mod tests { use torrust_tracker_configuration::Configuration; use torrust_tracker_test_helpers::configuration; - use crate::protocol::info_hash::InfoHash; - use crate::tracker::services::common::tracker_factory; + use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::services::torrent::tests::sample_peer; use crate::tracker::services::torrent::{get_torrent_info, Info}; + use crate::tracker::services::tracker_factory; pub fn tracker_configuration() -> Arc { Arc::new(configuration::ephemeral()) @@ -195,10 +195,10 @@ mod tests { use torrust_tracker_configuration::Configuration; use torrust_tracker_test_helpers::configuration; - use crate::protocol::info_hash::InfoHash; - use crate::tracker::services::common::tracker_factory; + use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::services::torrent::tests::sample_peer; use crate::tracker::services::torrent::{get_torrents, BasicInfo, Pagination}; + use crate::tracker::services::tracker_factory; pub fn tracker_configuration() -> Arc { Arc::new(configuration::ephemeral()) diff --git a/src/tracker/torrent.rs b/src/tracker/torrent.rs index 4a871aa89..882e52ff1 100644 --- a/src/tracker/torrent.rs +++ b/src/tracker/torrent.rs @@ -4,8 +4,8 @@ use aquatic_udp_protocol::AnnounceEvent; use serde::{Deserialize, Serialize}; use super::peer::{self, Peer}; -use crate::protocol::clock::{Current, TimeNow}; -use crate::protocol::common::MAX_SCRAPE_TORRENTS; +use crate::shared::bit_torrent::common::MAX_SCRAPE_TORRENTS; +use crate::shared::clock::{Current, TimeNow}; #[derive(Serialize, Deserialize, Clone, Debug)] pub struct Entry { @@ -134,7 +134,7 @@ mod tests { use aquatic_udp_protocol::{AnnounceEvent, NumberOfBytes}; - use crate::protocol::clock::{Current, DurationSinceUnixEpoch, Stopped, StoppedTime, Time, Working}; + use crate::shared::clock::{Current, DurationSinceUnixEpoch, Stopped, StoppedTime, Time, Working}; use crate::tracker::peer; use crate::tracker::torrent::Entry; diff --git a/tests/common/app.rs b/tests/common/app.rs new file mode 100644 index 000000000..ee3fba064 --- /dev/null +++ b/tests/common/app.rs @@ -0,0 +1,8 @@ +use std::sync::Arc; + +use torrust_tracker::bootstrap; +use torrust_tracker::tracker::Tracker; + +pub fn setup_with_configuration(configuration: &Arc) -> Arc { + bootstrap::app::initialize_with_configuration(configuration) +} diff --git a/tests/common/fixtures.rs b/tests/common/fixtures.rs index d4b3e9812..7062c8376 100644 --- a/tests/common/fixtures.rs +++ b/tests/common/fixtures.rs @@ -1,7 +1,7 @@ use std::net::{IpAddr, Ipv4Addr, SocketAddr}; use aquatic_udp_protocol::{AnnounceEvent, NumberOfBytes}; -use torrust_tracker::protocol::clock::DurationSinceUnixEpoch; +use torrust_tracker::shared::clock::DurationSinceUnixEpoch; use torrust_tracker::tracker::peer::{self, Id, Peer}; pub struct PeerBuilder { diff --git a/tests/common/mod.rs b/tests/common/mod.rs index 9452cc111..51a8a5b03 100644 --- a/tests/common/mod.rs +++ b/tests/common/mod.rs @@ -1,4 +1,4 @@ +pub mod app; pub mod fixtures; pub mod http; -pub mod tracker; pub mod udp; diff --git a/tests/common/tracker.rs b/tests/common/tracker.rs deleted file mode 100644 index 127cfefc4..000000000 --- a/tests/common/tracker.rs +++ /dev/null @@ -1,20 +0,0 @@ -use std::sync::Arc; - -use torrust_tracker::tracker::services::common::tracker_factory; -use torrust_tracker::tracker::Tracker; -use torrust_tracker::{ephemeral_instance_keys, logging, static_time}; - -// TODO: Move to test-helpers crate once `Tracker` is isolated. -#[allow(clippy::module_name_repetitions)] -pub fn new_tracker(configuration: Arc) -> Arc { - // Set the time of Torrust app starting - lazy_static::initialize(&static_time::TIME_AT_APP_START); - - // Initialize the Ephemeral Instance Random Seed - lazy_static::initialize(&ephemeral_instance_keys::RANDOM_SEED); - - // Initialize logging - logging::setup(&configuration); - - Arc::new(tracker_factory(configuration)) -} diff --git a/tests/servers/api/test_environment.rs b/tests/servers/api/test_environment.rs index b6f5ca990..dbb23dcfa 100644 --- a/tests/servers/api/test_environment.rs +++ b/tests/servers/api/test_environment.rs @@ -1,12 +1,12 @@ use std::sync::Arc; -use torrust_tracker::apis::server::{ApiServer, RunningApiServer, StoppedApiServer}; -use torrust_tracker::protocol::info_hash::InfoHash; +use torrust_tracker::servers::apis::server::{ApiServer, RunningApiServer, StoppedApiServer}; +use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker::tracker::peer::Peer; use torrust_tracker::tracker::Tracker; use super::connection_info::ConnectionInfo; -use crate::common::tracker::new_tracker; +use crate::common::app::setup_with_configuration; #[allow(clippy::module_name_repetitions, dead_code)] pub type StoppedTestEnvironment = TestEnvironment; @@ -39,7 +39,7 @@ impl TestEnvironment { pub fn new_stopped(cfg: torrust_tracker_configuration::Configuration) -> Self { let cfg = Arc::new(cfg); - let tracker = new_tracker(cfg.clone()); + let tracker = setup_with_configuration(&cfg); let api_server = api_server(cfg.http_api.clone()); diff --git a/tests/servers/api/v1/asserts.rs b/tests/servers/api/v1/asserts.rs index d37bcdbb4..1b1f204a2 100644 --- a/tests/servers/api/v1/asserts.rs +++ b/tests/servers/api/v1/asserts.rs @@ -1,9 +1,9 @@ // code-review: should we use macros to return the exact line where the assert fails? use reqwest::Response; -use torrust_tracker::apis::v1::context::auth_key::resources::AuthKey; -use torrust_tracker::apis::v1::context::stats::resources::Stats; -use torrust_tracker::apis::v1::context::torrent::resources::torrent::{ListItem, Torrent}; +use torrust_tracker::servers::apis::v1::context::auth_key::resources::AuthKey; +use torrust_tracker::servers::apis::v1::context::stats::resources::Stats; +use torrust_tracker::servers::apis::v1::context::torrent::resources::torrent::{ListItem, Torrent}; // Resource responses diff --git a/tests/servers/api/v1/contract/context/stats.rs b/tests/servers/api/v1/contract/context/stats.rs index 3929a4270..45f7e604a 100644 --- a/tests/servers/api/v1/contract/context/stats.rs +++ b/tests/servers/api/v1/contract/context/stats.rs @@ -1,7 +1,7 @@ use std::str::FromStr; -use torrust_tracker::apis::v1::context::stats::resources::Stats; -use torrust_tracker::protocol::info_hash::InfoHash; +use torrust_tracker::servers::apis::v1::context::stats::resources::Stats; +use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker_test_helpers::configuration; use crate::common::fixtures::PeerBuilder; diff --git a/tests/servers/api/v1/contract/context/torrent.rs b/tests/servers/api/v1/contract/context/torrent.rs index 702a8bcd4..ab497787f 100644 --- a/tests/servers/api/v1/contract/context/torrent.rs +++ b/tests/servers/api/v1/contract/context/torrent.rs @@ -1,8 +1,8 @@ use std::str::FromStr; -use torrust_tracker::apis::v1::context::torrent::resources::peer::Peer; -use torrust_tracker::apis::v1::context::torrent::resources::torrent::{self, Torrent}; -use torrust_tracker::protocol::info_hash::InfoHash; +use torrust_tracker::servers::apis::v1::context::torrent::resources::peer::Peer; +use torrust_tracker::servers::apis::v1::context::torrent::resources::torrent::{self, Torrent}; +use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker_test_helpers::configuration; use crate::common::fixtures::PeerBuilder; diff --git a/tests/servers/api/v1/contract/context/whitelist.rs b/tests/servers/api/v1/contract/context/whitelist.rs index 67992642f..60ab4c901 100644 --- a/tests/servers/api/v1/contract/context/whitelist.rs +++ b/tests/servers/api/v1/contract/context/whitelist.rs @@ -1,6 +1,6 @@ use std::str::FromStr; -use torrust_tracker::protocol::info_hash::InfoHash; +use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker_test_helpers::configuration; use crate::servers::api::connection_info::{connection_with_invalid_token, connection_with_no_token}; diff --git a/tests/servers/http/requests/announce.rs b/tests/servers/http/requests/announce.rs index 414c118ef..20c5ddaa7 100644 --- a/tests/servers/http/requests/announce.rs +++ b/tests/servers/http/requests/announce.rs @@ -3,7 +3,7 @@ use std::net::{IpAddr, Ipv4Addr}; use std::str::FromStr; use serde_repr::Serialize_repr; -use torrust_tracker::protocol::info_hash::InfoHash; +use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker::tracker::peer::Id; use crate::servers::http::{percent_encode_byte_array, ByteArray20}; diff --git a/tests/servers/http/requests/scrape.rs b/tests/servers/http/requests/scrape.rs index d7f7cd581..9e4257d6c 100644 --- a/tests/servers/http/requests/scrape.rs +++ b/tests/servers/http/requests/scrape.rs @@ -1,7 +1,7 @@ use std::fmt; use std::str::FromStr; -use torrust_tracker::protocol::info_hash::InfoHash; +use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use crate::servers::http::{percent_encode_byte_array, ByteArray20}; diff --git a/tests/servers/http/test_environment.rs b/tests/servers/http/test_environment.rs index 459c2fbe6..8d0aaba02 100644 --- a/tests/servers/http/test_environment.rs +++ b/tests/servers/http/test_environment.rs @@ -1,11 +1,11 @@ use std::sync::Arc; -use torrust_tracker::http::server::{HttpServer, HttpServerLauncher, RunningHttpServer, StoppedHttpServer}; -use torrust_tracker::protocol::info_hash::InfoHash; +use torrust_tracker::servers::http::server::{HttpServer, HttpServerLauncher, RunningHttpServer, StoppedHttpServer}; +use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker::tracker::peer::Peer; use torrust_tracker::tracker::Tracker; -use crate::common::tracker::new_tracker; +use crate::common::app::setup_with_configuration; #[allow(clippy::module_name_repetitions, dead_code)] pub type StoppedTestEnvironment = TestEnvironment>; @@ -39,7 +39,7 @@ impl TestEnvironment> { pub fn new_stopped(cfg: torrust_tracker_configuration::Configuration) -> Self { let cfg = Arc::new(cfg); - let tracker = new_tracker(cfg.clone()); + let tracker = setup_with_configuration(&cfg); let http_server = http_server(cfg.http_trackers[0].clone()); diff --git a/tests/servers/http/v1/contract.rs b/tests/servers/http/v1/contract.rs index 501c0f6fa..b508dfc39 100644 --- a/tests/servers/http/v1/contract.rs +++ b/tests/servers/http/v1/contract.rs @@ -2,7 +2,7 @@ use torrust_tracker_test_helpers::configuration; use crate::servers::http::test_environment::running_test_environment; -pub type V1 = torrust_tracker::http::v1::launcher::Launcher; +pub type V1 = torrust_tracker::servers::http::v1::launcher::Launcher; #[tokio::test] async fn test_environment_should_be_started_and_stopped() { @@ -72,7 +72,7 @@ mod for_all_config_modes { use local_ip_address::local_ip; use reqwest::Response; - use torrust_tracker::protocol::info_hash::InfoHash; + use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker::tracker::peer; use torrust_tracker_test_helpers::configuration; @@ -833,7 +833,7 @@ mod for_all_config_modes { use std::net::IpAddr; use std::str::FromStr; - use torrust_tracker::protocol::info_hash::InfoHash; + use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker::tracker::peer; use torrust_tracker_test_helpers::configuration; @@ -1055,7 +1055,7 @@ mod configured_as_whitelisted { mod and_receiving_an_announce_request { use std::str::FromStr; - use torrust_tracker::protocol::info_hash::InfoHash; + use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker_test_helpers::configuration; use crate::servers::http::asserts::{assert_is_announce_response, assert_torrent_not_in_whitelist_error_response}; @@ -1104,7 +1104,7 @@ mod configured_as_whitelisted { mod receiving_an_scrape_request { use std::str::FromStr; - use torrust_tracker::protocol::info_hash::InfoHash; + use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker::tracker::peer; use torrust_tracker_test_helpers::configuration; @@ -1201,7 +1201,7 @@ mod configured_as_private { use std::str::FromStr; use std::time::Duration; - use torrust_tracker::protocol::info_hash::InfoHash; + use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker::tracker::auth::Key; use torrust_tracker_test_helpers::configuration; @@ -1278,7 +1278,7 @@ mod configured_as_private { use std::str::FromStr; use std::time::Duration; - use torrust_tracker::protocol::info_hash::InfoHash; + use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker::tracker::auth::Key; use torrust_tracker::tracker::peer; use torrust_tracker_test_helpers::configuration; diff --git a/tests/servers/udp/client.rs b/tests/servers/udp/client.rs index a13845b97..75467055e 100644 --- a/tests/servers/udp/client.rs +++ b/tests/servers/udp/client.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use aquatic_udp_protocol::{Request, Response}; use tokio::net::UdpSocket; -use torrust_tracker::udp::MAX_PACKET_SIZE; +use torrust_tracker::servers::udp::MAX_PACKET_SIZE; use crate::servers::udp::source_address; diff --git a/tests/servers/udp/contract.rs b/tests/servers/udp/contract.rs index 311cf5e49..3187d9871 100644 --- a/tests/servers/udp/contract.rs +++ b/tests/servers/udp/contract.rs @@ -6,7 +6,7 @@ use core::panic; use aquatic_udp_protocol::{ConnectRequest, ConnectionId, Response, TransactionId}; -use torrust_tracker::udp::MAX_PACKET_SIZE; +use torrust_tracker::servers::udp::MAX_PACKET_SIZE; use torrust_tracker_test_helpers::configuration; use crate::servers::udp::asserts::is_error_response; diff --git a/tests/servers/udp/test_environment.rs b/tests/servers/udp/test_environment.rs index f729777a1..15266d881 100644 --- a/tests/servers/udp/test_environment.rs +++ b/tests/servers/udp/test_environment.rs @@ -1,12 +1,12 @@ use std::net::SocketAddr; use std::sync::Arc; -use torrust_tracker::protocol::info_hash::InfoHash; +use torrust_tracker::servers::udp::server::{RunningUdpServer, StoppedUdpServer, UdpServer}; +use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker::tracker::peer::Peer; use torrust_tracker::tracker::Tracker; -use torrust_tracker::udp::server::{RunningUdpServer, StoppedUdpServer, UdpServer}; -use crate::common::tracker::new_tracker; +use crate::common::app::setup_with_configuration; #[allow(clippy::module_name_repetitions, dead_code)] pub type StoppedTestEnvironment = TestEnvironment; @@ -41,7 +41,7 @@ impl TestEnvironment { pub fn new_stopped(cfg: torrust_tracker_configuration::Configuration) -> Self { let cfg = Arc::new(cfg); - let tracker = new_tracker(cfg.clone()); + let tracker = setup_with_configuration(&cfg); let udp_server = udp_server(cfg.udp_trackers[0].clone());