Loading crates/arti-config/src/lib.rs +1 −3 Original line number Diff line number Diff line Loading @@ -51,9 +51,7 @@ mod cmdline; mod options; pub use cmdline::CmdLine; pub use options::{ ApplicationConfig, ApplicationConfigBuilder, ProxyConfig, ProxyConfigBuilder, ARTI_DEFAULTS, }; pub use options::ARTI_DEFAULTS; use tor_config::CfgPath; /// The synchronous configuration builder type we use. Loading crates/arti-config/src/options.rs +0 −77 Original line number Diff line number Diff line //! Handling for arti's configuration formats. use derive_builder::Builder; use serde::Deserialize; use tor_config::ConfigBuildError; /// Default options to use for our configuration. // // TODO should this be in `arti::cfg` ? pub const ARTI_DEFAULTS: &str = concat!(include_str!("./arti_defaults.toml"),); /// Structure to hold our application configuration options #[derive(Deserialize, Debug, Default, Clone, Builder, Eq, PartialEq)] #[serde(deny_unknown_fields)] #[builder(build_fn(error = "ConfigBuildError"))] #[builder(derive(Deserialize))] pub struct ApplicationConfig { /// If true, we should watch our configuration files for changes, and reload /// our configuration when they change. /// /// Note that this feature may behave in unexpected ways if the path to the /// directory holding our configuration files changes its identity (because /// an intermediate symlink is changed, because the directory is removed and /// recreated, or for some other reason). #[serde(default)] #[builder(default)] watch_configuration: bool, } impl ApplicationConfig { /// Return true if we're configured to watch for configuration changes. pub fn watch_configuration(&self) -> bool { self.watch_configuration } } /// Configuration for one or more proxy listeners. #[derive(Deserialize, Debug, Clone, Builder, Eq, PartialEq)] #[serde(deny_unknown_fields)] #[builder(build_fn(error = "ConfigBuildError"))] #[builder(derive(Deserialize))] pub struct ProxyConfig { /// Port to listen on (at localhost) for incoming SOCKS /// connections. #[serde(default = "default_socks_port")] #[builder(default = "default_socks_port()")] socks_port: Option<u16>, /// Port to lisen on (at localhost) for incoming DNS connections. #[serde(default)] #[builder(default)] dns_port: Option<u16>, } /// Return the default value for `socks_port` #[allow(clippy::unnecessary_wraps)] fn default_socks_port() -> Option<u16> { Some(9150) } impl Default for ProxyConfig { fn default() -> Self { Self::builder().build().expect("Default builder failed") } } impl ProxyConfig { /// Return a new [`ProxyConfigBuilder`]. pub fn builder() -> ProxyConfigBuilder { ProxyConfigBuilder::default() } /// Return the configured SOCKS port for this proxy configuration, /// if one is enabled. pub fn socks_port(&self) -> Option<u16> { self.socks_port } /// Return the configured DNS port for this proxy configuration, /// if one is enabled. pub fn dns_port(&self) -> Option<u16> { self.dns_port } } crates/arti/src/cfg.rs +55 −1 Original line number Diff line number Diff line Loading @@ -4,15 +4,69 @@ use std::convert::TryFrom; use derive_builder::Builder; use serde::Deserialize; use arti_client::config::{SystemConfig, SystemConfigBuilder, TorClientConfigBuilder}; use arti_client::TorClientConfig; use arti_config::{ApplicationConfig, ApplicationConfigBuilder, ProxyConfig, ProxyConfigBuilder}; use tor_config::ConfigBuildError; use crate::{LoggingConfig, LoggingConfigBuilder}; /// Structure to hold our application configuration options #[derive(Deserialize, Debug, Default, Clone, Builder, Eq, PartialEq)] #[serde(deny_unknown_fields)] #[builder(build_fn(error = "ConfigBuildError"))] #[builder(derive(Deserialize))] pub struct ApplicationConfig { /// If true, we should watch our configuration files for changes, and reload /// our configuration when they change. /// /// Note that this feature may behave in unexpected ways if the path to the /// directory holding our configuration files changes its identity (because /// an intermediate symlink is changed, because the directory is removed and /// recreated, or for some other reason). #[serde(default)] #[builder(default)] pub(crate) watch_configuration: bool, } /// Configuration for one or more proxy listeners. #[derive(Deserialize, Debug, Clone, Builder, Eq, PartialEq)] #[serde(deny_unknown_fields)] #[builder(build_fn(error = "ConfigBuildError"))] #[builder(derive(Deserialize))] pub struct ProxyConfig { /// Port to listen on (at localhost) for incoming SOCKS /// connections. #[serde(default = "default_socks_port")] #[builder(default = "default_socks_port()")] pub(crate) socks_port: Option<u16>, /// Port to lisen on (at localhost) for incoming DNS connections. #[serde(default)] #[builder(default)] pub(crate) dns_port: Option<u16>, } /// Return the default value for `socks_port` #[allow(clippy::unnecessary_wraps)] fn default_socks_port() -> Option<u16> { Some(9150) } impl Default for ProxyConfig { fn default() -> Self { Self::builder().build().expect("Default builder failed") } } impl ProxyConfig { /// Return a new [`ProxyConfigBuilder`]. pub fn builder() -> ProxyConfigBuilder { ProxyConfigBuilder::default() } } /// Structure to hold Arti's configuration options, whether from a /// configuration file or the command line. // Loading crates/arti/src/lib.rs +7 −7 Original line number Diff line number Diff line Loading @@ -122,7 +122,10 @@ pub mod process; pub mod socks; pub mod watch_cfg; pub use cfg::{ArtiConfig, ArtiConfigBuilder}; pub use cfg::{ ApplicationConfig, ApplicationConfigBuilder, ArtiConfig, ArtiConfigBuilder, ProxyConfig, ProxyConfigBuilder, }; pub use logging::{LoggingConfig, LoggingConfigBuilder}; use arti_client::{TorClient, TorClientConfig}; Loading Loading @@ -159,7 +162,7 @@ pub async fn run<R: Runtime>( .config(client_config) .bootstrap_behavior(OnDemand) .create_unbootstrapped()?; if arti_config.application().watch_configuration() { if arti_config.application().watch_configuration { watch_cfg::watch_for_config_changes(config_sources, arti_config, client.clone())?; } Loading Loading @@ -309,17 +312,14 @@ pub fn main_main() -> Result<()> { if let Some(proxy_matches) = matches.subcommand_matches("proxy") { let socks_port = match ( proxy_matches.value_of("socks-port"), config.proxy().socks_port(), config.proxy().socks_port, ) { (Some(p), _) => p.parse().expect("Invalid port specified"), (None, Some(s)) => s, (None, None) => 0, }; let dns_port = match ( proxy_matches.value_of("dns-port"), config.proxy().dns_port(), ) { let dns_port = match (proxy_matches.value_of("dns-port"), config.proxy().dns_port) { (Some(p), _) => p.parse().expect("Invalid port specified"), (None, Some(s)) => s, (None, None) => 0, Loading crates/arti/src/watch_cfg.rs +1 −1 Original line number Diff line number Diff line Loading @@ -95,7 +95,7 @@ fn reconfigure<R: Runtime>( let client_config = config.tor_client_config()?; client.reconfigure(&client_config, Reconfigure::WarnOnFailures)?; if !config.application().watch_configuration() { if !config.application().watch_configuration { // Stop watching for configuration changes. return Ok(true); } Loading Loading
crates/arti-config/src/lib.rs +1 −3 Original line number Diff line number Diff line Loading @@ -51,9 +51,7 @@ mod cmdline; mod options; pub use cmdline::CmdLine; pub use options::{ ApplicationConfig, ApplicationConfigBuilder, ProxyConfig, ProxyConfigBuilder, ARTI_DEFAULTS, }; pub use options::ARTI_DEFAULTS; use tor_config::CfgPath; /// The synchronous configuration builder type we use. Loading
crates/arti-config/src/options.rs +0 −77 Original line number Diff line number Diff line //! Handling for arti's configuration formats. use derive_builder::Builder; use serde::Deserialize; use tor_config::ConfigBuildError; /// Default options to use for our configuration. // // TODO should this be in `arti::cfg` ? pub const ARTI_DEFAULTS: &str = concat!(include_str!("./arti_defaults.toml"),); /// Structure to hold our application configuration options #[derive(Deserialize, Debug, Default, Clone, Builder, Eq, PartialEq)] #[serde(deny_unknown_fields)] #[builder(build_fn(error = "ConfigBuildError"))] #[builder(derive(Deserialize))] pub struct ApplicationConfig { /// If true, we should watch our configuration files for changes, and reload /// our configuration when they change. /// /// Note that this feature may behave in unexpected ways if the path to the /// directory holding our configuration files changes its identity (because /// an intermediate symlink is changed, because the directory is removed and /// recreated, or for some other reason). #[serde(default)] #[builder(default)] watch_configuration: bool, } impl ApplicationConfig { /// Return true if we're configured to watch for configuration changes. pub fn watch_configuration(&self) -> bool { self.watch_configuration } } /// Configuration for one or more proxy listeners. #[derive(Deserialize, Debug, Clone, Builder, Eq, PartialEq)] #[serde(deny_unknown_fields)] #[builder(build_fn(error = "ConfigBuildError"))] #[builder(derive(Deserialize))] pub struct ProxyConfig { /// Port to listen on (at localhost) for incoming SOCKS /// connections. #[serde(default = "default_socks_port")] #[builder(default = "default_socks_port()")] socks_port: Option<u16>, /// Port to lisen on (at localhost) for incoming DNS connections. #[serde(default)] #[builder(default)] dns_port: Option<u16>, } /// Return the default value for `socks_port` #[allow(clippy::unnecessary_wraps)] fn default_socks_port() -> Option<u16> { Some(9150) } impl Default for ProxyConfig { fn default() -> Self { Self::builder().build().expect("Default builder failed") } } impl ProxyConfig { /// Return a new [`ProxyConfigBuilder`]. pub fn builder() -> ProxyConfigBuilder { ProxyConfigBuilder::default() } /// Return the configured SOCKS port for this proxy configuration, /// if one is enabled. pub fn socks_port(&self) -> Option<u16> { self.socks_port } /// Return the configured DNS port for this proxy configuration, /// if one is enabled. pub fn dns_port(&self) -> Option<u16> { self.dns_port } }
crates/arti/src/cfg.rs +55 −1 Original line number Diff line number Diff line Loading @@ -4,15 +4,69 @@ use std::convert::TryFrom; use derive_builder::Builder; use serde::Deserialize; use arti_client::config::{SystemConfig, SystemConfigBuilder, TorClientConfigBuilder}; use arti_client::TorClientConfig; use arti_config::{ApplicationConfig, ApplicationConfigBuilder, ProxyConfig, ProxyConfigBuilder}; use tor_config::ConfigBuildError; use crate::{LoggingConfig, LoggingConfigBuilder}; /// Structure to hold our application configuration options #[derive(Deserialize, Debug, Default, Clone, Builder, Eq, PartialEq)] #[serde(deny_unknown_fields)] #[builder(build_fn(error = "ConfigBuildError"))] #[builder(derive(Deserialize))] pub struct ApplicationConfig { /// If true, we should watch our configuration files for changes, and reload /// our configuration when they change. /// /// Note that this feature may behave in unexpected ways if the path to the /// directory holding our configuration files changes its identity (because /// an intermediate symlink is changed, because the directory is removed and /// recreated, or for some other reason). #[serde(default)] #[builder(default)] pub(crate) watch_configuration: bool, } /// Configuration for one or more proxy listeners. #[derive(Deserialize, Debug, Clone, Builder, Eq, PartialEq)] #[serde(deny_unknown_fields)] #[builder(build_fn(error = "ConfigBuildError"))] #[builder(derive(Deserialize))] pub struct ProxyConfig { /// Port to listen on (at localhost) for incoming SOCKS /// connections. #[serde(default = "default_socks_port")] #[builder(default = "default_socks_port()")] pub(crate) socks_port: Option<u16>, /// Port to lisen on (at localhost) for incoming DNS connections. #[serde(default)] #[builder(default)] pub(crate) dns_port: Option<u16>, } /// Return the default value for `socks_port` #[allow(clippy::unnecessary_wraps)] fn default_socks_port() -> Option<u16> { Some(9150) } impl Default for ProxyConfig { fn default() -> Self { Self::builder().build().expect("Default builder failed") } } impl ProxyConfig { /// Return a new [`ProxyConfigBuilder`]. pub fn builder() -> ProxyConfigBuilder { ProxyConfigBuilder::default() } } /// Structure to hold Arti's configuration options, whether from a /// configuration file or the command line. // Loading
crates/arti/src/lib.rs +7 −7 Original line number Diff line number Diff line Loading @@ -122,7 +122,10 @@ pub mod process; pub mod socks; pub mod watch_cfg; pub use cfg::{ArtiConfig, ArtiConfigBuilder}; pub use cfg::{ ApplicationConfig, ApplicationConfigBuilder, ArtiConfig, ArtiConfigBuilder, ProxyConfig, ProxyConfigBuilder, }; pub use logging::{LoggingConfig, LoggingConfigBuilder}; use arti_client::{TorClient, TorClientConfig}; Loading Loading @@ -159,7 +162,7 @@ pub async fn run<R: Runtime>( .config(client_config) .bootstrap_behavior(OnDemand) .create_unbootstrapped()?; if arti_config.application().watch_configuration() { if arti_config.application().watch_configuration { watch_cfg::watch_for_config_changes(config_sources, arti_config, client.clone())?; } Loading Loading @@ -309,17 +312,14 @@ pub fn main_main() -> Result<()> { if let Some(proxy_matches) = matches.subcommand_matches("proxy") { let socks_port = match ( proxy_matches.value_of("socks-port"), config.proxy().socks_port(), config.proxy().socks_port, ) { (Some(p), _) => p.parse().expect("Invalid port specified"), (None, Some(s)) => s, (None, None) => 0, }; let dns_port = match ( proxy_matches.value_of("dns-port"), config.proxy().dns_port(), ) { let dns_port = match (proxy_matches.value_of("dns-port"), config.proxy().dns_port) { (Some(p), _) => p.parse().expect("Invalid port specified"), (None, Some(s)) => s, (None, None) => 0, Loading
crates/arti/src/watch_cfg.rs +1 −1 Original line number Diff line number Diff line Loading @@ -95,7 +95,7 @@ fn reconfigure<R: Runtime>( let client_config = config.tor_client_config()?; client.reconfigure(&client_config, Reconfigure::WarnOnFailures)?; if !config.application().watch_configuration() { if !config.application().watch_configuration { // Stop watching for configuration changes. return Ok(true); } Loading