use super::*;
impl BucketWarden {
pub(crate) fn dispatch_bucket_post_s3_http(
&mut self,
request: S3HttpRequest,
bucket: &str,
) -> Result<S3HttpResponse, RuntimeError> {
let key: Option<&str> = None;
match ("POST", Some(bucket), key) {
("POST", Some(bucket), None) if request.query.contains_key("replication") => {
let result = self.run_bucket_replication(&request.principal, bucket)?;
Ok(xml_response(200, replication_run_result_xml(&result)))
}
("POST", Some(bucket), None) if request.query.contains_key("metadataConfiguration") => {
let configuration = parse_bucket_metadata_configuration(bucket, &request.body)?;
self.create_bucket_metadata_configuration(
&request.principal,
bucket,
configuration,
)?;
Ok(S3HttpResponse::new(200))
}
("POST", Some(bucket), None) if request.query.contains_key("metadataTable") => {
let configuration =
parse_bucket_metadata_table_configuration(bucket, &request.body)?;
self.create_bucket_metadata_table_configuration(
&request.principal,
bucket,
configuration,
)?;
Ok(S3HttpResponse::new(200))
}
("POST", Some(bucket), None) if request.query.contains_key("delete") => {
self.require_bucket(bucket)?;
let delete_request = parse_multi_object_delete(bucket, &request.body)?;
let result = self.delete_objects(&request.principal, delete_request);
Ok(xml_response(200, multi_object_delete_xml(&result)))
}
_ => Ok(general_error_response(
"MethodNotAllowed",
405,
"The specified method is not allowed for this resource.",
)),
}
}
}