From 12ea4cda5fe033fc2b9f1fec51ddc3d8b860a85f Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 28 Jan 2025 19:03:39 +0100 Subject: admin api: merge calls to manage global/local aliases --- src/api/admin/api.rs | 44 +++++---------------- src/api/admin/bucket.rs | 98 ++++++++++++++++++---------------------------- src/api/admin/router_v2.rs | 34 ++++++++-------- 3 files changed, 65 insertions(+), 111 deletions(-) (limited to 'src/api') diff --git a/src/api/admin/api.rs b/src/api/admin/api.rs index c3559587..5fedd11f 100644 --- a/src/api/admin/api.rs +++ b/src/api/admin/api.rs @@ -54,10 +54,8 @@ admin_endpoints![ DenyBucketKey, // Operations on bucket aliases - AddGlobalBucketAlias, - RemoveGlobalBucketAlias, - AddLocalBucketAlias, - RemoveLocalBucketAlias, + AddBucketAlias, + RemoveBucketAlias, ]; // ********************************************** @@ -514,48 +512,26 @@ pub struct DenyBucketKeyResponse(pub GetBucketInfoResponse); // Operations on bucket aliases // ********************************************** -// ---- AddGlobalBucketAlias ---- +// ---- AddBucketAlias ---- #[derive(Serialize, Deserialize)] -pub struct AddGlobalBucketAliasRequest { +pub struct AddBucketAliasRequest { pub bucket_id: String, + pub access_key_id: Option, pub alias: String, } #[derive(Serialize, Deserialize)] -pub struct AddGlobalBucketAliasResponse(pub GetBucketInfoResponse); +pub struct AddBucketAliasResponse(pub GetBucketInfoResponse); -// ---- RemoveGlobalBucketAlias ---- +// ---- RemoveBucketAlias ---- #[derive(Serialize, Deserialize)] -pub struct RemoveGlobalBucketAliasRequest { +pub struct RemoveBucketAliasRequest { pub bucket_id: String, + pub access_key_id: Option, pub alias: String, } #[derive(Serialize, Deserialize)] -pub struct RemoveGlobalBucketAliasResponse(pub GetBucketInfoResponse); - -// ---- AddLocalBucketAlias ---- - -#[derive(Serialize, Deserialize)] -pub struct AddLocalBucketAliasRequest { - pub bucket_id: String, - pub access_key_id: String, - pub alias: String, -} - -#[derive(Serialize, Deserialize)] -pub struct AddLocalBucketAliasResponse(pub GetBucketInfoResponse); - -// ---- RemoveLocalBucketAlias ---- - -#[derive(Serialize, Deserialize)] -pub struct RemoveLocalBucketAliasRequest { - pub bucket_id: String, - pub access_key_id: String, - pub alias: String, -} - -#[derive(Serialize, Deserialize)] -pub struct RemoveLocalBucketAliasResponse(pub GetBucketInfoResponse); +pub struct RemoveBucketAliasResponse(pub GetBucketInfoResponse); diff --git a/src/api/admin/bucket.rs b/src/api/admin/bucket.rs index 885c1749..ee7a5e12 100644 --- a/src/api/admin/bucket.rs +++ b/src/api/admin/bucket.rs @@ -18,14 +18,12 @@ use garage_model::s3::object_table::*; use crate::admin::api::ApiBucketKeyPerm; use crate::admin::api::{ - ApiBucketQuotas, AllowBucketKeyRequest, AllowBucketKeyResponse, DenyBucketKeyRequest, - DenyBucketKeyResponse, BucketKeyPermChangeRequest, BucketLocalAlias, CreateBucketRequest, - CreateBucketResponse, DeleteBucketRequest, DeleteBucketResponse, GetBucketInfoKey, - GetBucketInfoRequest, GetBucketInfoResponse, GetBucketInfoWebsiteResponse, - AddGlobalBucketAliasRequest, AddGlobalBucketAliasResponse, RemoveGlobalBucketAliasRequest, - RemoveGlobalBucketAliasResponse, ListBucketsRequest, ListBucketsResponse, ListBucketsResponseItem, - AddLocalBucketAliasRequest, AddLocalBucketAliasResponse, RemoveLocalBucketAliasRequest, - RemoveLocalBucketAliasResponse, UpdateBucketRequest, UpdateBucketResponse, + AddBucketAliasRequest, AddBucketAliasResponse, AllowBucketKeyRequest, AllowBucketKeyResponse, + ApiBucketQuotas, BucketKeyPermChangeRequest, BucketLocalAlias, CreateBucketRequest, + CreateBucketResponse, DeleteBucketRequest, DeleteBucketResponse, DenyBucketKeyRequest, + DenyBucketKeyResponse, GetBucketInfoKey, GetBucketInfoRequest, GetBucketInfoResponse, + GetBucketInfoWebsiteResponse, ListBucketsRequest, ListBucketsResponse, ListBucketsResponseItem, + RemoveBucketAliasRequest, RemoveBucketAliasResponse, UpdateBucketRequest, UpdateBucketResponse, }; use crate::admin::error::*; use crate::admin::EndpointHandler; @@ -453,76 +451,56 @@ pub async fn handle_bucket_change_key_perm( // ---- BUCKET ALIASES ---- #[async_trait] -impl EndpointHandler for AddGlobalBucketAliasRequest { - type Response = AddGlobalBucketAliasResponse; +impl EndpointHandler for AddBucketAliasRequest { + type Response = AddBucketAliasResponse; - async fn handle(self, garage: &Arc) -> Result { + async fn handle(self, garage: &Arc) -> Result { let bucket_id = parse_bucket_id(&self.bucket_id)?; let helper = garage.locked_helper().await; - helper - .set_global_bucket_alias(bucket_id, &self.alias) - .await?; - - Ok(AddGlobalBucketAliasResponse( - bucket_info_results(garage, bucket_id).await?, - )) - } -} - -#[async_trait] -impl EndpointHandler for RemoveGlobalBucketAliasRequest { - type Response = RemoveGlobalBucketAliasResponse; - - async fn handle(self, garage: &Arc) -> Result { - let bucket_id = parse_bucket_id(&self.bucket_id)?; - - let helper = garage.locked_helper().await; - - helper - .unset_global_bucket_alias(bucket_id, &self.alias) - .await?; - - Ok(RemoveGlobalBucketAliasResponse( - bucket_info_results(garage, bucket_id).await?, - )) - } -} - -#[async_trait] -impl EndpointHandler for AddLocalBucketAliasRequest { - type Response = AddLocalBucketAliasResponse; - - async fn handle(self, garage: &Arc) -> Result { - let bucket_id = parse_bucket_id(&self.bucket_id)?; - - let helper = garage.locked_helper().await; - - helper - .set_local_bucket_alias(bucket_id, &self.access_key_id, &self.alias) - .await?; + match self.access_key_id { + None => { + helper + .set_global_bucket_alias(bucket_id, &self.alias) + .await?; + } + Some(ak) => { + helper + .set_local_bucket_alias(bucket_id, &ak, &self.alias) + .await?; + } + } - Ok(AddLocalBucketAliasResponse( + Ok(AddBucketAliasResponse( bucket_info_results(garage, bucket_id).await?, )) } } #[async_trait] -impl EndpointHandler for RemoveLocalBucketAliasRequest { - type Response = RemoveLocalBucketAliasResponse; +impl EndpointHandler for RemoveBucketAliasRequest { + type Response = RemoveBucketAliasResponse; - async fn handle(self, garage: &Arc) -> Result { + async fn handle(self, garage: &Arc) -> Result { let bucket_id = parse_bucket_id(&self.bucket_id)?; let helper = garage.locked_helper().await; - helper - .unset_local_bucket_alias(bucket_id, &self.access_key_id, &self.alias) - .await?; + match self.access_key_id { + None => { + helper + .unset_global_bucket_alias(bucket_id, &self.alias) + .await?; + } + Some(ak) => { + helper + .unset_local_bucket_alias(bucket_id, &ak, &self.alias) + .await?; + } + } - Ok(RemoveLocalBucketAliasResponse( + Ok(RemoveBucketAliasResponse( bucket_info_results(garage, bucket_id).await?, )) } diff --git a/src/api/admin/router_v2.rs b/src/api/admin/router_v2.rs index 45613ea4..a6f110a7 100644 --- a/src/api/admin/router_v2.rs +++ b/src/api/admin/router_v2.rs @@ -55,10 +55,8 @@ impl AdminApiRequest { POST AllowBucketKey (body), POST DenyBucketKey (body), // Bucket aliases - POST AddGlobalBucketAlias (body), - POST RemoveGlobalBucketAlias (body), - POST AddLocalBucketAlias (body), - POST RemoveLocalBucketAlias (body), + POST AddBucketAlias (body), + POST RemoveBucketAlias (body), ]); if let Some(message) = query.nonempty_message() { @@ -174,24 +172,26 @@ impl AdminApiRequest { Ok(AdminApiRequest::DenyBucketKey(DenyBucketKeyRequest(req))) } // Bucket aliasing - Endpoint::GlobalAliasBucket { id, alias } => Ok(AdminApiRequest::AddGlobalBucketAlias( - AddGlobalBucketAliasRequest { + Endpoint::GlobalAliasBucket { id, alias } => { + Ok(AdminApiRequest::AddBucketAlias(AddBucketAliasRequest { + access_key_id: None, bucket_id: id, alias, - }, - )), - Endpoint::GlobalUnaliasBucket { id, alias } => Ok( - AdminApiRequest::RemoveGlobalBucketAlias(RemoveGlobalBucketAliasRequest { + })) + } + Endpoint::GlobalUnaliasBucket { id, alias } => Ok(AdminApiRequest::RemoveBucketAlias( + RemoveBucketAliasRequest { + access_key_id: None, bucket_id: id, alias, - }), - ), + }, + )), Endpoint::LocalAliasBucket { id, access_key_id, alias, - } => Ok(AdminApiRequest::AddLocalBucketAlias(AddLocalBucketAliasRequest { - access_key_id, + } => Ok(AdminApiRequest::AddBucketAlias(AddBucketAliasRequest { + access_key_id: Some(access_key_id), bucket_id: id, alias, })), @@ -199,9 +199,9 @@ impl AdminApiRequest { id, access_key_id, alias, - } => Ok(AdminApiRequest::RemoveLocalBucketAlias( - RemoveLocalBucketAliasRequest { - access_key_id, + } => Ok(AdminApiRequest::RemoveBucketAlias( + RemoveBucketAliasRequest { + access_key_id: Some(access_key_id), bucket_id: id, alias, }, -- cgit v1.2.3