From 69ba89ee3f2d93567302e6220acc96bc121f85de Mon Sep 17 00:00:00 2001 From: overtrue Date: Tue, 24 Mar 2026 03:07:24 +0800 Subject: [PATCH] fix(event): normalize shorthand notification events --- crates/cli/src/commands/event.rs | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/crates/cli/src/commands/event.rs b/crates/cli/src/commands/event.rs index add364b..80a9ee7 100644 --- a/crates/cli/src/commands/event.rs +++ b/crates/cli/src/commands/event.rs @@ -346,7 +346,7 @@ fn parse_event_list(values: &[String]) -> Vec { .flat_map(|value| value.split(',')) .map(str::trim) .filter(|value| !value.is_empty()) - .map(ToString::to_string) + .map(normalize_event_name) .collect(); if events.is_empty() { @@ -358,6 +358,17 @@ fn parse_event_list(values: &[String]) -> Vec { events } +fn normalize_event_name(value: &str) -> String { + match value.to_ascii_lowercase().as_str() { + "put" => "s3:ObjectCreated:*".to_string(), + "get" => "s3:ObjectAccessed:*".to_string(), + "delete" => "s3:ObjectRemoved:*".to_string(), + "replica" => "s3:Replication:*".to_string(), + "ilm" => "s3:ObjectTransition:*".to_string(), + _ => value.to_string(), + } +} + fn infer_target_from_arn(arn: &str) -> Result { if arn.contains(":sqs:") { Ok(NotificationTarget::Queue) @@ -441,6 +452,22 @@ mod tests { ); } + #[test] + fn test_parse_event_list_normalizes_shorthand_events() { + let events = parse_event_list(&["put,get,delete,replica,ilm,PUT,delete".to_string()]); + + assert_eq!( + events, + vec![ + "s3:ObjectAccessed:*".to_string(), + "s3:ObjectCreated:*".to_string(), + "s3:ObjectRemoved:*".to_string(), + "s3:ObjectTransition:*".to_string(), + "s3:Replication:*".to_string(), + ] + ); + } + #[test] fn test_infer_target_from_arn() { assert_eq!(