diff --git a/mixnode/src/commands/describe.rs b/mixnode/src/commands/describe.rs index 93eb9bdf68..2bab09b8c9 100644 --- a/mixnode/src/commands/describe.rs +++ b/mixnode/src/commands/describe.rs @@ -1,6 +1,7 @@ -use crate::commands::*; use crate::config::Config; use crate::node::node_description::NodeDescription; +use clap::Args; +use colored::Colorize; use config::NymConfig; use std::io; use std::io::Write; diff --git a/mixnode/src/commands/init.rs b/mixnode/src/commands/init.rs index 1b6850c270..68810483fa 100644 --- a/mixnode/src/commands/init.rs +++ b/mixnode/src/commands/init.rs @@ -1,13 +1,15 @@ // Copyright 2020 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -use crate::commands::*; -use crate::config::persistence::pathfinder::MixNodePathfinder; use crate::config::Config; use crate::node::MixNode; +use crate::{commands::override_config, config::persistence::pathfinder::MixNodePathfinder}; +use clap::Args; use config::NymConfig; use crypto::asymmetric::{encryption, identity}; +use super::OverrideConfig; + #[derive(Args, Clone)] pub(crate) struct Init { /// Initialise the mixnode diff --git a/mixnode/src/commands/mod.rs b/mixnode/src/commands/mod.rs index 46d5ffe66b..ff59940417 100644 --- a/mixnode/src/commands/mod.rs +++ b/mixnode/src/commands/mod.rs @@ -3,18 +3,18 @@ use std::process; -use crate::config::Config; -use clap::{Args, Subcommand}; +use crate::{config::Config, Cli}; +use clap::Subcommand; use colored::Colorize; use crypto::bech32_address_validation; use url::Url; -pub(crate) mod describe; -pub(crate) mod init; -pub(crate) mod node_details; -pub(crate) mod run; -pub(crate) mod sign; -pub(crate) mod upgrade; +mod describe; +mod init; +mod node_details; +mod run; +mod sign; +mod upgrade; #[derive(Subcommand)] pub(crate) enum Commands { @@ -49,6 +49,17 @@ struct OverrideConfig { wallet_address: Option, } +pub(crate) async fn execute(args: Cli) { + match &args.command { + Commands::Describe(m) => describe::execute(m), + Commands::Init(m) => init::execute(m).await, + Commands::Run(m) => run::execute(m).await, + Commands::Sign(m) => sign::execute(m), + Commands::Upgrade(m) => upgrade::execute(m), + Commands::NodeDetails(m) => node_details::execute(m), + } +} + fn parse_validators(raw: &str) -> Vec { raw.split(',') .map(|raw_validator| { diff --git a/mixnode/src/commands/node_details.rs b/mixnode/src/commands/node_details.rs index 0dcfadf435..471b3bde94 100644 --- a/mixnode/src/commands/node_details.rs +++ b/mixnode/src/commands/node_details.rs @@ -1,9 +1,9 @@ // Copyright 2021 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -use crate::commands::*; use crate::config::Config; use crate::node::MixNode; +use clap::Args; use config::NymConfig; #[derive(Args)] diff --git a/mixnode/src/commands/run.rs b/mixnode/src/commands/run.rs index 11c7346378..49b372a211 100644 --- a/mixnode/src/commands/run.rs +++ b/mixnode/src/commands/run.rs @@ -1,11 +1,14 @@ // Copyright 2020 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -use crate::commands::*; +use crate::commands::{override_config, version_check}; use crate::config::Config; use crate::node::MixNode; +use clap::Args; use config::NymConfig; +use super::OverrideConfig; + #[derive(Args, Clone)] pub(crate) struct Run { /// Id of the nym-mixnode we want to run diff --git a/mixnode/src/commands/sign.rs b/mixnode/src/commands/sign.rs index c7e697b746..46158a9b42 100644 --- a/mixnode/src/commands/sign.rs +++ b/mixnode/src/commands/sign.rs @@ -3,14 +3,17 @@ use std::convert::TryFrom; -use crate::commands::*; +use crate::commands::validate_bech32_address_or_exit; use crate::config::{persistence::pathfinder::MixNodePathfinder, Config}; +use crate::node::MixNode; use anyhow::{anyhow, Result}; -use clap::ArgGroup; +use clap::{ArgGroup, Args}; use config::NymConfig; use crypto::asymmetric::identity; use log::error; +use super::version_check; + #[derive(Args, Clone)] #[clap(group(ArgGroup::new("sign").required(true).args(&["address", "text"])))] pub(crate) struct Sign { @@ -49,15 +52,6 @@ impl TryFrom for SignedTarget { } } -pub fn load_identity_keys(pathfinder: &MixNodePathfinder) -> identity::KeyPair { - let identity_keypair: identity::KeyPair = pemstore::load_keypair(&pemstore::KeyPairPath::new( - pathfinder.private_identity_key().to_owned(), - pathfinder.public_identity_key().to_owned(), - )) - .expect("Failed to read stored identity key files"); - identity_keypair -} - fn print_signed_address(private_key: &identity::PrivateKey, raw_address: &str) { let trimmed = raw_address.trim(); validate_bech32_address_or_exit(trimmed); @@ -109,7 +103,7 @@ pub(crate) fn execute(args: &Sign) { } }; let pathfinder = MixNodePathfinder::new_from_config(&config); - let identity_keypair = load_identity_keys(&pathfinder); + let identity_keypair = MixNode::load_identity_keys(&pathfinder); match signed_target { SignedTarget::Text(text) => print_signed_text(identity_keypair.private_key(), &text), diff --git a/mixnode/src/commands/upgrade.rs b/mixnode/src/commands/upgrade.rs index 7abbbaf02c..0b0241e03c 100644 --- a/mixnode/src/commands/upgrade.rs +++ b/mixnode/src/commands/upgrade.rs @@ -1,8 +1,8 @@ // Copyright 2020 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -use crate::commands::*; use crate::config::{missing_string_value, Config}; +use clap::Args; use config::defaults::default_api_endpoints; use config::NymConfig; use std::fmt::Display; diff --git a/mixnode/src/config/mod.rs b/mixnode/src/config/mod.rs index 6622ec8e1f..7d3b520da9 100644 --- a/mixnode/src/config/mod.rs +++ b/mixnode/src/config/mod.rs @@ -312,7 +312,7 @@ impl Config { } #[derive(Debug, Deserialize, PartialEq, Serialize)] -pub struct MixNode { +struct MixNode { /// Version of the mixnode for which this configuration was created. #[serde(default = "missing_string_value")] version: String, @@ -410,11 +410,11 @@ impl Default for MixNode { #[derive(Debug, Default, Deserialize, PartialEq, Serialize)] #[serde(deny_unknown_fields)] -pub struct Logging {} +struct Logging {} #[derive(Debug, Deserialize, PartialEq, Serialize)] #[serde(deny_unknown_fields)] -pub struct Verloc { +struct Verloc { /// Specifies number of echo packets sent to each node during a measurement run. packets_per_node: usize, @@ -454,7 +454,7 @@ impl Default for Verloc { #[derive(Debug, Deserialize, PartialEq, Serialize)] #[serde(default)] -pub struct Debug { +struct Debug { /// Delay between each subsequent node statistics being logged to the console #[serde(with = "humantime_serde")] node_stats_logging_delay: Duration, diff --git a/mixnode/src/main.rs b/mixnode/src/main.rs index 4bf0bf86dd..7684dab801 100644 --- a/mixnode/src/main.rs +++ b/mixnode/src/main.rs @@ -34,18 +34,7 @@ async fn main() { println!("{}", banner()); let args = Cli::parse(); - execute(args).await; -} - -async fn execute(args: Cli) { - match &args.command { - commands::Commands::Describe(m) => commands::describe::execute(m), - commands::Commands::Init(m) => commands::init::execute(m).await, - commands::Commands::Run(m) => commands::run::execute(m).await, - commands::Commands::Sign(m) => commands::sign::execute(m), - commands::Commands::Upgrade(m) => commands::upgrade::execute(m), - commands::Commands::NodeDetails(m) => commands::node_details::execute(m), - } + commands::execute(args).await; } fn banner() -> String { diff --git a/mixnode/src/node/mod.rs b/mixnode/src/node/mod.rs index 1b7dff0f2d..f270d28bc2 100644 --- a/mixnode/src/node/mod.rs +++ b/mixnode/src/node/mod.rs @@ -1,7 +1,6 @@ // Copyright 2020 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -use crate::commands::sign::load_identity_keys; use crate::commands::validate_bech32_address_or_exit; use crate::config::persistence::pathfinder::MixNodePathfinder; use crate::config::Config; @@ -28,11 +27,11 @@ use std::process; use std::sync::Arc; use version_checker::parse_version; -pub(crate) mod http; +mod http; mod listener; pub(crate) mod node_description; -pub(crate) mod node_statistics; -pub(crate) mod packet_delayforwarder; +mod node_statistics; +mod packet_delayforwarder; // the MixNode will live for whole duration of this program pub struct MixNode { @@ -60,7 +59,7 @@ impl MixNode { } /// Loads identity keys stored on disk - fn load_identity_keys(pathfinder: &MixNodePathfinder) -> identity::KeyPair { + pub(crate) fn load_identity_keys(pathfinder: &MixNodePathfinder) -> identity::KeyPair { let identity_keypair: identity::KeyPair = pemstore::load_keypair(&pemstore::KeyPairPath::new( pathfinder.private_identity_key().to_owned(), @@ -85,7 +84,7 @@ impl MixNode { /// Exits if the address isn't valid (which should protect against manual edits). fn generate_owner_signature(&self) -> String { let pathfinder = MixNodePathfinder::new_from_config(&self.config); - let identity_keypair = load_identity_keys(&pathfinder); + let identity_keypair = Self::load_identity_keys(&pathfinder); let address = self.config.get_wallet_address(); validate_bech32_address_or_exit(address); let verification_code = identity_keypair.private_key().sign_text(address);