use super::*;
mod bucket_delete;
mod bucket_get;
mod bucket_post;
mod bucket_put;
mod service;
impl BucketWarden {
pub(crate) fn dispatch_bucket_s3_http(
&mut self,
request: S3HttpRequest,
method: &str,
bucket: &str,
) -> Result<S3HttpResponse, RuntimeError> {
let key: Option<&str> = None;
match (method, Some(bucket), key) {
("OPTIONS", Some(bucket), maybe_key) => {
Ok(self.cors_preflight(&request, bucket, maybe_key.unwrap_or_default())?)
}
("HEAD", Some(bucket), None) => {
let result = self.head_bucket(&request.principal, bucket)?;
Ok(S3HttpResponse::new(200).with_header("x-amz-bucket-region", result.region))
}
("PUT", Some(bucket), None) => self.dispatch_bucket_put_s3_http(request, bucket),
("POST", Some(bucket), None) => self.dispatch_bucket_post_s3_http(request, bucket),
("GET", Some(bucket), None) => self.dispatch_bucket_get_s3_http(request, bucket),
("DELETE", Some(bucket), None) => self.dispatch_bucket_delete_s3_http(request, bucket),
_ => Ok(general_error_response(
"MethodNotAllowed",
405,
"The specified method is not allowed for this resource.",
)),
}
}
}