From c622bf48dc349049f73f2865c149ea6d7d9c807d Mon Sep 17 00:00:00 2001 From: phil Date: Thu, 31 Jul 2025 14:05:36 -0400 Subject: [PATCH] cors and tracing --- Cargo.lock | 2 +- slingshot/Cargo.toml | 2 +- slingshot/src/main.rs | 2 +- slingshot/src/server.rs | 37 ++++++++++++++++++++++++------------- 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e8ffb2b..633aa52 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4921,7 +4921,6 @@ dependencies = [ "atrium-oauth", "clap", "ctrlc", - "env_logger", "foyer", "hickory-resolver", "jetstream", @@ -4938,6 +4937,7 @@ dependencies = [ "time", "tokio", "tokio-util", + "tracing-subscriber", "url", ] diff --git a/slingshot/Cargo.toml b/slingshot/Cargo.toml index b492950..e8b075b 100644 --- a/slingshot/Cargo.toml +++ b/slingshot/Cargo.toml @@ -10,7 +10,6 @@ atrium-identity = "0.1.5" atrium-oauth = "0.1.3" clap = { version = "4.5.41", features = ["derive"] } ctrlc = "3.4.7" -env_logger = "0.11.8" foyer = { version = "0.18.0", features = ["serde"] } hickory-resolver = "0.25.2" jetstream = { path = "../jetstream", features = ["metrics"] } @@ -27,4 +26,5 @@ thiserror = "2.0.12" time = { version = "0.3.41", features = ["serde"] } tokio = { version = "1.47.0", features = ["full"] } tokio-util = "0.7.15" +tracing-subscriber = { version = "0.3.19", features = ["env-filter"] } url = "2.5.4" diff --git a/slingshot/src/main.rs b/slingshot/src/main.rs index 053c11d..19d247e 100644 --- a/slingshot/src/main.rs +++ b/slingshot/src/main.rs @@ -35,7 +35,7 @@ struct Args { #[tokio::main] async fn main() -> Result<(), String> { - env_logger::init(); + tracing_subscriber::fmt::init(); let shutdown = CancellationToken::new(); diff --git a/slingshot/src/server.rs b/slingshot/src/server.rs index 2bdd705..ee87459 100644 --- a/slingshot/src/server.rs +++ b/slingshot/src/server.rs @@ -5,12 +5,14 @@ use std::sync::Arc; use tokio_util::sync::CancellationToken; use poem::{ - Endpoint, Route, Server, + Endpoint, EndpointExt, Route, Server, endpoint::make_sync, + http::Method, listener::{ Listener, TcpListener, acme::{AutoCert, LETS_ENCRYPT_PRODUCTION}, }, + middleware::{Cors, Tracing}, }; use poem_openapi::{ ApiResponse, Object, OpenApi, OpenApiService, param::Query, payload::Json, types::Example, @@ -242,7 +244,7 @@ pub async fn serve( .server("http://localhost:3000") .url_prefix("/xrpc"); - let app = Route::new() + let mut app = Route::new() .nest("/", api_service.scalar()) .nest("/openapi.json", api_service.spec_endpoint()) .nest("/xrpc/", api_service); @@ -252,7 +254,8 @@ pub async fn serve( .install_default() .expect("alskfjalksdjf"); - let app = app.at("/.well-known/did.json", get_did_doc(&host)); + app = app + .at("/.well-known/did.json", get_did_doc(&host)); let auto_cert = AutoCert::builder() .directory_url(LETS_ENCRYPT_PRODUCTION) @@ -260,16 +263,24 @@ pub async fn serve( .build() .map_err(ServerError::AcmeBuildError)?; - Server::new(TcpListener::bind("0.0.0.0:443").acme(auto_cert)) - .name("slingshot") - .run(app) - .await - .map_err(ServerError::ServerExited) + run(TcpListener::bind("0.0.0.0:443").acme(auto_cert), app).await } else { - Server::new(TcpListener::bind("127.0.0.1:3000")) - .name("slingshot") - .run(app) - .await - .map_err(ServerError::ServerExited) + run(TcpListener::bind("127.0.0.1:3000"), app).await } } + +async fn run(listener: L, app: Route) -> Result<(), ServerError> +where + L: Listener + 'static +{ + let app = app + .with(Cors::new() + .allow_method(Method::GET) + .allow_credentials(false)) + .with(Tracing); + Server::new(listener) + .name("slingshot") + .run(app) + .await + .map_err(ServerError::ServerExited) +} -- 2.51.2