admin api: update cors and lifecycle rules in UpdateBucket

This commit is contained in:
Alex Auvolat
2026-03-06 12:20:03 +01:00
committed by Alex
parent 64087172ff
commit 19e5f83164
4 changed files with 58 additions and 0 deletions
+4
View File
@@ -949,6 +949,10 @@ pub struct UpdateBucketResponse(pub GetBucketInfoResponse);
pub struct UpdateBucketRequestBody {
pub website_access: Option<UpdateBucketWebsiteAccess>,
pub quotas: Option<ApiBucketQuotas>,
#[serde(default)]
pub cors_rules: Option<Vec<xml::cors::CorsRule>>,
#[serde(default)]
pub lifecycle_rules: Option<Vec<xml::lifecycle::LifecycleRule>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
+32
View File
@@ -323,6 +323,38 @@ impl RequestHandler for UpdateBucketRequest {
});
}
if let Some(cr) = self.body.cors_rules {
let cors_config = if cr.is_empty() {
None
} else {
let cc = xml::cors::CorsConfiguration {
xmlns: (),
cors_rules: cr,
};
cc.validate()?;
Some(cc.into_garage_cors_config()?)
};
state.cors_config.update(cors_config);
}
if let Some(lr) = self.body.lifecycle_rules {
let lifecycle_config = if lr.is_empty() {
None
} else {
let lc = xml::lifecycle::LifecycleConfiguration {
xmlns: (),
lifecycle_rules: lr,
};
Some(
lc.validate_into_garage_lifecycle_config()
.ok_or_bad_request("Invalid lifecycle configuration")?,
)
};
state.lifecycle_config.update(lifecycle_config);
}
garage.bucket_table.insert(&bucket).await?;
Ok(UpdateBucketResponse(