2026-05-01 21:11:47 +00:00
# STEAM Security Dashboard v1.0.0
2026-01-27 05:08:27 +00:00
2026-05-01 21:11:47 +00:00
A self-hosted vulnerability management dashboard for the NTS-AEO-STEAM and NTS-AEO-ACCESS-ENG business units. Centralises CVE tracking, Ivanti host finding triage, AEO compliance posture, FP/Archer/CARD exception workflows, and internal documentation in a single interface.
2026-01-27 05:08:27 +00:00
2026-05-01 21:11:47 +00:00
## Quick Start
2026-01-27 05:08:27 +00:00
2026-05-01 21:11:47 +00:00
### Prerequisites
2026-01-27 05:08:27 +00:00
2026-05-01 21:11:47 +00:00
- Node.js 18+
2026-05-08 09:17:38 -06:00
- Docker (for PostgreSQL 16 container)
2026-05-01 21:11:47 +00:00
- Python 3 with `python3-pandas` and `python3-openpyxl` (for compliance xlsx parsing)
2026-02-26 14:30:17 -07:00
2026-05-01 21:11:47 +00:00
### Install
2026-01-27 05:08:27 +00:00
```bash
2026-02-26 14:30:17 -07:00
git clone <repo-url>
2026-01-27 05:08:27 +00:00
cd cve-dashboard
2026-05-01 21:11:47 +00:00
# Backend dependencies
2026-01-27 05:08:27 +00:00
npm install
2026-05-01 21:11:47 +00:00
# Frontend dependencies
cd frontend && npm install && cd ..
2026-01-27 05:08:27 +00:00
2026-05-01 21:11:47 +00:00
# Python dependencies (Ubuntu/Debian)
2026-04-01 13:07:27 -06:00
apt install -y python3-pandas python3-openpyxl
2026-04-01 12:47:50 -06:00
```
2026-05-01 21:11:47 +00:00
### Configure
docs: update README for group-based access control, security hardening, and current architecture
- Replace role-based docs with group-based (Admin, Standard_User, Leadership, Read_Only)
- Update API reference with correct group requirements and new endpoints (JIRA tickets, archive, todo-queue)
- Remove hardcoded default credentials from installation instructions
- Document SESSION_SECRET as required with generation instructions
- Add new migrations to install sequence (archive, timestamps, counts history, user_groups, created_by)
- Update architecture tree with new files (ivantiArchive, ComplianceChartsPanel, etc.)
- Update security model with rate limiting, sandbox iframe, rehype-sanitize, Content-Disposition sanitization
- Update database schema docs with created_by columns, user_group triggers, cascade deletes
- Fix middleware reference from requireRole to requireGroup
- Remove stale admin123 references throughout
2026-04-07 11:29:33 -06:00
```bash
2026-05-01 21:11:47 +00:00
cp backend/.env.example backend/.env
2026-05-08 09:17:38 -06:00
# Edit backend/.env — at minimum set SESSION_SECRET and DATABASE_URL:
docs: update README for group-based access control, security hardening, and current architecture
- Replace role-based docs with group-based (Admin, Standard_User, Leadership, Read_Only)
- Update API reference with correct group requirements and new endpoints (JIRA tickets, archive, todo-queue)
- Remove hardcoded default credentials from installation instructions
- Document SESSION_SECRET as required with generation instructions
- Add new migrations to install sequence (archive, timestamps, counts history, user_groups, created_by)
- Update architecture tree with new files (ivantiArchive, ComplianceChartsPanel, etc.)
- Update security model with rate limiting, sandbox iframe, rehype-sanitize, Content-Disposition sanitization
- Update database schema docs with created_by columns, user_group triggers, cascade deletes
- Fix middleware reference from requireRole to requireGroup
- Remove stale admin123 references throughout
2026-04-07 11:29:33 -06:00
# openssl rand -base64 32
```
2026-05-08 09:17:38 -06:00
See `backend/.env.example` for all available options including `DATABASE_URL` , Ivanti API, Jira, and Atlas integration keys.
2026-01-27 05:08:27 +00:00
2026-05-08 09:17:38 -06:00
### Start PostgreSQL
The deploy script handles the full Postgres setup — container, schema, dependencies, and data migration from SQLite:
2026-01-27 05:08:27 +00:00
2026-02-26 14:30:17 -07:00
```bash
2026-05-08 09:17:38 -06:00
chmod +x scripts/deploy-postgres.sh
./scripts/deploy-postgres.sh
2026-01-27 05:08:27 +00:00
```
2026-05-08 09:17:38 -06:00
For fresh installs without an existing SQLite database, the script creates the schema and skips migration.
2026-05-01 17:15:41 +00:00
2026-05-01 21:11:47 +00:00
### Build and Run
2026-05-01 17:15:41 +00:00
```bash
2026-05-01 21:11:47 +00:00
# Build frontend
cd frontend && npm run build && cd ..
2026-05-01 17:15:41 +00:00
2026-05-01 21:11:47 +00:00
# Start servers
./start-servers.sh
2026-05-01 17:15:41 +00:00
```
2026-05-01 21:11:47 +00:00
Dashboard: http://localhost:3000 · API: http://localhost:3001
2026-01-27 05:08:27 +00:00
2026-05-08 09:17:38 -06:00
The helper scripts use `systemctl` under the hood — the systemd units in `systemd/` must be installed first. See the full manual for setup instructions.
2026-01-27 05:08:27 +00:00
2026-02-26 14:30:17 -07:00
## Features
2026-01-27 05:08:27 +00:00
2026-05-01 21:11:47 +00:00
| Feature | Description |
|---------|-------------|
| **CVE Management ** | Track CVEs across multiple vendors with document storage and NVD auto-fill |
| **Reporting ** | Ivanti host finding triage with donut charts, inline editing, advanced filtering, CSV/XLSX export |
| **Ivanti Queue ** | Personal staging list for batch FP, Archer, CARD, and Granite workflows |
| **FP Workflow ** | Submit false positive workflows directly to Ivanti API with attachments |
| **Compliance ** | Weekly AEO xlsx upload with diff preview, drift detection, per-team metric health cards |
| **Archive Tracking ** | Automatic detection of disappeared/returned findings with BU reassignment classification |
| **Findings Trend ** | Historical open vs closed chart with archive activity sparkline and shift reason tooltips |
| **Jira Integration ** | Create, sync, and track Jira Data Center tickets linked to CVE/vendor pairs |
| **Archer Tickets ** | Track risk acceptance exceptions (EXC numbers) linked to findings |
| **CARD API ** | Granite/CARD asset lookup integration for network device workflows |
| **Knowledge Base ** | Internal document library with inline PDF/Markdown viewing |
| **Access Control ** | Four user groups (Admin, Standard_User, Leadership, Read_Only) with full audit trail |
docs: refresh README and add security posture workflow diagrams
- Rename project to STEAM Security Dashboard throughout README
- Document Ivanti Queue feature (FP/Archer/CARD staging, per-user persistence)
- Document AEO Compliance page (upload flow, metric health cards, device
table, detail panel, View in Reporting link for 2.3.x metrics)
- Add all missing migrations to install instructions (queue, CARD,
ip_address, compliance tables)
- Add Ivanti Queue and Compliance endpoint tables to API reference
- Update architecture file tree with new routes, migrations, scripts,
and frontend components
- Add compliance DB tables to schema section
- Document parse_compliance_xlsx.py in scripts section
- Add security-posture-workflow-diagrams.md (Mermaid, VSCode/GitHub)
- Add security-posture-workflow-lucidchart.md (Lucidchart import format)
2026-04-01 10:46:39 -06:00
2026-05-01 21:11:47 +00:00
## Project Structure
2026-01-27 05:08:27 +00:00
```
cve-dashboard/
├── backend/
2026-05-01 21:11:47 +00:00
│ ├── server.js # Express API server
2026-05-08 09:17:38 -06:00
│ ├── db.js # PostgreSQL connection pool (pg)
│ ├── db-schema.sql # Complete DDL for fresh Postgres setup
│ ├── setup-postgres.js # Schema initializer (runs db-schema.sql)
2026-05-01 21:11:47 +00:00
│ ├── routes/ # API route handlers
│ ├── helpers/ # API clients (Ivanti, Jira, Atlas, CARD)
│ ├── middleware/ # Auth middleware
2026-05-08 09:17:38 -06:00
│ ├── migrations/ # Schema migrations (legacy SQLite deployments)
2026-05-01 21:11:47 +00:00
│ └── scripts/ # Compliance parser, data import utilities
├── frontend/
│ ├── src/
│ │ ├── App.js # Main app with routing
│ │ ├── components/ # React components
│ │ └── contexts/ # Auth context
│ └── public/
├── docs/
│ ├── api/ # API specs (Ivanti, Atlas, Jira)
│ ├── design/ # Design system, workflow diagrams
│ ├── guides/ # User guides, full reference manual
│ ├── security/ # Security audits and remediation plans
│ ├── testing/ # Test plans and scripts
│ └── troubleshooting/ # Investigation scripts and reports
2026-05-08 09:17:38 -06:00
├── docker-compose.yml # PostgreSQL 16 container definition
├── scripts/
│ └── deploy-postgres.sh # One-time deployment: container, schema, migration
2026-05-01 21:11:47 +00:00
├── systemd/ # systemd service files
├── start-servers.sh
└── stop-servers.sh
2026-04-07 13:43:50 -06:00
```
2026-05-01 21:11:47 +00:00
## Tech Stack
2026-01-27 05:08:27 +00:00
2026-05-01 21:11:47 +00:00
| Layer | Technology |
|-------|------------|
2026-05-08 09:17:38 -06:00
| Backend | Node.js 18+, Express 5 |
| Database | PostgreSQL 16 (Docker, port 5433) |
2026-05-01 21:11:47 +00:00
| Frontend | React 19, Recharts, Lucide React |
| Auth | bcryptjs, cookie-based sessions, express-rate-limit |
| Compliance | Python 3, pandas, openpyxl |
2026-01-27 05:08:27 +00:00
2026-05-01 21:11:47 +00:00
## Documentation
2026-01-27 05:08:27 +00:00
2026-05-01 21:11:47 +00:00
- **[Full Reference Manual ](docs/guides/full-reference-manual.md )** — comprehensive feature documentation, API reference, database schema, security model, and configuration details
2026-05-08 09:17:38 -06:00
- **[Postgres Migration Plan ](docs/guides/postgres-migration-plan.md )** — architecture decisions, schema design, and cutover procedure for the SQLite to PostgreSQL migration
2026-05-01 21:11:47 +00:00
- **[Migration Guide ](backend/migrations/README.md )** — schema migration scripts for upgrading existing deployments
- **[Design System ](docs/design/design-system.md )** — UI component patterns and color system
- **[Ivanti API Reference ](docs/api/ivanti-api-reference.md )** — Ivanti/RiskSense API integration details
- **[Jira API Use Cases ](docs/api/jira-api-use-cases.md )** — Jira Data Center API compliance summary
2026-03-17 09:05:16 -06:00
2026-05-01 21:11:47 +00:00
## License
2026-01-27 05:08:27 +00:00
2026-05-01 21:11:47 +00:00
Internal use only — Charter Communications / NTS-AEO.
2026-04-07 12:09:27 -06:00
---
2026-05-01 21:11:47 +00:00
*Designed and built by Jordan Ramos (jordan.ramos@spectrum .com)*