mirror of
https://github.com/aljazceru/pubky-core.git
synced 2026-01-30 11:24:31 +01:00
feat(homeserver): custom tracing layer support pubky:// urls for tenants #64
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
use std::collections::HashMap;
|
use std::{collections::HashMap, fmt::Display};
|
||||||
|
|
||||||
use axum::{
|
use axum::{
|
||||||
async_trait,
|
async_trait,
|
||||||
@@ -21,6 +21,12 @@ impl PubkyHost {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Display for PubkyHost {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
write!(f, "{}", self.0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl<S> FromRequestParts<S> for PubkyHost
|
impl<S> FromRequestParts<S> for PubkyHost
|
||||||
where
|
where
|
||||||
|
|||||||
@@ -2,11 +2,13 @@ use std::sync::Arc;
|
|||||||
|
|
||||||
use axum::{extract::Request, Router};
|
use axum::{extract::Request, Router};
|
||||||
use tower_http::trace::{
|
use tower_http::trace::{
|
||||||
DefaultMakeSpan, DefaultOnFailure, DefaultOnRequest, DefaultOnResponse, MakeSpan, OnFailure,
|
DefaultOnFailure, DefaultOnRequest, DefaultOnResponse, OnFailure, OnRequest, OnResponse,
|
||||||
OnRequest, OnResponse, TraceLayer,
|
TraceLayer,
|
||||||
};
|
};
|
||||||
use tracing::{Level, Span};
|
use tracing::{Level, Span};
|
||||||
|
|
||||||
|
use crate::core::extractors::PubkyHost;
|
||||||
|
|
||||||
pub fn with_trace_layer(router: Router, excluded_paths: &[&str]) -> Router {
|
pub fn with_trace_layer(router: Router, excluded_paths: &[&str]) -> Router {
|
||||||
let excluded_paths = Arc::new(
|
let excluded_paths = Arc::new(
|
||||||
excluded_paths
|
excluded_paths
|
||||||
@@ -23,7 +25,20 @@ pub fn with_trace_layer(router: Router, excluded_paths: &[&str]) -> Router {
|
|||||||
tracing::span!(Level::INFO, "request", excluded = true)
|
tracing::span!(Level::INFO, "request", excluded = true)
|
||||||
} else {
|
} else {
|
||||||
// Use the default span for other endpoints
|
// Use the default span for other endpoints
|
||||||
DefaultMakeSpan::new().make_span(request)
|
|
||||||
|
let uri = if let Some(pubky_host) = request.extensions().get::<PubkyHost>() {
|
||||||
|
format!("pubky://{pubky_host}{}", request.uri())
|
||||||
|
} else {
|
||||||
|
request.uri().to_string()
|
||||||
|
};
|
||||||
|
|
||||||
|
tracing::span!(
|
||||||
|
Level::INFO,
|
||||||
|
"request",
|
||||||
|
method = %request.method(),
|
||||||
|
uri = ?uri,
|
||||||
|
version = ?request.version(),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.on_request(|request: &Request, span: &Span| {
|
.on_request(|request: &Request, span: &Span| {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ use tower_http::cors::CorsLayer;
|
|||||||
|
|
||||||
use crate::core::AppState;
|
use crate::core::AppState;
|
||||||
|
|
||||||
use super::layers::trace::with_trace_layer;
|
use super::layers::{pubky_host::PubkyHostLayer, trace::with_trace_layer};
|
||||||
|
|
||||||
mod auth;
|
mod auth;
|
||||||
mod feed;
|
mod feed;
|
||||||
@@ -37,5 +37,5 @@ pub fn create_app(state: AppState) -> Router {
|
|||||||
.layer(CorsLayer::very_permissive())
|
.layer(CorsLayer::very_permissive())
|
||||||
.with_state(state);
|
.with_state(state);
|
||||||
|
|
||||||
with_trace_layer(app, &TRACING_EXCLUDED_PATHS)
|
with_trace_layer(app, &TRACING_EXCLUDED_PATHS).layer(PubkyHostLayer)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,10 +9,7 @@ use axum::{
|
|||||||
Router,
|
Router,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::core::{
|
use crate::core::{layers::authz::AuthorizationLayer, AppState};
|
||||||
layers::{authz::AuthorizationLayer, pubky_host::PubkyHostLayer},
|
|
||||||
AppState,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub mod read;
|
pub mod read;
|
||||||
pub mod session;
|
pub mod session;
|
||||||
@@ -33,5 +30,4 @@ pub fn router(state: AppState) -> Router<AppState> {
|
|||||||
// TODO: different max size for sessions and other routes?
|
// TODO: different max size for sessions and other routes?
|
||||||
.layer(DefaultBodyLimit::max(100 * 1024 * 1024))
|
.layer(DefaultBodyLimit::max(100 * 1024 * 1024))
|
||||||
.layer(AuthorizationLayer::new(state.clone()))
|
.layer(AuthorizationLayer::new(state.clone()))
|
||||||
.layer(PubkyHostLayer)
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user