manta_server/service/
auth.rs1use std::time::Instant;
12
13use manta_backend_dispatcher::error::Error;
14use manta_backend_dispatcher::interfaces::authentication::AuthenticationTrait;
15
16use crate::server::common::app_context::InfraContext;
17
18#[tracing::instrument(
33 skip_all,
34 fields(
35 site = %infra.site_name,
36 backend = %infra.backend_kind(),
37 backend_url = %infra.shasta_base_url,
38 )
39)]
40pub async fn get_api_token(
41 infra: &InfraContext<'_>,
42 username: &str,
43 password: &str,
44) -> Result<String, Error> {
45 tracing::info!(user = %username, "backend: requesting token");
46 let started = Instant::now();
47 infra
48 .backend
49 .get_api_token(username, password)
50 .await
51 .inspect(|_| {
52 tracing::debug!(
53 user = %username,
54 elapsed_ms = u64::try_from(started.elapsed().as_millis()).unwrap_or(u64::MAX),
55 "backend: token issued"
56 );
57 })
58 .inspect_err(|e| {
59 tracing::warn!(
60 user = %username,
61 elapsed_ms = u64::try_from(started.elapsed().as_millis()).unwrap_or(u64::MAX),
62 error = %e,
63 "backend: token request rejected"
64 );
65 })
66}
67
68#[tracing::instrument(
82 skip_all,
83 fields(
84 site = %infra.site_name,
85 backend = %infra.backend_kind(),
86 backend_url = %infra.shasta_base_url,
87 )
88)]
89pub async fn validate_api_token(
90 infra: &InfraContext<'_>,
91 token: &str,
92) -> Result<(), Error> {
93 tracing::info!("backend: validating token");
94 let started = Instant::now();
95 infra
96 .backend
97 .validate_api_token(token)
98 .await
99 .inspect(|()| {
100 tracing::debug!(
101 elapsed_ms = u64::try_from(started.elapsed().as_millis()).unwrap_or(u64::MAX),
102 "backend: token accepted"
103 );
104 })
105 .inspect_err(|e| {
106 tracing::warn!(
107 elapsed_ms = u64::try_from(started.elapsed().as_millis()).unwrap_or(u64::MAX),
108 error = %e,
109 "backend: token validation rejected"
110 );
111 })
112}