create '/api/v1/auxiliary-details' that exposes nodes location

This commit is contained in:
Jędrzej Stuczyński
2024-05-20 10:57:37 +01:00
parent be6c63723c
commit 3077c2ea8d
10 changed files with 97 additions and 3 deletions
@@ -0,0 +1,31 @@
// Copyright 2024 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: GPL-3.0-only
use crate::api::{FormattedResponse, OutputParams};
use crate::router::types::RequestError;
use axum::extract::Query;
use nym_node_requests::api::v1::node::models::AuxiliaryDetails;
/// Returns auxiliary details of this node.
#[utoipa::path(
get,
path = "/auxiliary-details",
context_path = "/api/v1",
tag = "Node",
responses(
(status = 200, content(
("application/json" = AuxiliaryDetails),
("application/yaml" = AuxiliaryDetails)
)),
),
params(OutputParams)
)]
pub(crate) async fn auxiliary(
description: AuxiliaryDetails,
Query(output): Query<OutputParams>,
) -> Result<AuxiliaryDetailsResponse, RequestError> {
let output = output.output.unwrap_or_default();
Ok(output.to_response(description))
}
pub type AuxiliaryDetailsResponse = FormattedResponse<AuxiliaryDetails>;
@@ -1,6 +1,7 @@
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: GPL-3.0-only
use crate::api::v1::node::auxiliary::auxiliary;
use crate::api::v1::node::build_information::build_information;
use crate::api::v1::node::description::description;
use crate::api::v1::node::hardware::host_system;
@@ -11,6 +12,7 @@ use axum::Router;
use nym_node_requests::api::v1::node::models;
use nym_node_requests::routes::api::v1;
pub mod auxiliary;
pub mod build_information;
pub mod description;
pub mod hardware;
@@ -24,6 +26,7 @@ pub struct Config {
pub system_info: Option<models::HostSystem>,
pub roles: models::NodeRoles,
pub description: models::NodeDescription,
pub auxiliary_details: models::AuxiliaryDetails,
}
pub(super) fn routes<S: Send + Sync + 'static + Clone>(config: Config) -> Router<S> {
@@ -63,4 +66,11 @@ pub(super) fn routes<S: Send + Sync + 'static + Clone>(config: Config) -> Router
move |query| description(node_description, query)
}),
)
.route(
v1::AUXILIARY,
get({
let auxiliary_details = config.auxiliary_details;
move |query| auxiliary(auxiliary_details, query)
}),
)
}
@@ -19,6 +19,7 @@ use utoipa_swagger_ui::SwaggerUi;
api::v1::node::roles::roles,
api::v1::node::hardware::host_system,
api::v1::node::description::description,
api::v1::node::auxiliary::auxiliary,
api::v1::metrics::mixing::mixing_stats,
api::v1::metrics::verloc::verloc_stats,
api::v1::metrics::prometheus::prometheus_metrics,
@@ -52,6 +53,7 @@ use utoipa_swagger_ui::SwaggerUi;
api_requests::v1::node::models::Cpu,
api_requests::v1::node::models::CryptoHardware,
api_requests::v1::node::models::NodeDescription,
api_requests::v1::node::models::AuxiliaryDetails,
api_requests::v1::metrics::models::MixingStats,
api_requests::v1::metrics::models::VerlocStats,
api_requests::v1::metrics::models::VerlocResult,
+8 -1
View File
@@ -15,7 +15,7 @@ use nym_node_requests::api::v1::mixnode::models::Mixnode;
use nym_node_requests::api::v1::network_requester::exit_policy::models::UsedExitPolicy;
use nym_node_requests::api::v1::network_requester::models::NetworkRequester;
use nym_node_requests::api::v1::node::models;
use nym_node_requests::api::v1::node::models::{HostSystem, NodeDescription};
use nym_node_requests::api::v1::node::models::{AuxiliaryDetails, HostSystem, NodeDescription};
use nym_node_requests::api::SignedHostInformation;
use nym_node_requests::routes;
use std::net::SocketAddr;
@@ -47,6 +47,7 @@ impl Config {
system_info: None,
roles: Default::default(),
description: Default::default(),
auxiliary_details: Default::default(),
},
metrics: Default::default(),
gateway: Default::default(),
@@ -88,6 +89,12 @@ impl Config {
self
}
#[must_use]
pub fn with_auxiliary_details(mut self, auxiliary_details: AuxiliaryDetails) -> Self {
self.api.v1_config.node.auxiliary_details = auxiliary_details;
self
}
#[must_use]
pub fn with_gateway(mut self, gateway: Gateway) -> Self {
self.api.v1_config.node.roles.gateway_enabled = true;