Include auth in self description

This commit is contained in:
Bogdan-Ștefan Neacşu
2024-07-03 13:50:44 +00:00
parent a4eb3a7dbf
commit fec3d46b33
12 changed files with 152 additions and 1 deletions
@@ -0,0 +1,23 @@
// Copyright 2024 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: GPL-3.0-only
use axum::routing::get;
use axum::Router;
use nym_node_requests::api::v1::authenticator::models;
pub mod root;
#[derive(Debug, Clone, Default)]
pub struct Config {
pub details: Option<models::Authenticator>,
}
pub(crate) fn routes<S: Send + Sync + 'static + Clone>(config: Config) -> Router<S> {
Router::new().route(
"/",
get({
let authenticator_details = config.details;
move |query| root::root_authenticator(authenticator_details, query)
}),
)
}
@@ -0,0 +1,33 @@
// Copyright 2024 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: GPL-3.0-only
use crate::router::api::{FormattedResponse, OutputParams};
use axum::extract::Query;
use axum::http::StatusCode;
use nym_node_requests::api::v1::authenticator::models::Authenticator;
/// Returns root authenticator information
#[utoipa::path(
get,
path = "",
context_path = "/api/v1/authenticator",
tag = "Authenticator",
responses(
(status = 501, description = "the endpoint hasn't been implemented yet"),
(status = 200, content(
("application/json" = Authenticator),
("application/yaml" = Authenticator)
))
),
params(OutputParams)
)]
pub(crate) async fn root_authenticator(
details: Option<Authenticator>,
Query(output): Query<OutputParams>,
) -> Result<AuthenticatorResponse, StatusCode> {
let details = details.ok_or(StatusCode::NOT_IMPLEMENTED)?;
let output = output.output.unwrap_or_default();
Ok(output.to_response(details))
}
pub type AuthenticatorResponse = FormattedResponse<Authenticator>;
@@ -6,6 +6,7 @@ use axum::routing::get;
use axum::Router;
use nym_node_requests::routes::api::v1;
pub mod authenticator;
pub mod gateway;
pub mod health;
pub mod ip_packet_router;
@@ -23,6 +24,7 @@ pub struct Config {
pub mixnode: mixnode::Config,
pub network_requester: network_requester::Config,
pub ip_packet_router: ip_packet_router::Config,
pub authenticator: authenticator::Config,
}
pub(super) fn routes(config: Config) -> Router<AppState> {
@@ -39,6 +41,10 @@ pub(super) fn routes(config: Config) -> Router<AppState> {
v1::IP_PACKET_ROUTER,
ip_packet_router::routes(config.ip_packet_router),
)
.nest(
v1::AUTHENTICATOR,
authenticator::routes(config.authenticator),
)
.merge(node::routes(config.node))
.merge(openapi::route())
}
@@ -8,6 +8,7 @@ use crate::NymNodeHTTPServer;
use axum::response::Redirect;
use axum::routing::get;
use axum::Router;
use nym_node_requests::api::v1::authenticator::models::Authenticator;
use nym_node_requests::api::v1::gateway::models::{Gateway, Wireguard};
use nym_node_requests::api::v1::ip_packet_router::models::IpPacketRouter;
use nym_node_requests::api::v1::mixnode::models::Mixnode;
@@ -53,6 +54,7 @@ impl Config {
mixnode: Default::default(),
network_requester: Default::default(),
ip_packet_router: Default::default(),
authenticator: Default::default(),
},
},
}
@@ -147,6 +149,12 @@ impl Config {
self.api.v1_config.ip_packet_router.details = Some(ip_packet_router);
self
}
#[must_use]
pub fn with_authenticator_details(mut self, authenticator: Authenticator) -> Self {
self.api.v1_config.authenticator.details = Some(authenticator);
self
}
}
pub struct NymNodeRouter {