diff --git a/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap b/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap index ca989753cd8ec..0875764281c82 100644 --- a/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap +++ b/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap @@ -706,7 +706,7 @@ exports[`list of all events 1`] = ` - User [undefined] failed to remove member [undefined] from access list [access-list] + User [mike] failed to remove members [carrot, apple, banana] from access list [access-list] - User [undefined] removed member [undefined] from access list [access-list] + User [mike] removed member [user] from access list [access-list] - User [undefined] failed to update member [undefined] in access list [access-list] + User [mike] failed to update member [user] in access list [access-list] - User [undefined] updated member [undefined] in access list [access-list] + User [mike] updated member [user] in access list [access-list] - User [undefined] failed to add member [undefined] to access list [access-list] + User [mike] failed to add member [user] to access list [access-list] - User [undefined] added member [undefined] to access list [access-list] + User [mike] added member [user] to access list [access-list] - `User [${updated_by}] added member [${member_name}] to access list [${access_list_name}]`, + format: ({ access_list_name, members, updated_by }) => + `User [${updated_by}] added ${formatMembers( + members + )} to access list [${access_list_name}]`, }, [eventCodes.ACCESS_LIST_MEMBER_CREATE_FAILURE]: { type: 'access_list.member.create', desc: 'Access list member addition failure', - format: ({ access_list_name, member_name, updated_by }) => - `User [${updated_by}] failed to add member [${member_name}] to access list [${access_list_name}]`, + format: ({ access_list_name, members, updated_by }) => + `User [${updated_by}] failed to add ${formatMembers( + members + )} to access list [${access_list_name}]`, }, [eventCodes.ACCESS_LIST_MEMBER_UPDATE]: { type: 'access_list.member.update', desc: 'Access list member updated', - format: ({ access_list_name, member_name, updated_by }) => - `User [${updated_by}] updated member [${member_name}] in access list [${access_list_name}]`, + format: ({ access_list_name, members, updated_by }) => + `User [${updated_by}] updated ${formatMembers( + members + )} in access list [${access_list_name}]`, }, [eventCodes.ACCESS_LIST_MEMBER_UPDATE_FAILURE]: { type: 'access_list.member.update', desc: 'Access list member update failure', - format: ({ access_list_name, member_name, updated_by }) => - `User [${updated_by}] failed to update member [${member_name}] in access list [${access_list_name}]`, + format: ({ access_list_name, members, updated_by }) => + `User [${updated_by}] failed to update ${formatMembers( + members + )} in access list [${access_list_name}]`, }, [eventCodes.ACCESS_LIST_MEMBER_DELETE]: { type: 'access_list.member.delete', desc: 'Access list member removed', - format: ({ access_list_name, member_name, updated_by }) => - `User [${updated_by}] removed member [${member_name}] from access list [${access_list_name}]`, + format: ({ access_list_name, members, updated_by }) => + `User [${updated_by}] removed ${formatMembers( + members + )} from access list [${access_list_name}]`, }, [eventCodes.ACCESS_LIST_MEMBER_DELETE_FAILURE]: { type: 'access_list.member.delete', desc: 'Access list member removal failure', - format: ({ access_list_name, member_name, updated_by }) => - `User [${updated_by}] failed to remove member [${member_name}] from access list [${access_list_name}]`, + format: ({ access_list_name, members, updated_by }) => + `User [${updated_by}] failed to remove ${formatMembers( + members + )} from access list [${access_list_name}]`, }, [eventCodes.ACCESS_LIST_MEMBER_DELETE_ALL_FOR_ACCESS_LIST]: { type: 'access_list.member.delete_all_members', @@ -1575,3 +1588,10 @@ function truncateStr(str: string, len: number): string { } return str.substring(0, len - 3) + '...'; } + +function formatMembers(members: { member_name: string }[]) { + const memberNames = members.map(m => m.member_name); + const memberNamesJoined = memberNames.join(', '); + + return `${pluralize(memberNames.length, 'member')} [${memberNamesJoined}]`; +} diff --git a/web/packages/teleport/src/services/audit/types.ts b/web/packages/teleport/src/services/audit/types.ts index 69fd1f3ecb333..b67458cf8e09d 100644 --- a/web/packages/teleport/src/services/audit/types.ts +++ b/web/packages/teleport/src/services/audit/types.ts @@ -1377,53 +1377,23 @@ export type RawEvents = { updated_by: string; } >; - [eventCodes.ACCESS_LIST_MEMBER_CREATE]: RawEvent< - typeof eventCodes.ACCESS_LIST_MEMBER_CREATE, - { - access_list_name: string; - member_name: string; - updated_by: string; - } + [eventCodes.ACCESS_LIST_MEMBER_CREATE]: RawEventAccessList< + typeof eventCodes.ACCESS_LIST_MEMBER_CREATE >; - [eventCodes.ACCESS_LIST_MEMBER_CREATE_FAILURE]: RawEvent< - typeof eventCodes.ACCESS_LIST_MEMBER_CREATE_FAILURE, - { - access_list_name: string; - member_name: string; - updated_by: string; - } + [eventCodes.ACCESS_LIST_MEMBER_CREATE_FAILURE]: RawEventAccessList< + typeof eventCodes.ACCESS_LIST_MEMBER_CREATE_FAILURE >; - [eventCodes.ACCESS_LIST_MEMBER_UPDATE]: RawEvent< - typeof eventCodes.ACCESS_LIST_MEMBER_UPDATE, - { - access_list_name: string; - member_name: string; - updated_by: string; - } + [eventCodes.ACCESS_LIST_MEMBER_UPDATE]: RawEventAccessList< + typeof eventCodes.ACCESS_LIST_MEMBER_UPDATE >; - [eventCodes.ACCESS_LIST_MEMBER_UPDATE_FAILURE]: RawEvent< - typeof eventCodes.ACCESS_LIST_MEMBER_UPDATE_FAILURE, - { - access_list_name: string; - member_name: string; - updated_by: string; - } + [eventCodes.ACCESS_LIST_MEMBER_UPDATE_FAILURE]: RawEventAccessList< + typeof eventCodes.ACCESS_LIST_MEMBER_UPDATE_FAILURE >; - [eventCodes.ACCESS_LIST_MEMBER_DELETE]: RawEvent< - typeof eventCodes.ACCESS_LIST_MEMBER_DELETE, - { - access_list_name: string; - member_name: string; - updated_by: string; - } + [eventCodes.ACCESS_LIST_MEMBER_DELETE]: RawEventAccessList< + typeof eventCodes.ACCESS_LIST_MEMBER_DELETE >; - [eventCodes.ACCESS_LIST_MEMBER_DELETE_FAILURE]: RawEvent< - typeof eventCodes.ACCESS_LIST_MEMBER_DELETE_FAILURE, - { - access_list_name: string; - member_name: string; - updated_by: string; - } + [eventCodes.ACCESS_LIST_MEMBER_DELETE_FAILURE]: RawEventAccessList< + typeof eventCodes.ACCESS_LIST_MEMBER_DELETE_FAILURE >; [eventCodes.ACCESS_LIST_MEMBER_DELETE_ALL_FOR_ACCESS_LIST]: RawEvent< typeof eventCodes.ACCESS_LIST_MEMBER_DELETE_ALL_FOR_ACCESS_LIST, @@ -1575,6 +1545,15 @@ type RawEventUserToken = RawEvent< } >; +type RawEventAccessList = RawEvent< + T, + { + access_list_name: string; + members: { member_name: string }[]; + updated_by: string; + } +>; + type RawEventUser = RawEvent< T, {