From 8fa213502da054a7edc451ad2d0e4a017ae8be0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=99drzej=20Stuczy=C5=84ski?= Date: Thu, 28 Mar 2024 08:11:57 +0000 Subject: [PATCH] removed force register flag + improved error message on no gateways available --- Cargo.lock | 80 +++++++++---------- .../src/cli_helpers/client_add_gateway.rs | 30 +++---- .../src/cli_helpers/client_init.rs | 1 - common/client-core/src/error.rs | 3 + common/client-core/src/init/mod.rs | 7 +- common/client-core/src/init/types.rs | 6 +- common/wasm/client-core/src/helpers.rs | 1 - nym-connect/desktop/Cargo.lock | 30 +++---- .../desktop/src-tauri/src/config/mod.rs | 1 - sdk/lib/socks5-listener/src/lib.rs | 1 - sdk/rust/nym-sdk/src/mixnet/client.rs | 1 - 11 files changed, 70 insertions(+), 91 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c809facc92..ea89e7ec2a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -389,16 +389,6 @@ dependencies = [ "futures-core", ] -[[package]] -name = "async-file-watcher" -version = "0.1.0" -dependencies = [ - "futures", - "log", - "notify", - "tokio", -] - [[package]] name = "async-io" version = "1.13.0" @@ -3301,20 +3291,6 @@ dependencies = [ "itoa", ] -[[package]] -name = "http-api-client" -version = "0.1.0" -dependencies = [ - "async-trait", - "reqwest", - "serde", - "serde_json", - "thiserror", - "tracing", - "url", - "wasmtimer", -] - [[package]] name = "http-body" version = "0.4.5" @@ -3943,17 +3919,6 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -[[package]] -name = "ledger" -version = "0.1.0" -dependencies = [ - "bip32", - "k256", - "ledger-transport", - "ledger-transport-hid", - "thiserror", -] - [[package]] name = "ledger-apdu" version = "0.10.0" @@ -4596,9 +4561,9 @@ version = "1.3.0-rc.0" dependencies = [ "async-trait", "futures", - "http-api-client", "js-sys", "nym-bin-common", + "nym-http-api-client", "nym-ordered-buffer", "nym-service-providers-common", "nym-socks5-requests", @@ -5073,6 +5038,16 @@ dependencies = [ "ts-rs", ] +[[package]] +name = "nym-async-file-watcher" +version = "0.1.0" +dependencies = [ + "futures", + "log", + "notify", + "tokio", +] + [[package]] name = "nym-bandwidth-controller" version = "0.1.0" @@ -5729,6 +5704,20 @@ dependencies = [ "serde", ] +[[package]] +name = "nym-http-api-client" +version = "0.1.0" +dependencies = [ + "async-trait", + "reqwest", + "serde", + "serde_json", + "thiserror", + "tracing", + "url", + "wasmtimer", +] + [[package]] name = "nym-id" version = "0.1.0" @@ -5819,6 +5808,17 @@ dependencies = [ "url", ] +[[package]] +name = "nym-ledger" +version = "0.1.0" +dependencies = [ + "bip32", + "k256", + "ledger-transport", + "ledger-transport-hid", + "thiserror", +] + [[package]] name = "nym-metrics" version = "0.1.0" @@ -5983,7 +5983,6 @@ version = "1.1.33" dependencies = [ "addr", "anyhow", - "async-file-watcher", "async-trait", "bs58 0.5.0", "clap 4.4.7", @@ -5992,6 +5991,7 @@ dependencies = [ "humantime-serde", "ipnetwork 0.20.0", "log", + "nym-async-file-watcher", "nym-bin-common", "nym-client-core", "nym-client-websocket-requests", @@ -6086,10 +6086,10 @@ version = "0.1.0" dependencies = [ "async-trait", "base64 0.21.4", - "http-api-client", "nym-bin-common", "nym-crypto", "nym-exit-policy", + "nym-http-api-client", "nym-wireguard-types", "schemars", "serde", @@ -6667,7 +6667,6 @@ dependencies = [ "eyre", "flate2", "futures", - "http-api-client", "itertools 0.10.5", "log", "nym-api-requests", @@ -6678,6 +6677,7 @@ dependencies = [ "nym-contracts-common", "nym-ephemera-common", "nym-group-contract-common", + "nym-http-api-client", "nym-mixnet-contract-common", "nym-multisig-contract-common", "nym-name-service-common", @@ -6803,7 +6803,6 @@ name = "nymvisor" version = "0.1.0" dependencies = [ "anyhow", - "async-file-watcher", "bytes", "clap 4.4.7", "dotenvy", @@ -6813,6 +6812,7 @@ dependencies = [ "humantime 2.1.0", "humantime-serde", "nix 0.27.1", + "nym-async-file-watcher", "nym-bin-common", "nym-config", "nym-task", diff --git a/common/client-core/src/cli_helpers/client_add_gateway.rs b/common/client-core/src/cli_helpers/client_add_gateway.rs index ba37d20523..f28cbabd59 100644 --- a/common/client-core/src/cli_helpers/client_add_gateway.rs +++ b/common/client-core/src/cli_helpers/client_add_gateway.rs @@ -39,11 +39,6 @@ pub struct CommonClientAddGatewayArgs { #[cfg_attr(feature = "cli", clap(long, conflicts_with = "gateway"))] pub latency_based_selection: bool, - /// Force register gateway. WARNING: this will overwrite any existing keys for the given id, - /// potentially causing loss of access. - #[cfg_attr(feature = "cli", clap(long))] - pub force_register_gateway: bool, - /// Specify whether this new gateway should be set as the active one #[cfg_attr(feature = "cli", clap(long, default_value_t = true))] pub set_active: bool, @@ -80,11 +75,6 @@ where let key_store = OnDiskKeys::new(paths.keys.clone()); let details_store = setup_fs_gateways_storage(&paths.gateway_registrations).await?; - let user_wants_force_register = common_args.force_register_gateway; - if user_wants_force_register { - eprintln!("Instructed to force registering gateway. This might overwrite keys!"); - } - // Attempt to use a user-provided gateway, if possible let user_chosen_gateway_id = common_args.gateway_id; log::debug!("User chosen gateway id: {user_chosen_gateway_id:?}"); @@ -101,7 +91,7 @@ where // if user provided gateway id (and we can't overwrite data), make sure we're not trying to register // with a known gateway if let Some(user_chosen) = user_chosen_gateway_id { - if !common_args.force_register_gateway && registered_gateways.contains(&user_chosen) { + if registered_gateways.contains(&user_chosen) { return Err(ClientCoreError::AlreadyRegistered { gateway_id: user_chosen.to_base58_string(), } @@ -126,20 +116,18 @@ where // since we're registering with a brand new gateway, // make sure the list of available gateways doesn't overlap the list of known gateways - let available_gateways = if common_args.force_register_gateway { - // if we're force registering, all bets are off - available_gateways - } else { - available_gateways - .into_iter() - .filter(|g| !registered_gateways.contains(g.identity())) - .collect() - }; + let available_gateways = available_gateways + .into_iter() + .filter(|g| !registered_gateways.contains(g.identity())) + .collect::>(); + + if available_gateways.is_empty() { + return Err(ClientCoreError::NoNewGatewaysAvailable.into()) + } let gateway_setup = GatewaySetup::New { specification: selection_spec, available_gateways, - overwrite_data: common_args.force_register_gateway, wg_tun_address: None, }; diff --git a/common/client-core/src/cli_helpers/client_init.rs b/common/client-core/src/cli_helpers/client_init.rs index f765117d35..019416fb2d 100644 --- a/common/client-core/src/cli_helpers/client_init.rs +++ b/common/client-core/src/cli_helpers/client_init.rs @@ -169,7 +169,6 @@ where let gateway_setup = GatewaySetup::New { specification: selection_spec, available_gateways, - overwrite_data: false, wg_tun_address: None, }; diff --git a/common/client-core/src/error.rs b/common/client-core/src/error.rs index 67382c468e..56b95c2a43 100644 --- a/common/client-core/src/error.rs +++ b/common/client-core/src/error.rs @@ -38,6 +38,9 @@ pub enum ClientCoreError { #[error("no gateways on network")] NoGatewaysOnNetwork, + + #[error("there are no more new gateways on the network - it seems this client has already registered with all nodes it could have")] + NoNewGatewaysAvailable, #[error("list of nym apis is empty")] ListOfNymApisIsEmpty, diff --git a/common/client-core/src/init/mod.rs b/common/client-core/src/init/mod.rs index 388902045f..a45c87da6a 100644 --- a/common/client-core/src/init/mod.rs +++ b/common/client-core/src/init/mod.rs @@ -50,7 +50,6 @@ where async fn setup_new_gateway( key_store: &K, details_store: &D, - overwrite_data: bool, selection_specification: GatewaySelectionSpecification, available_gateways: Vec, wg_tun_ip_address: Option, @@ -94,8 +93,8 @@ where // check if we already have details associated with this particular gateway // and if so, see if we can overwrite it let selected_id = selected_gateway.gateway_id().to_base58_string(); - if has_gateway_details(details_store, &selected_id).await? && !overwrite_data { - return Err(ClientCoreError::ForbiddenGatewayKeyOverwrite { + if has_gateway_details(details_store, &selected_id).await? { + return Err(ClientCoreError::AlreadyRegistered { gateway_id: selected_id, }); } @@ -208,14 +207,12 @@ where GatewaySetup::New { specification, available_gateways, - overwrite_data, wg_tun_address, } => { log::trace!("GatewaySetup::New with spec: {specification:?}"); setup_new_gateway( key_store, details_store, - overwrite_data, specification, available_gateways, wg_tun_address, diff --git a/common/client-core/src/init/types.rs b/common/client-core/src/init/types.rs index f8f5d93fdb..b9c21b128a 100644 --- a/common/client-core/src/init/types.rs +++ b/common/client-core/src/init/types.rs @@ -244,10 +244,7 @@ pub enum GatewaySetup { // TODO: seems to be a bit inefficient to pass them by value available_gateways: Vec, - - /// Specifies whether old data should be overwritten whilst setting up new gateway client. - overwrite_data: bool, - + /// Implicitly specify whether the chosen gateway must use wireguard mode by setting the tun address. /// /// Currently this is imperfect solution as I'd imagine this address could vary from gateway to gateway @@ -287,7 +284,6 @@ impl GatewaySetup { additional_data: None, }, available_gateways: vec![], - overwrite_data: false, wg_tun_address: None, } } diff --git a/common/wasm/client-core/src/helpers.rs b/common/wasm/client-core/src/helpers.rs index a64341907c..80c9e90135 100644 --- a/common/wasm/client-core/src/helpers.rs +++ b/common/wasm/client-core/src/helpers.rs @@ -106,7 +106,6 @@ pub async fn setup_gateway_wasm( GatewaySetup::New { specification: selection_spec, available_gateways: gateways.to_vec(), - overwrite_data: false, wg_tun_address: None, } }; diff --git a/nym-connect/desktop/Cargo.lock b/nym-connect/desktop/Cargo.lock index 3f3c7fd428..11e7b040c7 100644 --- a/nym-connect/desktop/Cargo.lock +++ b/nym-connect/desktop/Cargo.lock @@ -2844,20 +2844,6 @@ dependencies = [ "itoa 1.0.9", ] -[[package]] -name = "http-api-client" -version = "0.1.0" -dependencies = [ - "async-trait", - "reqwest", - "serde", - "serde_json", - "thiserror", - "tracing", - "url", - "wasmtimer", -] - [[package]] name = "http-body" version = "0.4.5" @@ -4211,6 +4197,20 @@ dependencies = [ "serde", ] +[[package]] +name = "nym-http-api-client" +version = "0.1.0" +dependencies = [ + "async-trait", + "reqwest", + "serde", + "serde_json", + "thiserror", + "tracing", + "url", + "wasmtimer", +] + [[package]] name = "nym-id" version = "0.1.0" @@ -4636,7 +4636,6 @@ dependencies = [ "eyre", "flate2", "futures", - "http-api-client", "itertools", "log", "nym-api-requests", @@ -4647,6 +4646,7 @@ dependencies = [ "nym-contracts-common", "nym-ephemera-common", "nym-group-contract-common", + "nym-http-api-client", "nym-mixnet-contract-common", "nym-multisig-contract-common", "nym-name-service-common", diff --git a/nym-connect/desktop/src-tauri/src/config/mod.rs b/nym-connect/desktop/src-tauri/src/config/mod.rs index 83c72dde79..79b70f814b 100644 --- a/nym-connect/desktop/src-tauri/src/config/mod.rs +++ b/nym-connect/desktop/src-tauri/src/config/mod.rs @@ -220,7 +220,6 @@ pub async fn init_socks5_config(provider_address: String, chosen_gateway_id: Str GatewaySetup::New { specification: selection_spec, available_gateways, - overwrite_data: true, wg_tun_address: None, } } else { diff --git a/sdk/lib/socks5-listener/src/lib.rs b/sdk/lib/socks5-listener/src/lib.rs index a4059a14d8..a0127d713c 100644 --- a/sdk/lib/socks5-listener/src/lib.rs +++ b/sdk/lib/socks5-listener/src/lib.rs @@ -276,7 +276,6 @@ where must_use_tls: false, }, available_gateways: current_gateways(&mut rng, &nym_apis).await?, - overwrite_data: false, wg_tun_address: None, }); diff --git a/sdk/rust/nym-sdk/src/mixnet/client.rs b/sdk/rust/nym-sdk/src/mixnet/client.rs index b59b7d20bb..ec438e40ef 100644 --- a/sdk/rust/nym-sdk/src/mixnet/client.rs +++ b/sdk/rust/nym-sdk/src/mixnet/client.rs @@ -434,7 +434,6 @@ where Ok(GatewaySetup::New { specification: selection_spec, available_gateways, - overwrite_data: !self.config.key_mode.is_keep(), wg_tun_address: self.wireguard_tun_address(), }) }