aboutsummaryrefslogtreecommitdiff
path: root/src/api
diff options
context:
space:
mode:
authorAlex Auvolat <lx@deuxfleurs.fr>2025-01-28 19:03:39 +0100
committerAlex Auvolat <lx@deuxfleurs.fr>2025-01-29 19:26:16 +0100
commit12ea4cda5fe033fc2b9f1fec51ddc3d8b860a85f (patch)
treedaf39f76283143890210629d3b76fd6fa1cc6b3e /src/api
parent5fefbd94e9f8cded0d911f7cdae3d0382762607c (diff)
downloadgarage-12ea4cda5fe033fc2b9f1fec51ddc3d8b860a85f.tar.gz
garage-12ea4cda5fe033fc2b9f1fec51ddc3d8b860a85f.zip
admin api: merge calls to manage global/local aliases
Diffstat (limited to 'src/api')
-rw-r--r--src/api/admin/api.rs44
-rw-r--r--src/api/admin/bucket.rs98
-rw-r--r--src/api/admin/router_v2.rs34
3 files changed, 65 insertions, 111 deletions
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<String>,
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<String>,
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<Garage>) -> Result<AddGlobalBucketAliasResponse, Error> {
+ async fn handle(self, garage: &Arc<Garage>) -> Result<AddBucketAliasResponse, Error> {
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<Garage>) -> Result<RemoveGlobalBucketAliasResponse, Error> {
- 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<Garage>) -> Result<AddLocalBucketAliasResponse, Error> {
- 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<Garage>) -> Result<RemoveLocalBucketAliasResponse, Error> {
+ async fn handle(self, garage: &Arc<Garage>) -> Result<RemoveBucketAliasResponse, Error> {
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,
},