From 4fa199a1e094b1baeb6bcdf3c52cff866853d677 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Fri, 15 Oct 2021 22:38:58 +0200 Subject: [PATCH] aquatic_http access list: add config, state field, initial load --- aquatic_http/src/lib/common.rs | 3 +++ aquatic_http/src/lib/config.rs | 3 +++ aquatic_http/src/lib/lib.rs | 12 ++++++++++++ 3 files changed, 18 insertions(+) diff --git a/aquatic_http/src/lib/common.rs b/aquatic_http/src/lib/common.rs index 5804342..0c0419a 100644 --- a/aquatic_http/src/lib/common.rs +++ b/aquatic_http/src/lib/common.rs @@ -1,6 +1,7 @@ use std::net::{Ipv4Addr, Ipv6Addr, SocketAddr}; use std::sync::Arc; +use aquatic_common::access_list::AccessList; use crossbeam_channel::{Receiver, Sender}; use either::Either; use hashbrown::HashMap; @@ -116,12 +117,14 @@ pub struct TorrentMaps { #[derive(Clone)] pub struct State { pub torrent_maps: Arc>, + pub access_list: Arc>, } impl Default for State { fn default() -> Self { Self { torrent_maps: Arc::new(Mutex::new(TorrentMaps::default())), + access_list: Arc::new(Mutex::new(AccessList::default())), } } } diff --git a/aquatic_http/src/lib/config.rs b/aquatic_http/src/lib/config.rs index 9b40fd0..fe75932 100644 --- a/aquatic_http/src/lib/config.rs +++ b/aquatic_http/src/lib/config.rs @@ -1,5 +1,6 @@ use std::net::SocketAddr; +use aquatic_common::access_list::AccessListConfig; use serde::{Deserialize, Serialize}; use aquatic_cli_helpers::LogLevel; @@ -21,6 +22,7 @@ pub struct Config { pub cleaning: CleaningConfig, pub statistics: StatisticsConfig, pub privileges: PrivilegeConfig, + pub access_list: AccessListConfig, } impl aquatic_cli_helpers::Config for Config { @@ -111,6 +113,7 @@ impl Default for Config { cleaning: CleaningConfig::default(), statistics: StatisticsConfig::default(), privileges: PrivilegeConfig::default(), + access_list: AccessListConfig::default(), } } } diff --git a/aquatic_http/src/lib/lib.rs b/aquatic_http/src/lib/lib.rs index f96fbb7..da26916 100644 --- a/aquatic_http/src/lib/lib.rs +++ b/aquatic_http/src/lib/lib.rs @@ -7,6 +7,8 @@ use mio::{Poll, Waker}; use parking_lot::Mutex; use privdrop::PrivDrop; +use aquatic_common::access_list::AccessListMode; + pub mod common; pub mod config; pub mod handler; @@ -22,6 +24,16 @@ pub const APP_NAME: &str = "aquatic_http: HTTP/TLS BitTorrent tracker"; pub fn run(config: Config) -> anyhow::Result<()> { let state = State::default(); + match config.access_list.mode { + AccessListMode::Require | AccessListMode::Forbid => { + state + .access_list + .lock() + .update_from_path(&config.access_list.path)?; + } + AccessListMode::Ignore => {} + } + start_workers(config.clone(), state.clone())?; loop {