diff --git a/src/api/admin/api_server.rs b/src/api/admin/api_server.rs index 78d7b251..d2e2e40d 100644 --- a/src/api/admin/api_server.rs +++ b/src/api/admin/api_server.rs @@ -23,7 +23,6 @@ use garage_util::time::now_msec; use garage_api_common::generic_server::*; use garage_api_common::helpers::*; -use crate::api::AdminApiRequest::GetCurrentAdminTokenInfo; use crate::api::*; use crate::error::*; use crate::router_v0; diff --git a/src/api/admin/bucket.rs b/src/api/admin/bucket.rs index d5c7f34f..77541e4f 100644 --- a/src/api/admin/bucket.rs +++ b/src/api/admin/bucket.rs @@ -697,20 +697,21 @@ async fn bucket_info_results( }), keys: relevant_keys .into_values() - .map(|key| { + .filter_map(|key| { let p = key.state.as_option().unwrap(); - GetBucketInfoKey { + let permissions = p + .authorized_buckets + .get(&bucket.id) + .filter(|p| p.is_any()) + .map(|p| ApiBucketKeyPerm { + read: p.allow_read, + write: p.allow_write, + owner: p.allow_owner, + })?; + Some(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(), + permissions, bucket_local_aliases: p .local_aliases .items() @@ -718,7 +719,7 @@ async fn bucket_info_results( .filter(|(_, _, b)| *b == Some(bucket.id)) .map(|(n, _, _)| n.to_string()) .collect::>(), - } + }) }) .collect::>(), objects: *counters.get(OBJECTS).unwrap_or(&0), diff --git a/src/api/admin/key.rs b/src/api/admin/key.rs index 7f0d819f..095c3777 100644 --- a/src/api/admin/key.rs +++ b/src/api/admin/key.rs @@ -230,9 +230,18 @@ async fn key_info_results( }, buckets: relevant_buckets .into_values() - .map(|bucket| { + .filter_map(|bucket| { let state = bucket.state.as_option().unwrap(); - KeyInfoBucketResponse { + let permissions = key_state + .authorized_buckets + .get(&bucket.id) + .filter(|p| p.is_any()) + .map(|p| ApiBucketKeyPerm { + read: p.allow_read, + write: p.allow_write, + owner: p.allow_owner, + })?; + Some(KeyInfoBucketResponse { id: hex::encode(bucket.id), global_aliases: state .aliases @@ -248,16 +257,8 @@ async fn key_info_results( .filter(|((k, _), _, a)| *a && *k == key.key_id) .map(|((_, n), _, _)| n.to_string()) .collect::>(), - permissions: key_state - .authorized_buckets - .get(&bucket.id) - .map(|p| ApiBucketKeyPerm { - read: p.allow_read, - write: p.allow_write, - owner: p.allow_owner, - }) - .unwrap_or_default(), - } + permissions, + }) }) .collect::>(), };