aboutsummaryrefslogtreecommitdiff
path: root/src/api/admin/bucket.rs
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2022-05-17 16:42:13 +0200
committerAlex Auvolat <alex@adnab.me>2022-05-17 16:42:13 +0200
commit8ff95f09c9edf218b6302470cd57868147316e59 (patch)
tree78d0f99a0a8b005690fc2ec25a59ba9f5a09ce33 /src/api/admin/bucket.rs
parent86a3fe8ec56d0ea180b48970fb626d10000dba8d (diff)
downloadgarage-8ff95f09c9edf218b6302470cd57868147316e59.tar.gz
garage-8ff95f09c9edf218b6302470cd57868147316e59.zip
Return website config in GetBucketInfo, use serde(rename_all)
Diffstat (limited to 'src/api/admin/bucket.rs')
-rw-r--r--src/api/admin/bucket.rs109
1 files changed, 61 insertions, 48 deletions
diff --git a/src/api/admin/bucket.rs b/src/api/admin/bucket.rs
index 00450319..dacbd427 100644
--- a/src/api/admin/bucket.rs
+++ b/src/api/admin/bucket.rs
@@ -67,17 +67,16 @@ pub async fn handle_list_buckets(garage: &Arc<Garage>) -> Result<Response<Body>,
}
#[derive(Serialize)]
+#[serde(rename_all = "camelCase")]
struct ListBucketResultItem {
id: String,
- #[serde(rename = "globalAliases")]
global_aliases: Vec<String>,
- #[serde(rename = "localAliases")]
local_aliases: Vec<BucketLocalAlias>,
}
#[derive(Serialize)]
+#[serde(rename_all = "camelCase")]
struct BucketLocalAlias {
- #[serde(rename = "accessKeyId")]
access_key_id: String,
alias: String,
}
@@ -156,42 +155,50 @@ async fn bucket_info_results(
let state = bucket.state.as_option().unwrap();
- let res = GetBucketInfoResult {
- id: hex::encode(&bucket.id),
- global_aliases: state
- .aliases
- .items()
- .iter()
- .filter(|(_, _, a)| *a)
- .map(|(n, _, _)| n.to_string())
- .collect::<Vec<_>>(),
- keys: relevant_keys
- .into_iter()
- .map(|(_, key)| {
- let p = key.state.as_option().unwrap();
- GetBucketInfoKey {
- access_key_id: key.key_id,
- name: p.name.get().to_string(),
- permissions: p
- .authorized_buckets
- .get(&bucket.id)
- .map(|p| ApiBucketKeyPerm {
- read: p.allow_read,
- write: p.allow_write,
- owner: p.allow_owner,
- })
- .unwrap_or_default(),
- bucket_local_aliases: p
- .local_aliases
- .items()
- .iter()
- .filter(|(_, _, b)| *b == Some(bucket.id))
- .map(|(n, _, _)| n.to_string())
- .collect::<Vec<_>>(),
+ let res =
+ GetBucketInfoResult {
+ id: hex::encode(&bucket.id),
+ global_aliases: state
+ .aliases
+ .items()
+ .iter()
+ .filter(|(_, _, a)| *a)
+ .map(|(n, _, _)| n.to_string())
+ .collect::<Vec<_>>(),
+ website_access: state.website_config.get().is_some(),
+ website_config: state.website_config.get().clone().map(|wsc| {
+ GetBucketInfoWebsiteResult {
+ index_document: wsc.index_document,
+ error_document: wsc.error_document,
}
- })
- .collect::<Vec<_>>(),
- };
+ }),
+ keys: relevant_keys
+ .into_iter()
+ .map(|(_, key)| {
+ let p = key.state.as_option().unwrap();
+ GetBucketInfoKey {
+ access_key_id: key.key_id,
+ name: p.name.get().to_string(),
+ permissions: p
+ .authorized_buckets
+ .get(&bucket.id)
+ .map(|p| ApiBucketKeyPerm {
+ read: p.allow_read,
+ write: p.allow_write,
+ owner: p.allow_owner,
+ })
+ .unwrap_or_default(),
+ bucket_local_aliases: p
+ .local_aliases
+ .items()
+ .iter()
+ .filter(|(_, _, b)| *b == Some(bucket.id))
+ .map(|(n, _, _)| n.to_string())
+ .collect::<Vec<_>>(),
+ }
+ })
+ .collect::<Vec<_>>(),
+ };
let resp_json = serde_json::to_string_pretty(&res).map_err(GarageError::from)?;
Ok(Response::builder()
@@ -200,21 +207,29 @@ async fn bucket_info_results(
}
#[derive(Serialize)]
+#[serde(rename_all = "camelCase")]
struct GetBucketInfoResult {
id: String,
- #[serde(rename = "globalAliases")]
global_aliases: Vec<String>,
+ website_access: bool,
+ #[serde(default)]
+ website_config: Option<GetBucketInfoWebsiteResult>,
keys: Vec<GetBucketInfoKey>,
}
#[derive(Serialize)]
+#[serde(rename_all = "camelCase")]
+struct GetBucketInfoWebsiteResult {
+ index_document: String,
+ error_document: Option<String>,
+}
+
+#[derive(Serialize)]
+#[serde(rename_all = "camelCase")]
struct GetBucketInfoKey {
- #[serde(rename = "accessKeyId")]
access_key_id: String,
- #[serde(rename = "name")]
name: String,
permissions: ApiBucketKeyPerm,
- #[serde(rename = "bucketLocalAliases")]
bucket_local_aliases: Vec<String>,
}
@@ -293,19 +308,18 @@ pub async fn handle_create_bucket(
}
#[derive(Deserialize)]
+#[serde(rename_all = "camelCase")]
struct CreateBucketRequest {
- #[serde(rename = "globalAlias")]
global_alias: Option<String>,
- #[serde(rename = "localAlias")]
local_alias: Option<CreateBucketLocalAlias>,
}
#[derive(Deserialize)]
+#[serde(rename_all = "camelCase")]
struct CreateBucketLocalAlias {
- #[serde(rename = "accessKeyId")]
access_key_id: String,
alias: String,
- #[serde(rename = "allPermissions", default)]
+ #[serde(default)]
all_permissions: bool,
}
@@ -420,10 +434,9 @@ pub async fn handle_bucket_change_key_perm(
}
#[derive(Deserialize)]
+#[serde(rename_all = "camelCase")]
struct BucketKeyPermChangeRequest {
- #[serde(rename = "bucketId")]
bucket_id: String,
- #[serde(rename = "accessKeyId")]
access_key_id: String,
permissions: ApiBucketKeyPerm,
}