feat(homeserver): custom tracing layer support pubky:// urls for tenants #64

This commit is contained in:
nazeh
2025-01-22 21:56:24 +03:00
parent 2ef87f3511
commit 7ed43f0fba
4 changed files with 28 additions and 11 deletions

View File

@@ -1,4 +1,4 @@
use std::collections::HashMap;
use std::{collections::HashMap, fmt::Display};
use axum::{
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]
impl<S> FromRequestParts<S> for PubkyHost
where

View File

@@ -2,11 +2,13 @@ use std::sync::Arc;
use axum::{extract::Request, Router};
use tower_http::trace::{
DefaultMakeSpan, DefaultOnFailure, DefaultOnRequest, DefaultOnResponse, MakeSpan, OnFailure,
OnRequest, OnResponse, TraceLayer,
DefaultOnFailure, DefaultOnRequest, DefaultOnResponse, OnFailure, OnRequest, OnResponse,
TraceLayer,
};
use tracing::{Level, Span};
use crate::core::extractors::PubkyHost;
pub fn with_trace_layer(router: Router, excluded_paths: &[&str]) -> Router {
let excluded_paths = Arc::new(
excluded_paths
@@ -23,7 +25,20 @@ pub fn with_trace_layer(router: Router, excluded_paths: &[&str]) -> Router {
tracing::span!(Level::INFO, "request", excluded = true)
} else {
// 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| {

View File

@@ -9,7 +9,7 @@ use tower_http::cors::CorsLayer;
use crate::core::AppState;
use super::layers::trace::with_trace_layer;
use super::layers::{pubky_host::PubkyHostLayer, trace::with_trace_layer};
mod auth;
mod feed;
@@ -37,5 +37,5 @@ pub fn create_app(state: AppState) -> Router {
.layer(CorsLayer::very_permissive())
.with_state(state);
with_trace_layer(app, &TRACING_EXCLUDED_PATHS)
with_trace_layer(app, &TRACING_EXCLUDED_PATHS).layer(PubkyHostLayer)
}

View File

@@ -9,10 +9,7 @@ use axum::{
Router,
};
use crate::core::{
layers::{authz::AuthorizationLayer, pubky_host::PubkyHostLayer},
AppState,
};
use crate::core::{layers::authz::AuthorizationLayer, AppState};
pub mod read;
pub mod session;
@@ -33,5 +30,4 @@ pub fn router(state: AppState) -> Router<AppState> {
// TODO: different max size for sessions and other routes?
.layer(DefaultBodyLimit::max(100 * 1024 * 1024))
.layer(AuthorizationLayer::new(state.clone()))
.layer(PubkyHostLayer)
}