57 lines
2.7 KiB
Markdown
57 lines
2.7 KiB
Markdown
|
|
# Implementation Plan: Queue Hostname & IP Display
|
||
|
|
|
||
|
|
## Overview
|
||
|
|
|
||
|
|
Add hostname tracking to the Ivanti todo queue across database, backend API, and frontend display layers. All changes are additive and backward-compatible.
|
||
|
|
|
||
|
|
## Tasks
|
||
|
|
|
||
|
|
- [x] 1. Create database migration to add hostname column
|
||
|
|
- Create `backend/migrations/add_todo_queue_hostname.js` following the exact pattern of `add_todo_queue_ip_address.js`
|
||
|
|
- Use `ALTER TABLE ivanti_todo_queue ADD COLUMN hostname TEXT`
|
||
|
|
- Handle `duplicate column name` error for idempotency
|
||
|
|
- Log appropriate messages for success and skip scenarios
|
||
|
|
- _Requirements: 1.1, 1.2, 1.3_
|
||
|
|
|
||
|
|
- [x] 2. Update backend API endpoints to accept and store hostname
|
||
|
|
- [x] 2.1 Update POST `/` (single-item) endpoint in `backend/routes/ivantiTodoQueue.js`
|
||
|
|
- Extract `hostname` from `req.body`
|
||
|
|
- Sanitize: if present and a string, trim and slice to 255 chars; otherwise `null`
|
||
|
|
- Add `hostname` to the INSERT column list and parameter array
|
||
|
|
- _Requirements: 2.1, 2.3_
|
||
|
|
|
||
|
|
- [x] 2.2 Update POST `/batch` endpoint in `backend/routes/ivantiTodoQueue.js`
|
||
|
|
- For each finding, extract `hostname` from `f.hostname`
|
||
|
|
- Apply same sanitization as single-item (trim, slice to 255, or null)
|
||
|
|
- Add `hostname` to the per-row INSERT column list and parameter array
|
||
|
|
- _Requirements: 2.2, 2.3_
|
||
|
|
|
||
|
|
- [x] 3. Checkpoint
|
||
|
|
- Ensure all backend changes are consistent, ask the user if questions arise.
|
||
|
|
|
||
|
|
- [x] 4. Update frontend to pass hostname and display it in the queue panel
|
||
|
|
- [x] 4.1 Update `addToQueue` function in `ReportingPage.js`
|
||
|
|
- Add `hostname: finding.hostName || null` to the POST request body
|
||
|
|
- _Requirements: 3.1_
|
||
|
|
|
||
|
|
- [x] 4.2 Update `submitBatch` function in `ReportingPage.js`
|
||
|
|
- Add `hostname: f.hostName || null` to each finding object in the payload
|
||
|
|
- _Requirements: 3.2_
|
||
|
|
|
||
|
|
- [x] 4.3 Update CARD section rendering in QueuePanel (`ReportingPage.js`)
|
||
|
|
- Display `hostname` below finding_id (when present)
|
||
|
|
- Display `ip_address` below hostname (when present)
|
||
|
|
- Handle all combinations: both present, only hostname, only ip_address, neither
|
||
|
|
- Use monospace styling at `0.68rem` consistent with existing ip_address display
|
||
|
|
- _Requirements: 4.1, 4.2, 4.3, 4.4, 4.5_
|
||
|
|
|
||
|
|
- [x] 4.4 Update vendor section (FP/Archer) rendering in QueuePanel (`ReportingPage.js`)
|
||
|
|
- Display `hostname` below the CVE list (when present)
|
||
|
|
- Display `ip_address` below hostname or below CVE list if no hostname
|
||
|
|
- Handle all combinations: both present, only one, neither
|
||
|
|
- Use monospace styling at `0.62rem` / `0.68rem` with muted colors matching existing design
|
||
|
|
- _Requirements: 5.1, 5.2, 5.3, 5.4_
|
||
|
|
|
||
|
|
- [x] 5. Final checkpoint
|
||
|
|
- Ensure all changes are wired together end-to-end, ask the user if questions arise.
|