From 405dd5537115eb4031087a9ca4dcca0508aa830f Mon Sep 17 00:00:00 2001 From: Dante Catalfamo <43040593+dantecatalfamo@users.noreply.github.com> Date: Wed, 21 May 2025 16:47:11 -0400 Subject: [PATCH] Make `read_host_disk_encryption_key` a host activity (#28858) #28521 --- changes/28521-host-activity-read-disk-key | 1 + frontend/interfaces/activity.ts | 1 + .../details/cards/Activity/ActivityConfig.tsx | 2 + .../ReadHostDiskEncryptionKey.tests.tsx | 41 +++++++++++++++++++ .../ReadHostDiskEncryptionKey.tsx | 25 +++++++++++ .../ReadHostDiskEncryptionKey/index.ts | 1 + server/fleet/activities.go | 4 ++ server/service/hosts_test.go | 1 + 8 files changed, 76 insertions(+) create mode 100644 changes/28521-host-activity-read-disk-key create mode 100644 frontend/pages/hosts/details/cards/Activity/ActivityItems/ReadHostDiskEncryptionKey/ReadHostDiskEncryptionKey.tests.tsx create mode 100644 frontend/pages/hosts/details/cards/Activity/ActivityItems/ReadHostDiskEncryptionKey/ReadHostDiskEncryptionKey.tsx create mode 100644 frontend/pages/hosts/details/cards/Activity/ActivityItems/ReadHostDiskEncryptionKey/index.ts diff --git a/changes/28521-host-activity-read-disk-key b/changes/28521-host-activity-read-disk-key new file mode 100644 index 0000000000..1c3e79fffb --- /dev/null +++ b/changes/28521-host-activity-read-disk-key @@ -0,0 +1 @@ +- Fixed reading disk encryption key not showing up in host activities diff --git a/frontend/interfaces/activity.ts b/frontend/interfaces/activity.ts index 75206ec157..0aef383c53 100644 --- a/frontend/interfaces/activity.ts +++ b/frontend/interfaces/activity.ts @@ -128,6 +128,7 @@ export type IHostPastActivityType = | ActivityType.RanScript | ActivityType.LockedHost | ActivityType.WipedHost + | ActivityType.ReadHostDiskEncryptionKey | ActivityType.UnlockedHost | ActivityType.InstalledSoftware | ActivityType.UninstalledSoftware diff --git a/frontend/pages/hosts/details/cards/Activity/ActivityConfig.tsx b/frontend/pages/hosts/details/cards/Activity/ActivityConfig.tsx index fdd17f8410..7d36fffc6c 100644 --- a/frontend/pages/hosts/details/cards/Activity/ActivityConfig.tsx +++ b/frontend/pages/hosts/details/cards/Activity/ActivityConfig.tsx @@ -14,6 +14,7 @@ import RanScriptActivityItem from "./ActivityItems/RanScriptActivityItem"; import LockedHostActivityItem from "./ActivityItems/LockedHostActivityItem"; import WipedHostActivityItem from "./ActivityItems/WipedHostActivityItem"; import UnlockedHostActivityItem from "./ActivityItems/UnlockedHostActivityItem"; +import ReadHostDiskEncryptionKeyActivityItem from "./ActivityItems/ReadHostDiskEncryptionKey"; import InstalledSoftwareActivityItem from "./ActivityItems/InstalledSoftwareActivityItem"; import CanceledRunScriptActivityItem from "./ActivityItems/CanceledRunScriptActivityItem"; import CanceledInstallSoftwareActivityItem from "./ActivityItems/CanceledInstallSoftwareActivityItem"; @@ -48,6 +49,7 @@ export const pastActivityComponentMap: Record< [ActivityType.RanScript]: RanScriptActivityItem, [ActivityType.LockedHost]: LockedHostActivityItem, [ActivityType.WipedHost]: WipedHostActivityItem, + [ActivityType.ReadHostDiskEncryptionKey]: ReadHostDiskEncryptionKeyActivityItem, [ActivityType.UnlockedHost]: UnlockedHostActivityItem, [ActivityType.InstalledSoftware]: InstalledSoftwareActivityItem, [ActivityType.UninstalledSoftware]: InstalledSoftwareActivityItem, diff --git a/frontend/pages/hosts/details/cards/Activity/ActivityItems/ReadHostDiskEncryptionKey/ReadHostDiskEncryptionKey.tests.tsx b/frontend/pages/hosts/details/cards/Activity/ActivityItems/ReadHostDiskEncryptionKey/ReadHostDiskEncryptionKey.tests.tsx new file mode 100644 index 0000000000..50f4870391 --- /dev/null +++ b/frontend/pages/hosts/details/cards/Activity/ActivityItems/ReadHostDiskEncryptionKey/ReadHostDiskEncryptionKey.tests.tsx @@ -0,0 +1,41 @@ +import React from "react"; +import { render, screen } from "@testing-library/react"; +import { createMockHostPastActivity } from "__mocks__/activityMock"; + +import ReadHostDiskEncryptionKeyActivityItem from "./ReadHostDiskEncryptionKey"; + +describe("ReadHostDiskEncryptionKeyActivityItem", () => { + it("renders the activity content", () => { + render( + + ); + + expect(screen.getByText("Test User")).toBeVisible(); + expect(screen.getByText(/viewed the disk encryption key/i)).toBeVisible(); + }); + + it("does not render the cancel icon", () => { + render( + + ); + + expect(screen.queryByTestId("close-icon")).not.toBeInTheDocument(); + }); + + it("does not render the show details icon", () => { + render( + + ); + + expect(screen.queryByTestId("info-outline-icon")).not.toBeInTheDocument(); + }); +}); diff --git a/frontend/pages/hosts/details/cards/Activity/ActivityItems/ReadHostDiskEncryptionKey/ReadHostDiskEncryptionKey.tsx b/frontend/pages/hosts/details/cards/Activity/ActivityItems/ReadHostDiskEncryptionKey/ReadHostDiskEncryptionKey.tsx new file mode 100644 index 0000000000..dbe4e0cd1e --- /dev/null +++ b/frontend/pages/hosts/details/cards/Activity/ActivityItems/ReadHostDiskEncryptionKey/ReadHostDiskEncryptionKey.tsx @@ -0,0 +1,25 @@ +import React from "react"; + +import ActivityItem from "components/ActivityItem"; + +import { IHostActivityItemComponentProps } from "../../ActivityConfig"; + +const baseClass = "locked-host-activity-item"; + +const ReadHostDiskEncryptionKeyActivityItem = ({ + activity, +}: IHostActivityItemComponentProps) => { + return ( + + {activity.actor_full_name} + viewed the disk encryption key for this host. + + ); +}; + +export default ReadHostDiskEncryptionKeyActivityItem; diff --git a/frontend/pages/hosts/details/cards/Activity/ActivityItems/ReadHostDiskEncryptionKey/index.ts b/frontend/pages/hosts/details/cards/Activity/ActivityItems/ReadHostDiskEncryptionKey/index.ts new file mode 100644 index 0000000000..1251518fdf --- /dev/null +++ b/frontend/pages/hosts/details/cards/Activity/ActivityItems/ReadHostDiskEncryptionKey/index.ts @@ -0,0 +1 @@ +export { default } from "./ReadHostDiskEncryptionKey"; diff --git a/server/fleet/activities.go b/server/fleet/activities.go index 301645c8b2..c0c14a8f98 100644 --- a/server/fleet/activities.go +++ b/server/fleet/activities.go @@ -1043,6 +1043,10 @@ func (a ActivityTypeReadHostDiskEncryptionKey) ActivityName() string { return "read_host_disk_encryption_key" } +func (a ActivityTypeReadHostDiskEncryptionKey) HostIDs() []uint { + return []uint{a.HostID} +} + func (a ActivityTypeReadHostDiskEncryptionKey) Documentation() (activity string, details string, detailsExample string) { return `Generated when a user reads the disk encryption key for a host.`, `This activity contains the following fields: diff --git a/server/service/hosts_test.go b/server/service/hosts_test.go index 995e2cfafd..b0a7e3d558 100644 --- a/server/service/hosts_test.go +++ b/server/service/hosts_test.go @@ -1483,6 +1483,7 @@ func TestHostEncryptionKey(t *testing.T) { ) error { act := activity.(fleet.ActivityTypeReadHostDiskEncryptionKey) require.Equal(t, tt.host.ID, act.HostID) + require.Equal(t, []uint{tt.host.ID}, act.HostIDs()) require.EqualValues(t, act.HostDisplayName, tt.host.DisplayName()) return nil }