fix(admin): restore access key listing and guard boot-time uptime (#2580)

Co-authored-by: GatewayJ <8352692332qq.com>
This commit is contained in:
GatewayJ
2026-04-18 02:55:38 +08:00
committed by GitHub
parent 96fb06f48e
commit 03f8270a60
3 changed files with 31 additions and 12 deletions
+25 -8
View File
@@ -1018,7 +1018,9 @@ fn parse_list_access_keys_query(query: Option<&str>) -> ListAccessKeysQuery {
for (key, value) in form_urlencoded::parse(query.as_bytes()) {
match key.as_ref() {
"users" => parsed.users.push(value.into_owned()),
"users" if !value.is_empty() => {
parsed.users.push(value.into_owned());
}
"all" => parsed.all = parse_bool_param(value.as_ref()),
"listType" => parsed.list_type = value.into_owned(),
_ => {}
@@ -1124,13 +1126,9 @@ impl Operation for ListAccessKeysBulk {
}
users
} else {
let mut checked = Vec::new();
for user in requested_users {
if iam_store.get_user(&user).await.is_some() {
checked.push(user);
}
}
checked
// Keep requested identities as-is. Some valid parent users (for example external
// identities) may not be persisted as regular IAM users, but can still own keys.
requested_users
};
let (list_sts_keys, list_service_accounts) = match query.list_type.as_str() {
@@ -1399,6 +1397,25 @@ mod tests {
assert_eq!(query.list_type, ACCESS_KEY_LIST_SVCACC_ONLY);
}
#[test]
fn list_access_keys_query_ignores_empty_users_values() {
let query = parse_list_access_keys_query(Some("users=&users=alice&users=&listType=all"));
assert_eq!(query.users, vec!["alice".to_string()]);
assert!(!query.all);
assert_eq!(query.list_type, ACCESS_KEY_LIST_ALL);
}
#[test]
fn list_access_keys_query_all_with_empty_users_does_not_conflict() {
let query = parse_list_access_keys_query(Some("users=&all=true&listType=all"));
assert!(query.users.is_empty());
assert!(query.all);
assert_eq!(query.list_type, ACCESS_KEY_LIST_ALL);
assert!(!query.all || query.users.is_empty());
}
#[test]
fn list_access_keys_query_defaults_to_all_list_type() {
let query = ListAccessKeysQuery::default();