From 1be59f474da8abef7d3bdcee9685fd81ebd14906 Mon Sep 17 00:00:00 2001 From: Ryan Walters Date: Wed, 17 Sep 2025 12:37:12 -0500 Subject: [PATCH] feat: add Server header middleware, bump version to v0.4.0 --- Cargo.lock | 2 +- pacman-server/Cargo.toml | 2 +- pacman-server/README.md | 12 ++++++++++-- pacman-server/src/main.rs | 18 +++++++++++++++++- 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 03c8a8a..0e6d17b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1809,7 +1809,7 @@ version = "0.1.1" [[package]] name = "pacman-server" -version = "0.3.2" +version = "0.4.0" dependencies = [ "async-trait", "axum", diff --git a/pacman-server/Cargo.toml b/pacman-server/Cargo.toml index 789fb62..130ebf0 100644 --- a/pacman-server/Cargo.toml +++ b/pacman-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pacman-server" -version = "0.3.2" +version = "0.4.0" authors.workspace = true edition.workspace = true rust-version = "1.86.0" diff --git a/pacman-server/README.md b/pacman-server/README.md index 2dd1c52..96420e0 100644 --- a/pacman-server/README.md +++ b/pacman-server/README.md @@ -7,12 +7,20 @@ This crate is a webserver that hosts an OAuth login and leaderboard API for the ## Features - [x] Axum Webserver + - [x] Health Check + - [ ] Inbound Rate Limiting + - [ ] Outbound Rate Limiting + - [ ] Provider Circuit Breaker - [x] Database - [x] OAuth - [x] Discord - [x] GitHub - - [ ] Google (?) -- [ ] Leaderboard API + - [ ] Google +- [ ] Leaderboard + - [ ] Score Submission + - [ ] Score Listings + - [ ] Pagination + - [ ] Global / Daily - [ ] Name Restrictions & Flagging - [ ] Avatars - [ ] 8-bit Conversion diff --git a/pacman-server/src/main.rs b/pacman-server/src/main.rs index 444846b..8d80a29 100644 --- a/pacman-server/src/main.rs +++ b/pacman-server/src/main.rs @@ -19,6 +19,9 @@ use tokio::signal::unix::{signal, SignalKind}; use tokio::sync::{watch, Notify}; use tracing::{info, trace, warn}; +// Constant value for the Server header: "/" +const SERVER_HEADER_VALUE: &str = concat!(env!("CARGO_PKG_NAME"), "/", env!("CARGO_PKG_VERSION")); + #[tokio::main] async fn main() { // Load environment variables @@ -60,7 +63,8 @@ async fn main() { .route("/logout", get(routes::logout_handler)) .route("/profile", get(routes::profile_handler)) .with_state(app_state.clone()) - .layer(CookieLayer::default()); + .layer(CookieLayer::default()) + .layer(axum::middleware::from_fn(inject_server_header)); info!(%addr, "Starting HTTP server bind"); let listener = tokio::net::TcpListener::bind(addr).await.unwrap(); @@ -172,3 +176,15 @@ async fn shutdown_signal() -> Instant { _ = sigterm => { Instant::now() } } } + +async fn inject_server_header( + req: axum::http::Request, + next: axum::middleware::Next, +) -> Result { + let mut res = next.run(req).await; + res.headers_mut().insert( + axum::http::header::SERVER, + axum::http::HeaderValue::from_static(SERVER_HEADER_VALUE), + ); + Ok(res) +}