diff --git a/spec/SDD-Keylime-Monitoring-Tool.md b/spec/SDD-Keylime-Monitoring-Tool.md index bf2b710..83d98ee 100644 --- a/spec/SDD-Keylime-Monitoring-Tool.md +++ b/spec/SDD-Keylime-Monitoring-Tool.md @@ -1041,6 +1041,7 @@ Maximum 5 parallel concurrent log fetches to the Verifier API, enforced via Toki | Explicit time format selection (12h/24h) | Accommodates regional conventions (e.g., US 12-hour vs European 24-hour); 24h default avoids AM/PM ambiguity in operational contexts | FR-080 | | Sidebar alert indicator for service outages | Surfaces integration health at a glance without navigating away; shares cached TanStack Query data with Integrations page to avoid extra requests | FR-081 | | Agent UUID hyperlinks in failure list | One-click drill-down from failure to agent detail eliminates manual navigation; uses React Router `` for SPA navigation without full reload | FR-082 | +| Inline copy-to-clipboard button in Raw Data source selector | Single compact button adjacent to filter group copies whichever JSON view is active; uses Clipboard API with 2s checkmark feedback for confirmation; avoids per-view copy buttons to reduce clutter | FR-083 | --- @@ -1106,7 +1107,7 @@ Maximum 5 parallel concurrent log fetches to the Verifier API, enforced via Toki | FR-016 | 3.4.3 | `POST /api/agents/bulk` | | FR-018 | 3.3.2, 3.4.3 | Full agent model, `GET /api/agents/:id` | | FR-019 | 3.4.3, 3.6.1 | `POST /api/agents/:id/actions/:action` | -| FR-020 | 3.4.3 | Agent detail tabs: timeline, TPM Policy, IMA, boot, certs, raw (with backend/registrar/verifier source selector) | +| FR-020 | 3.4.3 | Agent detail tabs: timeline, TPM Policy, IMA, boot, certs, raw (with backend/registrar/verifier source selector, copy button per FR-083) | | FR-021 | 3.4.3 | TPM Policy tab — reads `tpm_policy` from agent detail (`GET /api/agents/:id`) | | FR-024 | 3.4.3, 3.7.1 | Attestation timeline with distribution algorithm | | FR-025 | 3.3.4 | Alert types and severity | @@ -1141,6 +1142,7 @@ Maximum 5 parallel concurrent log fetches to the Verifier API, enforced via Toki | FR-080 | 3.8.2 | `visualizationStore`: time format selection (12h/24h), 24h default, applied to all time-of-day rendering | | FR-081 | 3.2.2 | `Sidebar.tsx`: `useHasServiceDown()` hook queries integration health, renders exclamation badge on Integrations nav item | | FR-082 | 3.2.2 | Failure categorization list renders agent UUIDs as React Router `` to `/agents/{agent_id}` detail page | +| FR-083 | 3.4.3 | Raw Data tab: compact copy icon button to the right of source selector group; Clipboard API with 2s checkmark feedback | ### 6.2 Non-Functional Requirements diff --git a/spec/SRS-Keylime-Monitoring-Tool.md b/spec/SRS-Keylime-Monitoring-Tool.md index 79f111d..d8fc67b 100644 --- a/spec/SRS-Keylime-Monitoring-Tool.md +++ b/spec/SRS-Keylime-Monitoring-Tool.md @@ -116,6 +116,7 @@ The System transforms Keylime from a CLI-driven security tool into a visual oper | FR-080 | Time format selection (12h/24h) for timestamp rendering | MUST | Settings - Visualization | | FR-081 | Sidebar alert indicator for integration service outages | MUST | Dashboard - Navigation Structure | | FR-082 | Agent ID hyperlinks in failure categorization list | MUST | Attestation Analytics - Failure Categorization | +| FR-083 | Copy-to-clipboard button in Raw Data source selector toolbar | MUST | Agent Detail - Raw Data | ### 2.2 Non-Functional Requirements @@ -727,7 +728,7 @@ Feature: Agent Detail Actions ### FR-020: Agent Detail Six-Tab Deep-Dive -**Description:** The System MUST provide six specialized tabs on the agent detail page: (1) Timeline — attestation success/failure history with zoomable time range; (2) PCR Values — current PCR bank values with change history and diffs; (3) IMA Log — measurement list entries with policy match/mismatch indicators and search by file path or hash; (4) Boot Log — UEFI event log entries with measured boot validation; (5) Certificates — EK, AK, IAK, IDevID, mTLS certificate details and expiry countdown; (6) Raw Data — JSON view with source selector offering three views: Backend Data (merged agent summary computed by the dashboard), Registrar Data (raw JSON from the Keylime Registrar API), and Verifier Data (raw JSON from the Keylime Verifier API), with copy/export per view. +**Description:** The System MUST provide six specialized tabs on the agent detail page: (1) Timeline — attestation success/failure history with zoomable time range; (2) PCR Values — current PCR bank values with change history and diffs; (3) IMA Log — measurement list entries with policy match/mismatch indicators and search by file path or hash; (4) Boot Log — UEFI event log entries with measured boot validation; (5) Certificates — EK, AK, IAK, IDevID, mTLS certificate details and expiry countdown; (6) Raw Data — JSON view with source selector offering three views: Backend Data (merged agent summary computed by the dashboard), Registrar Data (raw JSON from the Keylime Registrar API), and Verifier Data (raw JSON from the Keylime Verifier API), with a copy-to-clipboard button inline with the source selector (FR-083). **IMA Log Entry Schema:** Each IMA log entry returned by the backend MUST include: `pcr` (PCR index, typically 10), `template_hash` (SHA-256 hash of the template data), `template_name` (IMA template type, e.g., `ima-ng`), `filedata_hash` (hash of the measured file content), and `filename` (absolute path of the measured file). @@ -786,19 +787,16 @@ Feature: Agent Detail Tabs Given the user is viewing the "Raw Data" tab for agent "a1b2c3d4" When the user selects the "Backend Data" source Then the merged agent summary JSON computed by the dashboard backend MUST be displayed - And a "Copy" button MUST allow copying the JSON to clipboard Scenario: View raw registrar data Given the user is viewing the "Raw Data" tab for agent "a1b2c3d4" When the user selects the "Registrar Data" source Then the full agent JSON record from the Keylime Registrar API MUST be displayed - And a "Copy" button MUST allow copying the JSON to clipboard Scenario: View raw verifier data Given the user is viewing the "Raw Data" tab for agent "a1b2c3d4" When the user selects the "Verifier Data" source Then the full agent JSON record from the Keylime Verifier API MUST be displayed - And a "Copy" button MUST allow copying the JSON to clipboard Scenario: Tab data unavailable due to API error Given the user is viewing agent "a1b2c3d4" detail page @@ -2578,6 +2576,38 @@ Feature: Agent ID Hyperlinks in Failure Categorization And agent "def-456" MUST link to "/agents/def-456" ``` +### FR-083: Raw Data Copy-to-Clipboard Button + +**Description:** The System MUST display a compact "Copy" icon button positioned immediately to the right of the Raw Data source selector button group ("All" / "Backend" / "Registrar" / "Verifier"). When clicked, the button MUST copy the currently displayed JSON data to the user's clipboard using the Clipboard API. The button MUST work regardless of which source filter is active. After a successful copy, the button MUST provide brief visual feedback (e.g., a checkmark icon or tooltip confirmation) before reverting to its default state. + +**Trace:** Agent Detail - Raw Data + +```gherkin +Feature: Raw Data Copy-to-Clipboard Button + + Scenario: Copy button is displayed next to source selector + Given the user is viewing the "Raw Data" tab for agent "a1b2c3d4" + Then a "Copy" icon button MUST be displayed to the right of the source selector group + And the button MUST be visually compact and aligned with the selector buttons + + Scenario: Copy combined raw data to clipboard + Given the user is viewing the "Raw Data" tab with "All" sources selected + When the user clicks the "Copy" button + Then the combined JSON from all three sources MUST be copied to the clipboard + And the button MUST show brief visual feedback confirming the copy + + Scenario: Copy filtered source data to clipboard + Given the user is viewing the "Raw Data" tab with "Backend Data" selected + When the user clicks the "Copy" button + Then only the Backend Data JSON MUST be copied to the clipboard + And the button MUST show brief visual feedback confirming the copy + + Scenario: Copy feedback resets after delay + Given the user has clicked the "Copy" button and visual feedback is shown + When 2 seconds have elapsed + Then the button MUST return to its default icon state +``` + --- ## 4. Non-Functional Requirements Detail