From d90eda116fd8dee831dbd16b4e438913009894e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=99drzej=20Stuczy=C5=84ski?= Date: Mon, 1 Sep 2025 15:58:35 +0100 Subject: [PATCH] moved network requester into gateway --- Cargo.lock | 35 +-------- Cargo.toml | 2 - gateway/Cargo.toml | 13 +++- gateway/src/error.rs | 6 +- gateway/src/lib.rs | 2 + .../client_handling/embedded_clients/mod.rs | 2 +- .../node/internal_service_providers/mod.rs | 27 +++++-- .../network_requester}/allowed.list.sample | 0 .../network_requester}/config/mod.rs | 18 +---- .../network_requester}/config/persistence.rs | 0 .../network_requester}/core.rs | 16 ++-- .../network_requester}/error.rs | 6 -- .../network_requester/mod.rs | 11 +++ .../network_requester}/reply.rs | 0 .../request_filter/exit_policy/mod.rs | 11 +-- .../network_requester}/request_filter/mod.rs | 4 +- .../network_requester}/socks5/mod.rs | 0 .../network_requester}/socks5/tcp.rs | 4 +- gateway/src/node/mod.rs | 11 +-- nym-node/Cargo.toml | 1 - .../cli/commands/debug/reset_providers_dbs.rs | 2 +- nym-node/src/config/helpers.rs | 1 + .../src/config/old_configs/old_config_v2.rs | 2 +- nym-node/src/node/mod.rs | 6 +- service-providers/ip-packet-router/Cargo.toml | 1 - .../network-requester/Cargo.toml | 39 ---------- service-providers/network-requester/README.md | 42 ----------- .../network-requester/examples/query.rs | 74 ------------------- .../network-requester/src/lib.rs | 33 --------- 29 files changed, 84 insertions(+), 285 deletions(-) rename {service-providers/network-requester => gateway/src/node/internal_service_providers/network_requester}/allowed.list.sample (100%) rename {service-providers/network-requester/src => gateway/src/node/internal_service_providers/network_requester}/config/mod.rs (80%) rename {service-providers/network-requester/src => gateway/src/node/internal_service_providers/network_requester}/config/persistence.rs (100%) rename {service-providers/network-requester/src => gateway/src/node/internal_service_providers/network_requester}/core.rs (97%) rename {service-providers/network-requester/src => gateway/src/node/internal_service_providers/network_requester}/error.rs (92%) rename {service-providers/network-requester/src => gateway/src/node/internal_service_providers/network_requester}/reply.rs (100%) rename {service-providers/network-requester/src => gateway/src/node/internal_service_providers/network_requester}/request_filter/exit_policy/mod.rs (89%) rename {service-providers/network-requester/src => gateway/src/node/internal_service_providers/network_requester}/request_filter/mod.rs (84%) rename {service-providers/network-requester/src => gateway/src/node/internal_service_providers/network_requester}/socks5/mod.rs (100%) rename {service-providers/network-requester/src => gateway/src/node/internal_service_providers/network_requester}/socks5/tcp.rs (94%) delete mode 100644 service-providers/network-requester/Cargo.toml delete mode 100644 service-providers/network-requester/README.md delete mode 100644 service-providers/network-requester/examples/query.rs delete mode 100644 service-providers/network-requester/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index c4e9c224ef..b5622b826e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5745,6 +5745,7 @@ dependencies = [ "nym-credentials", "nym-credentials-interface", "nym-crypto", + "nym-exit-policy", "nym-gateway-requests", "nym-gateway-stats-storage", "nym-gateway-storage", @@ -5752,10 +5753,12 @@ dependencies = [ "nym-ip-packet-router", "nym-mixnet-client", "nym-network-defaults", - "nym-network-requester", "nym-node-metrics", "nym-sdk", "nym-service-provider-requests-common", + "nym-service-providers-common", + "nym-socks5-proxy-helpers", + "nym-socks5-requests", "nym-sphinx", "nym-statistics-common", "nym-task", @@ -6032,7 +6035,6 @@ dependencies = [ "nym-id", "nym-ip-packet-requests", "nym-network-defaults", - "nym-network-requester", "nym-sdk", "nym-service-provider-requests-common", "nym-service-providers-common", @@ -6204,34 +6206,6 @@ dependencies = [ "utoipa-swagger-ui", ] -[[package]] -name = "nym-network-requester" -version = "1.1.62" -dependencies = [ - "anyhow", - "async-trait", - "futures", - "humantime-serde", - "nym-bin-common", - "nym-client-core", - "nym-config", - "nym-exit-policy", - "nym-id", - "nym-network-defaults", - "nym-sdk", - "nym-service-providers-common", - "nym-socks5-proxy-helpers", - "nym-socks5-requests", - "nym-sphinx", - "nym-task", - "reqwest 0.12.22", - "serde", - "thiserror 2.0.12", - "tokio", - "tracing", - "url", -] - [[package]] name = "nym-node" version = "1.17.0" @@ -6273,7 +6247,6 @@ dependencies = [ "nym-ip-packet-router", "nym-metrics", "nym-mixnet-client", - "nym-network-requester", "nym-node-metrics", "nym-node-requests", "nym-noise", diff --git a/Cargo.toml b/Cargo.toml index c69f0e7ee0..4af24c8c94 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -133,7 +133,6 @@ members = [ "sdk/rust/nym-sdk", "service-providers/common", "service-providers/ip-packet-router", - "service-providers/network-requester", "sqlx-pool-guard", "tools/echo-server", "tools/internal/contract-state-importer/importer-cli", @@ -169,7 +168,6 @@ default-members = [ "nym-validator-rewarder", "nyx-chain-watcher", "service-providers/ip-packet-router", - "service-providers/network-requester", "tools/nymvisor", ] diff --git a/gateway/Cargo.toml b/gateway/Cargo.toml index 50325698ed..f30af5fea7 100644 --- a/gateway/Cargo.toml +++ b/gateway/Cargo.toml @@ -57,7 +57,6 @@ nym-gateway-stats-storage = { path = "../common/gateway-stats-storage" } nym-gateway-requests = { path = "../common/gateway-requests" } nym-mixnet-client = { path = "../common/client-libs/mixnet-client" } nym-network-defaults = { path = "../common/network-defaults" } -nym-network-requester = { path = "../service-providers/network-requester" } nym-sdk = { path = "../sdk/rust/nym-sdk" } nym-sphinx = { path = "../common/nymsphinx" } nym-statistics-common = { path = "../common/statistics" } @@ -71,14 +70,22 @@ nym-wireguard = { path = "../common/wireguard" } nym-wireguard-private-metadata-server = { path = "../common/wireguard-private-metadata/server" } nym-wireguard-types = { path = "../common/wireguard-types", default-features = false } -nym-authenticator-requests = { path = "../common/authenticator-requests" } nym-client-core = { path = "../common/client-core", features = ["cli"] } nym-id = { path = "../common/nym-id" } nym-service-provider-requests-common = { path = "../common/service-provider-requests-common" } - defguard_wireguard_rs = { workspace = true } +nym-service-providers-common = { path = "../service-providers/common" } + +# authenticator specific +nym-authenticator-requests = { path = "../common/authenticator-requests" } + +# network-requester specific +nym-socks5-proxy-helpers = { path = "../common/socks5/proxy-helpers" } +nym-socks5-requests = { path = "../common/socks5/requests" } +nym-exit-policy = { path = "../common/exit-policy", features = ["client"] } + [dev-dependencies] nym-gateway-storage = { path = "../common/gateway-storage", features = ["mock"] } nym-wireguard = { path = "../common/wireguard", features = ["mock"] } diff --git a/gateway/src/error.rs b/gateway/src/error.rs index 849f658a26..a7fbbad767 100644 --- a/gateway/src/error.rs +++ b/gateway/src/error.rs @@ -1,19 +1,19 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only +pub use crate::node::client_handling::websocket::connection_handler::authenticated::RequestHandlingError; use crate::node::internal_service_providers::authenticator::error::AuthenticatorError; +use crate::node::internal_service_providers::network_requester::error::NetworkRequesterError; +use nym_client_core::error::ClientCoreError; use nym_gateway_stats_storage::error::StatsStorageError; use nym_gateway_storage::error::GatewayStorageError; use nym_ip_packet_router::error::IpPacketRouterError; -use nym_network_requester::error::{ClientCoreError, NetworkRequesterError}; use nym_validator_client::nyxd::error::NyxdError; use nym_validator_client::nyxd::{AccountId, Coin}; use nym_validator_client::ValidatorClientError; use std::net::IpAddr; use thiserror::Error; -pub use crate::node::client_handling::websocket::connection_handler::authenticated::RequestHandlingError; - #[derive(Debug, Error)] pub enum GatewayError { #[error("the configured version of the gateway ({config_version}) is incompatible with the binary version ({binary_version})")] diff --git a/gateway/src/lib.rs b/gateway/src/lib.rs index 0664d95761..4c19b8adb7 100644 --- a/gateway/src/lib.rs +++ b/gateway/src/lib.rs @@ -11,4 +11,6 @@ pub mod node; pub use error::GatewayError; pub use node::GatewayTasksBuilder; +pub use node::internal_service_providers as service_providers; pub use node::internal_service_providers::authenticator as nym_authenticator; +pub use node::internal_service_providers::network_requester as nym_network_requester; diff --git a/gateway/src/node/client_handling/embedded_clients/mod.rs b/gateway/src/node/client_handling/embedded_clients/mod.rs index 95af759ed9..457782cd05 100644 --- a/gateway/src/node/client_handling/embedded_clients/mod.rs +++ b/gateway/src/node/client_handling/embedded_clients/mod.rs @@ -5,7 +5,7 @@ use crate::node::client_handling::websocket::message_receiver::{ MixMessageReceiver, MixMessageSender, }; use futures::StreamExt; -use nym_network_requester::{GatewayPacketRouter, PacketRouter}; +use nym_client_core::client::mix_traffic::transceiver::{GatewayPacketRouter, PacketRouter}; use nym_sphinx::addressing::clients::Recipient; use nym_sphinx::DestinationAddressBytes; use nym_task::TaskClient; diff --git a/gateway/src/node/internal_service_providers/mod.rs b/gateway/src/node/internal_service_providers/mod.rs index f59b2a46dc..5166eec1b5 100644 --- a/gateway/src/node/internal_service_providers/mod.rs +++ b/gateway/src/node/internal_service_providers/mod.rs @@ -6,6 +6,9 @@ use crate::node::client_handling::websocket::message_receiver::{ MixMessageReceiver, MixMessageSender, }; use crate::node::internal_service_providers::authenticator::Authenticator; +use crate::node::internal_service_providers::network_requester::{ + error::NetworkRequesterError, NRServiceProviderBuilder, +}; use crate::GatewayError; use async_trait::async_trait; use futures::channel::{mpsc, oneshot}; @@ -13,23 +16,35 @@ use nym_crypto::asymmetric::ed25519; use nym_ip_packet_router::error::IpPacketRouterError; use nym_ip_packet_router::IpPacketRouter; use nym_mixnet_client::forwarder::MixForwardingSender; -use nym_network_requester::error::NetworkRequesterError; -use nym_network_requester::NRServiceProviderBuilder; use nym_sdk::mixnet::Recipient; -use nym_sdk::{GatewayTransceiver, LocalGateway, PacketRouter}; use nym_task::TaskClient; use std::fmt::Display; use tokio::task::JoinHandle; use tracing::error; +pub use nym_client_core::client::{ + base_client::{ + non_wasm_helpers::{setup_fs_gateways_storage, setup_fs_reply_surb_backend}, + storage::{ + gateways_storage::{ + CustomGatewayDetails, GatewayDetails, GatewayRegistration, RemoteGatewayDetails, + }, + helpers::{set_active_gateway, store_gateway_details}, + GatewaysDetailsStore, OnDiskGatewaysDetails, OnDiskPersistent, + }, + }, + key_manager::persistence::OnDiskKeys, + mix_traffic::transceiver::*, +}; + pub mod authenticator; -mod network_requester; +pub mod network_requester; pub trait LocalRecipient { fn address(&self) -> Recipient; } -impl LocalRecipient for nym_network_requester::core::OnStartData { +impl LocalRecipient for network_requester::OnStartData { fn address(&self) -> Recipient { self.address } @@ -59,7 +74,7 @@ pub trait RunnableServiceProvider { #[async_trait] impl RunnableServiceProvider for NRServiceProviderBuilder { const NAME: &'static str = "network requester"; - type OnStartData = nym_network_requester::core::OnStartData; + type OnStartData = network_requester::OnStartData; type Error = NetworkRequesterError; async fn run_service_provider(self) -> Result<(), Self::Error> { diff --git a/service-providers/network-requester/allowed.list.sample b/gateway/src/node/internal_service_providers/network_requester/allowed.list.sample similarity index 100% rename from service-providers/network-requester/allowed.list.sample rename to gateway/src/node/internal_service_providers/network_requester/allowed.list.sample diff --git a/service-providers/network-requester/src/config/mod.rs b/gateway/src/node/internal_service_providers/network_requester/config/mod.rs similarity index 80% rename from service-providers/network-requester/src/config/mod.rs rename to gateway/src/node/internal_service_providers/network_requester/config/mod.rs index c3b68b5474..7a4ffbdb9f 100644 --- a/service-providers/network-requester/src/config/mod.rs +++ b/gateway/src/node/internal_service_providers/network_requester/config/mod.rs @@ -1,32 +1,26 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only -use nym_config::serde_helpers::de_maybe_stringified; use nym_network_defaults::mainnet; -use serde::{Deserialize, Serialize}; use std::path::Path; use std::time::Duration; use url::Url; -pub use crate::config::persistence::NetworkRequesterPaths; pub use nym_client_core::config::Config as BaseClientConfig; +pub use persistence::NetworkRequesterPaths; mod persistence; pub const DEFAULT_STANDARD_LIST_UPDATE_INTERVAL: Duration = Duration::from_secs(30 * 60); -#[derive(Debug, Clone, Deserialize, PartialEq, Serialize)] -#[serde(deny_unknown_fields)] +#[derive(Debug, Clone, PartialEq)] pub struct Config { - #[serde(flatten)] pub base: BaseClientConfig, - #[serde(default)] pub network_requester: NetworkRequester, pub storage_paths: NetworkRequesterPaths, - #[serde(default)] pub network_requester_debug: Debug, } @@ -51,8 +45,7 @@ impl Config { } } -#[derive(Debug, Clone, Deserialize, PartialEq, Serialize)] -#[serde(default)] +#[derive(Debug, Clone, PartialEq)] pub struct NetworkRequester { /// specifies whether this network requester should run in 'open-proxy' mode /// and thus would attempt to resolve **ANY** request it receives. @@ -63,7 +56,6 @@ pub struct NetworkRequester { pub disable_poisson_rate: bool, /// Specifies the url for an upstream source of the exit policy used by this node. - #[serde(deserialize_with = "de_maybe_stringified")] pub upstream_exit_policy_url: Option, } @@ -81,12 +73,10 @@ impl Default for NetworkRequester { } } -#[derive(Debug, Clone, Copy, Deserialize, PartialEq, Serialize)] -#[serde(default, deny_unknown_fields)] +#[derive(Debug, Clone, Copy, PartialEq)] pub struct Debug { /// Defines how often the standard allow list should get updated /// Deprecated - #[serde(with = "humantime_serde")] pub standard_list_update_interval: Duration, } diff --git a/service-providers/network-requester/src/config/persistence.rs b/gateway/src/node/internal_service_providers/network_requester/config/persistence.rs similarity index 100% rename from service-providers/network-requester/src/config/persistence.rs rename to gateway/src/node/internal_service_providers/network_requester/config/persistence.rs diff --git a/service-providers/network-requester/src/core.rs b/gateway/src/node/internal_service_providers/network_requester/core.rs similarity index 97% rename from service-providers/network-requester/src/core.rs rename to gateway/src/node/internal_service_providers/network_requester/core.rs index 0a61afd9c3..e7d5e317ce 100644 --- a/service-providers/network-requester/src/core.rs +++ b/gateway/src/node/internal_service_providers/network_requester/core.rs @@ -1,11 +1,13 @@ -// Copyright 2020-2023 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only +// Copyright 2025 - Nym Technologies SA +// SPDX-License-Identifier: Apache-2.0 -use crate::config::{BaseClientConfig, Config}; -use crate::error::NetworkRequesterError; -use crate::reply::MixnetMessage; -use crate::request_filter::RequestFilter; -use crate::{reply, socks5}; +use crate::node::internal_service_providers::network_requester::config::{ + BaseClientConfig, Config, +}; +use crate::node::internal_service_providers::network_requester::error::NetworkRequesterError; +use crate::node::internal_service_providers::network_requester::reply::MixnetMessage; +use crate::node::internal_service_providers::network_requester::request_filter::RequestFilter; +use crate::node::internal_service_providers::network_requester::{reply, socks5}; use async_trait::async_trait; use futures::channel::{mpsc, oneshot}; use futures::stream::StreamExt; diff --git a/service-providers/network-requester/src/error.rs b/gateway/src/node/internal_service_providers/network_requester/error.rs similarity index 92% rename from service-providers/network-requester/src/error.rs rename to gateway/src/node/internal_service_providers/network_requester/error.rs index e4870d64c8..bc0297ec25 100644 --- a/service-providers/network-requester/src/error.rs +++ b/gateway/src/node/internal_service_providers/network_requester/error.rs @@ -58,12 +58,6 @@ pub enum NetworkRequesterError { source: PolicyError, }, - #[error("the url provided for the upstream exit policy source is malformed: {source}")] - MalformedExitPolicyUpstreamUrl { - #[source] - source: reqwest::Error, - }, - #[error("can't setup an exit policy without any upstream urls")] NoUpstreamExitPolicy, diff --git a/gateway/src/node/internal_service_providers/network_requester/mod.rs b/gateway/src/node/internal_service_providers/network_requester/mod.rs index 5111033b0b..acc6072770 100644 --- a/gateway/src/node/internal_service_providers/network_requester/mod.rs +++ b/gateway/src/node/internal_service_providers/network_requester/mod.rs @@ -1,2 +1,13 @@ // Copyright 2025 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only + +pub mod config; +pub mod core; +pub mod error; +mod reply; +pub mod request_filter; +mod socks5; + +pub use config::Config; +pub use core::{NRServiceProvider, NRServiceProviderBuilder, OnStartData}; +pub use request_filter::RequestFilter; diff --git a/service-providers/network-requester/src/reply.rs b/gateway/src/node/internal_service_providers/network_requester/reply.rs similarity index 100% rename from service-providers/network-requester/src/reply.rs rename to gateway/src/node/internal_service_providers/network_requester/reply.rs diff --git a/service-providers/network-requester/src/request_filter/exit_policy/mod.rs b/gateway/src/node/internal_service_providers/network_requester/request_filter/exit_policy/mod.rs similarity index 89% rename from service-providers/network-requester/src/request_filter/exit_policy/mod.rs rename to gateway/src/node/internal_service_providers/network_requester/request_filter/exit_policy/mod.rs index fcdb574a44..d654af29b1 100644 --- a/service-providers/network-requester/src/request_filter/exit_policy/mod.rs +++ b/gateway/src/node/internal_service_providers/network_requester/request_filter/exit_policy/mod.rs @@ -1,12 +1,11 @@ // Copyright 2023-2024 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only -use crate::config::Config; -use crate::error::NetworkRequesterError; +use crate::node::internal_service_providers::network_requester::config::Config; +use crate::node::internal_service_providers::network_requester::error::NetworkRequesterError; use nym_exit_policy::client::get_exit_policy; use nym_exit_policy::ExitPolicy; use nym_socks5_requests::RemoteAddress; -use reqwest::IntoUrl; use tokio::net::lookup_host; use tracing::trace; use url::Url; @@ -23,11 +22,7 @@ impl From for ExitPolicyRequestFilter { } impl ExitPolicyRequestFilter { - pub(crate) async fn new_upstream(url: impl IntoUrl) -> Result { - let url = url - .into_url() - .map_err(|source| NetworkRequesterError::MalformedExitPolicyUpstreamUrl { source })?; - + pub(crate) async fn new_upstream(url: Url) -> Result { Ok(ExitPolicyRequestFilter { upstream: Some(url.clone()), policy: get_exit_policy(url).await?, diff --git a/service-providers/network-requester/src/request_filter/mod.rs b/gateway/src/node/internal_service_providers/network_requester/request_filter/mod.rs similarity index 84% rename from service-providers/network-requester/src/request_filter/mod.rs rename to gateway/src/node/internal_service_providers/network_requester/request_filter/mod.rs index 840ec5374b..8d60913d52 100644 --- a/service-providers/network-requester/src/request_filter/mod.rs +++ b/gateway/src/node/internal_service_providers/network_requester/request_filter/mod.rs @@ -1,8 +1,8 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only -use crate::config::Config; -use crate::error::NetworkRequesterError; +use crate::node::internal_service_providers::network_requester::config::Config; +use crate::node::internal_service_providers::network_requester::error::NetworkRequesterError; use nym_socks5_requests::RemoteAddress; use std::sync::Arc; use tracing::warn; diff --git a/service-providers/network-requester/src/socks5/mod.rs b/gateway/src/node/internal_service_providers/network_requester/socks5/mod.rs similarity index 100% rename from service-providers/network-requester/src/socks5/mod.rs rename to gateway/src/node/internal_service_providers/network_requester/socks5/mod.rs diff --git a/service-providers/network-requester/src/socks5/tcp.rs b/gateway/src/node/internal_service_providers/network_requester/socks5/tcp.rs similarity index 94% rename from service-providers/network-requester/src/socks5/tcp.rs rename to gateway/src/node/internal_service_providers/network_requester/socks5/tcp.rs index a1e3eabec2..5c7fd9d8de 100644 --- a/service-providers/network-requester/src/socks5/tcp.rs +++ b/gateway/src/node/internal_service_providers/network_requester/socks5/tcp.rs @@ -1,8 +1,8 @@ // Copyright 2020 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only -use crate::reply; -use crate::reply::MixnetMessage; +use crate::node::internal_service_providers::network_requester::reply; +use crate::node::internal_service_providers::network_requester::reply::MixnetMessage; use nym_service_providers_common::interface::RequestVersion; use nym_socks5_proxy_helpers::connection_controller::ConnectionReceiver; use nym_socks5_proxy_helpers::proxy_runner::{MixProxySender, ProxyRunner}; diff --git a/gateway/src/node/mod.rs b/gateway/src/node/mod.rs index 4b486529f3..6c133ccae2 100644 --- a/gateway/src/node/mod.rs +++ b/gateway/src/node/mod.rs @@ -4,8 +4,11 @@ use crate::config::Config; use crate::error::GatewayError; use crate::node::client_handling::websocket; +use crate::node::internal_service_providers::authenticator::Authenticator; +use crate::node::internal_service_providers::authenticator::{self}; +use crate::node::internal_service_providers::network_requester::{self, NRServiceProviderBuilder}; use crate::node::internal_service_providers::{ - authenticator, ExitServiceProviders, ServiceProviderBeingBuilt, SpMessageRouterBuilder, + ExitServiceProviders, ServiceProviderBeingBuilt, SpMessageRouterBuilder, }; use crate::node::stale_data_cleaner::StaleMessagesCleaner; use futures::channel::oneshot; @@ -17,7 +20,6 @@ use nym_crypto::asymmetric::ed25519; use nym_ip_packet_router::IpPacketRouter; use nym_mixnet_client::forwarder::MixForwardingSender; use nym_network_defaults::NymNetworkDetails; -use nym_network_requester::NRServiceProviderBuilder; use nym_node_metrics::events::MetricEventsSender; use nym_node_metrics::NymNodeMetrics; use nym_task::{ShutdownToken, TaskClient}; @@ -33,10 +35,9 @@ use tracing::*; use zeroize::Zeroizing; pub(crate) mod client_handling; -pub(crate) mod internal_service_providers; +pub mod internal_service_providers; mod stale_data_cleaner; -use crate::node::internal_service_providers::authenticator::Authenticator; pub use client_handling::active_clients::ActiveClientsStore; pub use nym_gateway_stats_storage::PersistentStatsStorage; pub use nym_gateway_storage::{ @@ -48,7 +49,7 @@ pub use nym_sdk::{NymApiTopologyProvider, NymApiTopologyProviderConfig, UserAgen #[derive(Debug, Clone)] pub struct LocalNetworkRequesterOpts { - pub config: nym_network_requester::Config, + pub config: network_requester::Config, pub custom_mixnet_path: Option, } diff --git a/nym-node/Cargo.toml b/nym-node/Cargo.toml index 0dceb6aedb..d5d3831fb6 100644 --- a/nym-node/Cargo.toml +++ b/nym-node/Cargo.toml @@ -102,7 +102,6 @@ nym-node-metrics = { path = "nym-node-metrics" } # nodes: nym-gateway = { path = "../gateway" } -nym-network-requester = { path = "../service-providers/network-requester" } nym-ip-packet-router = { path = "../service-providers/ip-packet-router" } diff --git a/nym-node/src/cli/commands/debug/reset_providers_dbs.rs b/nym-node/src/cli/commands/debug/reset_providers_dbs.rs index 39130686ae..0518db7b3d 100644 --- a/nym-node/src/cli/commands/debug/reset_providers_dbs.rs +++ b/nym-node/src/cli/commands/debug/reset_providers_dbs.rs @@ -5,7 +5,7 @@ use crate::cli::helpers::ConfigArgs; use crate::config::upgrade_helpers::try_load_current_config; use crate::node::helpers::load_ed25519_identity_public_key; use crate::node::ServiceProvidersData; -use nym_network_requester::{CustomGatewayDetails, GatewayDetails, GatewayRegistration}; +use nym_gateway::service_providers::{CustomGatewayDetails, GatewayDetails, GatewayRegistration}; use std::fs; #[derive(Debug, clap::Args)] diff --git a/nym-node/src/config/helpers.rs b/nym-node/src/config/helpers.rs index 7aa1f8e16e..50e81ff608 100644 --- a/nym-node/src/config/helpers.rs +++ b/nym-node/src/config/helpers.rs @@ -8,6 +8,7 @@ use nym_gateway::node::{ LocalAuthenticatorOpts, LocalIpPacketRouterOpts, LocalNetworkRequesterOpts, }; use nym_gateway::nym_authenticator; +use nym_gateway::nym_network_requester; // a temporary solution until further refactoring is made fn ephemeral_gateway_config(config: &Config) -> nym_gateway::config::Config { diff --git a/nym-node/src/config/old_configs/old_config_v2.rs b/nym-node/src/config/old_configs/old_config_v2.rs index d1b1003caf..8b675ba317 100644 --- a/nym-node/src/config/old_configs/old_config_v2.rs +++ b/nym-node/src/config/old_configs/old_config_v2.rs @@ -7,7 +7,7 @@ use crate::{config::*, error::KeyIOFailure}; use nym_client_core_config_types::DebugConfig as ClientDebugConfig; use nym_config::serde_helpers::de_maybe_port; use nym_crypto::asymmetric::{ed25519, x25519}; -use nym_network_requester::{ +use nym_gateway::service_providers::{ set_active_gateway, setup_fs_gateways_storage, store_gateway_details, CustomGatewayDetails, GatewayDetails, }; diff --git a/nym-node/src/node/mod.rs b/nym-node/src/node/mod.rs index d6ab6b428b..53a753793b 100644 --- a/nym-node/src/node/mod.rs +++ b/nym-node/src/node/mod.rs @@ -41,12 +41,12 @@ use crate::node::shared_network::{ use nym_bin_common::bin_info; use nym_crypto::asymmetric::{ed25519, x25519}; use nym_gateway::node::{ActiveClientsStore, GatewayTasksBuilder}; -use nym_mixnet_client::client::ActiveConnections; -use nym_mixnet_client::forwarder::MixForwardingSender; -use nym_network_requester::{ +use nym_gateway::service_providers::{ set_active_gateway, setup_fs_gateways_storage, store_gateway_details, CustomGatewayDetails, GatewayDetails, GatewayRegistration, }; +use nym_mixnet_client::client::ActiveConnections; +use nym_mixnet_client::forwarder::MixForwardingSender; use nym_node_metrics::events::MetricEventsSender; use nym_node_metrics::NymNodeMetrics; use nym_node_requests::api::v1::node::models::{AnnouncePorts, NodeDescription}; diff --git a/service-providers/ip-packet-router/Cargo.toml b/service-providers/ip-packet-router/Cargo.toml index c69d1caa20..1199082587 100644 --- a/service-providers/ip-packet-router/Cargo.toml +++ b/service-providers/ip-packet-router/Cargo.toml @@ -25,7 +25,6 @@ nym-exit-policy = { path = "../../common/exit-policy" } nym-id = { path = "../../common/nym-id" } nym-ip-packet-requests = { path = "../../common/ip-packet-requests" } nym-network-defaults = { path = "../../common/network-defaults" } -nym-network-requester = { path = "../network-requester" } nym-sdk = { path = "../../sdk/rust/nym-sdk" } nym-service-provider-requests-common = { path = "../../common/service-provider-requests-common" } nym-service-providers-common = { path = "../common" } diff --git a/service-providers/network-requester/Cargo.toml b/service-providers/network-requester/Cargo.toml deleted file mode 100644 index d8d8bc03b7..0000000000 --- a/service-providers/network-requester/Cargo.toml +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright 2020 - Nym Technologies SA -# SPDX-License-Identifier: GPL-3.0-only - -[package] -name = "nym-network-requester" -license = "GPL-3.0" -version = "1.1.62" -authors.workspace = true -edition.workspace = true -rust-version = "1.70" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -anyhow = { workspace = true } -async-trait = { workspace = true } -futures = { workspace = true } -humantime-serde = { workspace = true } -tracing = { workspace = true } -reqwest = { workspace = true, features = ["json"] } -serde = { workspace = true, features = ["derive"] } -thiserror = { workspace = true } -tokio = { workspace = true, features = ["net", "rt-multi-thread", "macros"] } -url = { workspace = true } - -# internal -nym-bin-common = { path = "../../common/bin-common" } -nym-client-core = { path = "../../common/client-core", features = ["fs-gateways-storage", "fs-surb-storage"] } -nym-config = { path = "../../common/config" } -nym-network-defaults = { path = "../../common/network-defaults" } -nym-sdk = { path = "../../sdk/rust/nym-sdk" } -nym-service-providers-common = { path = "../common" } -nym-socks5-proxy-helpers = { path = "../../common/socks5/proxy-helpers" } -nym-socks5-requests = { path = "../../common/socks5/requests" } -nym-sphinx = { path = "../../common/nymsphinx" } -nym-task = { path = "../../common/task" } -nym-exit-policy = { path = "../../common/exit-policy", features = ["client"] } -nym-id = { path = "../../common/nym-id" } - diff --git a/service-providers/network-requester/README.md b/service-providers/network-requester/README.md deleted file mode 100644 index ad40966e60..0000000000 --- a/service-providers/network-requester/README.md +++ /dev/null @@ -1,42 +0,0 @@ -Copyright 2022 - Nym Technologies SA -SPDX-License-Identifier: GPL-3.0-only ---> - -## License - -Copyright (C) 2022 Nym Technologies SA - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - -## Network requester - -The network requester is used to interpret socks5 client messages that need to -be proxied to a running service i.e. a host and a port. - -If you have a service that you want to expose to the mixnet, you'd need to -first run the native client and provide the client address to your users that -will use it in their socks5 configuration. - -After starting the native client, start the network requester and configure it, -setting your service's endpoint in -`${HOME}/.nym/service-providers/network-requester/allowed.list` - -Running in `open-proxy` mode allows any traffic to be proxied by the network -requester. - -### Statistics service -The network requester can be ran as a gatherer of statistics for all -the services it proxies. For that, run the binary with the -`enable-statistics` flag enabled. Anonymized statistics are then sent to -a central server, through the mixnet. \ No newline at end of file diff --git a/service-providers/network-requester/examples/query.rs b/service-providers/network-requester/examples/query.rs deleted file mode 100644 index a11eeff143..0000000000 --- a/service-providers/network-requester/examples/query.rs +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2023 - Nym Technologies SA -// SPDX-License-Identifier: Apache-2.0 - -use nym_sdk::mixnet::{ - IncludedSurbs, MixnetClient, MixnetMessageSender, Recipient, ReconstructedMessage, -}; -use nym_service_providers_common::interface::{ - ProviderInterfaceVersion, Request, Response, ResponseContent, -}; -use nym_socks5_requests::{QueryRequest, Socks5ProtocolVersion, Socks5Request, Socks5Response}; - -fn parse_response(received: Vec) -> Socks5Response { - assert_eq!(received.len(), 1); - let response: Response = Response::try_from_bytes(&received[0].message).unwrap(); - match response.content { - ResponseContent::Control(control) => panic!("unexpected control response: {control:?}"), - ResponseContent::ProviderData(data) => data, - } -} - -async fn wait_for_response(client: &mut MixnetClient) -> Socks5Response { - loop { - let next = client.wait_for_messages().await.unwrap(); - if !next.is_empty() { - return parse_response(next); - } - } -} - -#[tokio::main] -async fn main() -> anyhow::Result<()> { - //nym_bin_common::logging::setup_logging(); - let mut client = MixnetClient::connect_new().await.unwrap(); - let provider: Recipient = "AN8eLxYWFitCkMn92zim3PrPszxJZDYyFFKP7qnnAAew.8UAxL3LwQBis6WpM3GGXaqKGaVdnLCpGJWumHT6KNdTH@77TSuVU8d1oXKbPzjec2xh4i3Wj5WwUyy9Lr36sm8gZm".parse().unwrap(); - - let open_proxy_request = Request::new_provider_data( - ProviderInterfaceVersion::new_current(), - Socks5Request::new_query( - Socks5ProtocolVersion::new_current(), - QueryRequest::OpenProxy, - ), - ); - let description_request = Request::new_provider_data( - ProviderInterfaceVersion::new_current(), - Socks5Request::new_query( - Socks5ProtocolVersion::new_current(), - QueryRequest::Description, - ), - ); - println!("Sending 'OpenProxy' query..."); - client - .send_message( - provider, - open_proxy_request.into_bytes(), - IncludedSurbs::new(10), - ) - .await?; - let response = wait_for_response(&mut client).await; - println!("response to 'OpenProxy' query: {response:#?}"); - - println!("Sending 'Description' query..."); - client - .send_message( - provider, - description_request.into_bytes(), - IncludedSurbs::none(), - ) - .await?; - let response = wait_for_response(&mut client).await; - println!("response to 'Description' query: {response:#?}"); - - client.disconnect().await; - Ok(()) -} diff --git a/service-providers/network-requester/src/lib.rs b/service-providers/network-requester/src/lib.rs deleted file mode 100644 index bd1f8582e9..0000000000 --- a/service-providers/network-requester/src/lib.rs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2023 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -pub mod config; -pub mod core; -pub mod error; -mod reply; -pub mod request_filter; -mod socks5; - -pub use crate::core::{NRServiceProvider, NRServiceProviderBuilder}; -pub use config::Config; -pub use nym_client_core::{ - client::{ - base_client::{ - non_wasm_helpers::{setup_fs_gateways_storage, setup_fs_reply_surb_backend}, - storage::{ - gateways_storage::{ - CustomGatewayDetails, GatewayDetails, GatewayRegistration, RemoteGatewayDetails, - }, - helpers::{set_active_gateway, store_gateway_details}, - GatewaysDetailsStore, OnDiskGatewaysDetails, OnDiskPersistent, - }, - }, - key_manager::persistence::OnDiskKeys, - mix_traffic::transceiver::*, - }, - init::{ - generate_new_client_keys, setup_gateway, - types::{GatewaySelectionSpecification, GatewaySetup, InitResults, InitialisationResult}, - }, -}; -pub use request_filter::RequestFilter;