use super::*;
impl BucketWarden {
pub(crate) fn dispatch_bucket_delete_s3_http(
&mut self,
request: S3HttpRequest,
bucket: &str,
) -> Result<S3HttpResponse, RuntimeError> {
let key: Option<&str> = None;
match ("DELETE", Some(bucket), key) {
("DELETE", Some(bucket), None) if request.query.contains_key("cors") => {
self.delete_bucket_cors(&request.principal, bucket)?;
Ok(S3HttpResponse::new(204))
}
("DELETE", Some(bucket), None) if request.query.contains_key("logging") => {
self.delete_bucket_logging(&request.principal, bucket)?;
Ok(S3HttpResponse::new(204))
}
("DELETE", Some(bucket), None) if request.query.contains_key("website") => {
self.delete_bucket_website(&request.principal, bucket)?;
Ok(S3HttpResponse::new(204))
}
("DELETE", Some(bucket), None) if request.query.contains_key("policy") => {
self.delete_bucket_policy(&request.principal, bucket)?;
Ok(S3HttpResponse::new(204))
}
("DELETE", Some(bucket), None) if request.query.contains_key("tagging") => {
self.delete_bucket_tagging(&request.principal, bucket)?;
Ok(S3HttpResponse::new(204))
}
("DELETE", Some(bucket), None) if request.query.contains_key("encryption") => {
self.delete_bucket_encryption(&request.principal, bucket)?;
Ok(S3HttpResponse::new(204))
}
("DELETE", Some(bucket), None) if request.query.contains_key("lifecycle") => {
self.delete_bucket_lifecycle(&request.principal, bucket)?;
Ok(S3HttpResponse::new(204))
}
("DELETE", Some(bucket), None) if request.query.contains_key("replication") => {
self.delete_bucket_replication(&request.principal, bucket)?;
Ok(S3HttpResponse::new(204))
}
("DELETE", Some(bucket), None) if request.query.contains_key("ownershipControls") => {
self.delete_bucket_ownership_controls(&request.principal, bucket)?;
Ok(S3HttpResponse::new(204))
}
("DELETE", Some(bucket), None) if request.query.contains_key("publicAccessBlock") => {
self.delete_public_access_block(&request.principal, bucket)?;
Ok(S3HttpResponse::new(204))
}
("DELETE", Some(bucket), None) if request.query.contains_key("metrics") => {
let id = request.query.get("id").ok_or_else(|| {
RuntimeError::InvalidMetricsConfiguration(
"metrics configuration requests require query parameter id".to_string(),
)
})?;
self.delete_bucket_metrics_configuration(&request.principal, bucket, id)?;
Ok(S3HttpResponse::new(204))
}
("DELETE", Some(bucket), None) if request.query.contains_key("analytics") => {
let id = request.query.get("id").ok_or_else(|| {
RuntimeError::InvalidAnalyticsConfiguration(
"analytics configuration requests require query parameter id".to_string(),
)
})?;
self.delete_bucket_analytics_configuration(&request.principal, bucket, id)?;
Ok(S3HttpResponse::new(204))
}
("DELETE", Some(bucket), None) if request.query.contains_key("inventory") => {
let id = request.query.get("id").ok_or_else(|| {
RuntimeError::InvalidInventoryConfiguration(
"inventory configuration requests require query parameter id".to_string(),
)
})?;
self.delete_bucket_inventory_configuration(&request.principal, bucket, id)?;
Ok(S3HttpResponse::new(204))
}
("DELETE", Some(bucket), None) if request.query.contains_key("intelligent-tiering") => {
let id = request.query.get("id").ok_or_else(|| {
RuntimeError::InvalidIntelligentTieringConfiguration(
"intelligent-tiering configuration requests require query parameter id"
.to_string(),
)
})?;
self.delete_bucket_intelligent_tiering_configuration(
&request.principal,
bucket,
id,
)?;
Ok(S3HttpResponse::new(204))
}
("DELETE", Some(bucket), None)
if request.query.contains_key("metadataConfiguration") =>
{
self.delete_bucket_metadata_configuration(&request.principal, bucket)?;
Ok(S3HttpResponse::new(204))
}
("DELETE", Some(bucket), None) if request.query.contains_key("metadataTable") => {
self.delete_bucket_metadata_table_configuration(&request.principal, bucket)?;
Ok(S3HttpResponse::new(204))
}
("DELETE", Some(bucket), None) => {
self.delete_bucket(&request.principal, bucket)?;
Ok(S3HttpResponse::new(204))
}
_ => Ok(general_error_response(
"MethodNotAllowed",
405,
"The specified method is not allowed for this resource.",
)),
}
}
}