From ac4b26cbe0c38054d181dd232e88f9693a030007 Mon Sep 17 00:00:00 2001 From: n-dusan Date: Fri, 22 Nov 2024 16:04:00 +0100 Subject: [PATCH] fix: allow `HEAD` method for dynamic routes stelae is now able to resolve HEAD method requests. --- src/server/api/routes.rs | 3 +++ src/server/git.rs | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/server/api/routes.rs b/src/server/api/routes.rs index 08e5f14..4a244ca 100644 --- a/src/server/api/routes.rs +++ b/src/server/api/routes.rs @@ -249,6 +249,7 @@ fn register_root_routes(cfg: &mut web::ServiceConfig, stele: &Stele) -> anyhow:: root_scope = root_scope.service( web::resource(actix_route.as_str()) .route(web::get().to(serve)) + .route(web::head().to(serve)) .app_data(web::Data::new(repo_state.clone())), ); } @@ -257,6 +258,7 @@ fn register_root_routes(cfg: &mut web::ServiceConfig, stele: &Stele) -> anyhow:: web::scope("").service( web::resource("/{tail:.*}") .route(web::get().to(serve)) + .route(web::head().to(serve)) .app_data(web::Data::new(repo_state.clone())), ), ); @@ -298,6 +300,7 @@ fn register_dependent_routes( actix_scope = actix_scope.service( web::resource(actix_route.as_str()) .route(web::get().to(serve)) + .route(web::head().to(serve)) .app_data(web::Data::new(repo_state.clone())), ); } diff --git a/src/server/git.rs b/src/server/git.rs index 24578ff..b4369d0 100644 --- a/src/server/git.rs +++ b/src/server/git.rs @@ -9,7 +9,7 @@ clippy::infinite_loop )] -use actix_web::{get, web, App, HttpResponse, HttpServer, Responder}; +use actix_web::{get, route, web, App, HttpResponse, HttpServer, Responder}; use git2::{self, ErrorCode}; use std::path::PathBuf; use tracing_actix_web::TracingLogger; @@ -43,7 +43,11 @@ async fn misc(path: web::Path) -> actix_web::Result<&'static str, Stelae /// Return the content in the stelae archive in the `{namespace}/{name}` /// repo at the `commitish` commit at the `remainder` path. /// Return 404 if any are not found or there are any errors. -#[get("/{namespace}/{name}/{commitish}{remainder:/+([^{}]*?)?/*}")] +#[route( + "/{namespace}/{name}/{commitish}{remainder:/+([^{}]*?)?/*}", + method = "GET", + method = "HEAD" +)] #[tracing::instrument(name = "Retrieving a Git blob", skip(path, data))] async fn get_blob( path: web::Path<(String, String, String, String)>,