bucketwarden-server 0.1.0

BucketWarden storage server runtime.
Documentation
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.",
            )),
        }
    }
}