mirror of
https://github.com/aljazceru/pubky-core.git
synced 2025-12-31 04:44:37 +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::{
|
||||
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
|
||||
|
||||
@@ -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| {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user