From 14a9991fa4f9ea786ed0f04c829df0d8216c1ec3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bogdan-=C8=98tefan=20Neac=C8=99u?= Date: Thu, 24 Aug 2023 13:23:56 +0300 Subject: [PATCH] Use clap arguments --- Cargo.lock | 3 ++ nym-connect/payment-manager/Cargo.toml | 3 ++ nym-connect/payment-manager/src/cli.rs | 31 +++++++++++++++++++++ nym-connect/payment-manager/src/client.rs | 7 +++-- nym-connect/payment-manager/src/http/mod.rs | 8 +++--- nym-connect/payment-manager/src/main.rs | 7 +++-- 6 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 nym-connect/payment-manager/src/cli.rs diff --git a/Cargo.lock b/Cargo.lock index 131344d19f..be0e86e942 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6578,6 +6578,9 @@ name = "nym-payment-manager" version = "0.1.0" dependencies = [ "anyhow", + "bip39", + "clap 4.3.21", + "lazy_static", "log", "nym-bin-common", "nym-network-defaults", diff --git a/nym-connect/payment-manager/Cargo.toml b/nym-connect/payment-manager/Cargo.toml index 06c452a21b..b8af7709d7 100644 --- a/nym-connect/payment-manager/Cargo.toml +++ b/nym-connect/payment-manager/Cargo.toml @@ -7,6 +7,9 @@ edition = "2021" [dependencies] anyhow = "1.0" +bip39 = { workspace = true } +clap = { version = "4.0", features = ["cargo", "derive"] } +lazy_static = "1.4.0" log = { workspace = true } schemars = { version = "0.8", features = ["preserve_order"] } rocket = { version = "0.5.0-rc.2", features = ["json"] } diff --git a/nym-connect/payment-manager/src/cli.rs b/nym-connect/payment-manager/src/cli.rs new file mode 100644 index 0000000000..a6f1c5c1fe --- /dev/null +++ b/nym-connect/payment-manager/src/cli.rs @@ -0,0 +1,31 @@ +// Copyright 2023 - Nym Technologies SA +// SPDX-License-Identifier: Apache-2.0 + +use clap::Parser; +use lazy_static::lazy_static; +use nym_bin_common::bin_info; + +lazy_static! { + pub static ref PRETTY_BUILD_INFORMATION: String = bin_info!().pretty_print(); +} + +// Helper for passing LONG_VERSION to clap +fn pretty_build_info_static() -> &'static str { + &PRETTY_BUILD_INFORMATION +} + +#[derive(Parser)] +#[clap(author = "Nymtech", version, long_version = pretty_build_info_static(), about)] +pub(crate) struct CliArgs { + /// Path pointing to an env file that configures the Payment Manager. + #[clap(short, long)] + pub(crate) config_env_file: Option, + + /// Mnemonic of the Nym account holding the funds to be converted after successful payments + #[clap(short, long)] + pub(crate) mnemonic: bip39::Mnemonic, + + /// Path pointing to the SQLite database containing payment data. + #[clap(short, long)] + pub(crate) db_path: std::path::PathBuf, +} diff --git a/nym-connect/payment-manager/src/client.rs b/nym-connect/payment-manager/src/client.rs index d871ffaf8e..b704710b27 100644 --- a/nym-connect/payment-manager/src/client.rs +++ b/nym-connect/payment-manager/src/client.rs @@ -16,7 +16,10 @@ impl Clone for Client { } impl Client { - pub(crate) fn new(details: &NymNetworkDetails) -> Result { + pub(crate) fn new( + details: &NymNetworkDetails, + mnemonic: &bip39::Mnemonic, + ) -> Result { let client_config = nyxd::Config::try_from_nym_network_details(details)?; let endpoint = details .endpoints @@ -28,7 +31,7 @@ impl Client { let inner = DirectSigningHttpRpcNyxdClient::connect_with_mnemonic( client_config, endpoint, - "".parse().unwrap(), + mnemonic.clone(), )?; Ok(Client(Arc::new(RwLock::new(inner)))) diff --git a/nym-connect/payment-manager/src/http/mod.rs b/nym-connect/payment-manager/src/http/mod.rs index dc2f8f6290..6b3d2e71df 100644 --- a/nym-connect/payment-manager/src/http/mod.rs +++ b/nym-connect/payment-manager/src/http/mod.rs @@ -1,6 +1,7 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 +use crate::cli::CliArgs; use crate::client::Client; use crate::state::{Config, State}; use crate::storage::Storage; @@ -13,7 +14,6 @@ use rocket_okapi::okapi::openapi3::OpenApi; use rocket_okapi::settings::OpenApiSettings; use rocket_okapi::swagger_ui::make_swagger_ui; use rocket_okapi::{mount_endpoints_and_merged_docs, openapi_get_routes_spec}; -use std::path::PathBuf; pub(crate) mod openapi; pub(crate) mod routes; @@ -40,10 +40,10 @@ fn setup_cors() -> Result { Ok(cors) } -pub(crate) async fn setup_rocket() -> Result> { +pub(crate) async fn setup_rocket(args: &CliArgs) -> Result> { let openapi_settings = rocket_okapi::settings::OpenApiSettings::default(); let mut rocket = rocket::build(); - let storage = Storage::init(PathBuf::from("/tmp/payments/payments.db")).await?; + let storage = Storage::init(&args.db_path).await?; mount_endpoints_and_merged_docs! { rocket, @@ -54,7 +54,7 @@ pub(crate) async fn setup_rocket() -> Result> { } let details = NymNetworkDetails::new_from_env(); - let client = Client::new(&details)?; + let client = Client::new(&details, &args.mnemonic)?; let config = Config::new(details.chain_details.mix_denom.base.clone()); let rocket = rocket .manage(State::new(storage, client, config)) diff --git a/nym-connect/payment-manager/src/main.rs b/nym-connect/payment-manager/src/main.rs index e287564831..69135fb0cc 100644 --- a/nym-connect/payment-manager/src/main.rs +++ b/nym-connect/payment-manager/src/main.rs @@ -1,11 +1,13 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 +use clap::Parser; use nym_bin_common::logging::setup_logging; use nym_network_defaults::setup_env; use nym_task::TaskManager; use std::error::Error; +mod cli; mod client; mod error; mod http; @@ -15,10 +17,11 @@ mod storage; #[tokio::main] async fn main() -> Result<(), Box> { setup_logging(); - setup_env(None); + let args = cli::CliArgs::parse(); + setup_env(args.config_env_file.as_ref()); // let's build our rocket! - let rocket = http::setup_rocket().await?; + let rocket = http::setup_rocket(&args).await?; // setup shutdowns let shutdown = TaskManager::new(10);