diff --git a/src/web/web_server.rs b/src/web/web_server.rs index 9effa86..25a7cd5 100644 --- a/src/web/web_server.rs +++ b/src/web/web_server.rs @@ -13,9 +13,9 @@ use idna::domain_to_unicode; use crate::error::*; use garage_api::s3_get::{handle_get, handle_head}; -use garage_table::*; use garage_model::bucket_table::*; use garage_model::garage::Garage; +use garage_table::*; use garage_util::error::Error as GarageError; pub async fn run_web_server( @@ -78,19 +78,19 @@ async fn serve_file(garage: Arc, req: Request) -> Result Err(Error::NotFound), - BucketState::Present(params) if !params.website.get() => Err(Error::NotFound), - _ => Ok(()), - }?; + // Check bucket is exposed as a website + let bucket_desc = garage + .bucket_table + .get(&EmptyKey, &bucket.to_string()) + .await? + .filter(|b| !b.is_deleted()) + .ok_or(Error::NotFound)?; + + match bucket_desc.state.get() { + BucketState::Deleted => Err(Error::NotFound), + BucketState::Present(params) if !params.website.get() => Err(Error::NotFound), + _ => Ok(()), + }?; // Get path let path = req.uri().path().to_string();