use std::time::Instant;
use manta_backend_dispatcher::error::Error;
use manta_backend_dispatcher::interfaces::authentication::AuthenticationTrait;
use crate::server::common::app_context::InfraContext;
#[tracing::instrument(
skip_all,
fields(
site = %infra.site_name,
backend = %infra.backend_kind(),
backend_url = %infra.shasta_base_url,
)
)]
pub async fn get_api_token(
infra: &InfraContext<'_>,
username: &str,
password: &str,
) -> Result<String, Error> {
tracing::info!(user = %username, "backend: requesting token");
let started = Instant::now();
infra
.backend
.get_api_token(username, password)
.await
.inspect(|_| {
tracing::debug!(
user = %username,
elapsed_ms = u64::try_from(started.elapsed().as_millis()).unwrap_or(u64::MAX),
"backend: token issued"
);
})
.inspect_err(|e| {
tracing::warn!(
user = %username,
elapsed_ms = u64::try_from(started.elapsed().as_millis()).unwrap_or(u64::MAX),
error = %e,
"backend: token request rejected"
);
})
}
#[tracing::instrument(
skip_all,
fields(
site = %infra.site_name,
backend = %infra.backend_kind(),
backend_url = %infra.shasta_base_url,
)
)]
pub async fn validate_api_token(
infra: &InfraContext<'_>,
token: &str,
) -> Result<(), Error> {
tracing::info!("backend: validating token");
let started = Instant::now();
infra
.backend
.validate_api_token(token)
.await
.inspect(|()| {
tracing::debug!(
elapsed_ms = u64::try_from(started.elapsed().as_millis()).unwrap_or(u64::MAX),
"backend: token accepted"
);
})
.inspect_err(|e| {
tracing::warn!(
elapsed_ms = u64::try_from(started.elapsed().as_millis()).unwrap_or(u64::MAX),
error = %e,
"backend: token validation rejected"
);
})
}