import React, { useState } from 'react'; import { Plus, RefreshCw, Menu, Loader } from 'lucide-react'; import { useAuth } from './contexts/AuthContext'; import LoginForm from './components/LoginForm'; import UserMenu from './components/UserMenu'; import UserManagement from './components/UserManagement'; import AuditLog from './components/AuditLog'; import NvdSyncModal from './components/NvdSyncModal'; import NavDrawer from './components/NavDrawer'; import AdminScopeToggle from './components/AdminScopeToggle'; import VulnerabilityTriagePage from './components/pages/ReportingPage'; import KnowledgeBasePage from './components/pages/KnowledgeBasePage'; import ExportsPage from './components/pages/ExportsPage'; import CompliancePage from './components/pages/CompliancePage'; import CCPMetricsPage from './components/pages/CCPMetricsPage'; import JiraPage from './components/pages/JiraPage'; import AdminPage from './components/pages/AdminPage'; import ArcherTemplatePage from './components/pages/ArcherTemplatePage'; import HomePage from './components/pages/HomePage'; import FeedbackModal from './components/FeedbackModal'; import NotificationBell from './components/NotificationBell'; import { canAccessPage } from './config/pageVisibility'; import './App.css'; export default function App() { const { isAuthenticated, loading: authLoading, canWrite, user } = useAuth(); const [currentPage, setCurrentPageRaw] = useState(() => { try { const saved = localStorage.getItem('cve-dashboard-page'); return saved && canAccessPage(saved, user?.group) ? saved : 'home'; } catch { return 'home'; } }); const setCurrentPage = (page) => { if (!canAccessPage(page, user?.group)) { setCurrentPageRaw('home'); return; } setCurrentPageRaw(page); try { localStorage.setItem('cve-dashboard-page', page); } catch {} }; const [navOpen, setNavOpen] = useState(false); const [calendarFilter, setCalendarFilter] = useState(null); const [reportingExcFilter, setReportingExcFilter] = useState(null); const [showAddCVE, setShowAddCVE] = useState(false); const [showUserManagement, setShowUserManagement] = useState(false); const [showAuditLog, setShowAuditLog] = useState(false); const [showFeedback, setShowFeedback] = useState(false); const [feedbackType, setFeedbackType] = useState('bug'); const [showNvdSync, setShowNvdSync] = useState(false); // Navigation handler that accepts optional context (filters) const handleNavigate = (page, context) => { if (page === 'triage') { setCalendarFilter(context?.calendarFilter || null); setReportingExcFilter(context?.reportingExcFilter || null); } setCurrentPage(page); }; // Show loading while checking auth if (authLoading) { return (

Loading...

); } // Show login if not authenticated if (!isAuthenticated) { return ; } return (
setNavOpen(false)} currentPage={currentPage} onNavigate={(page) => { if (page === 'triage') { setCalendarFilter(null); setReportingExcFilter(null); } setCurrentPage(page); }} /> {/* Scanning line effect */}
{/* Header */}
AEGIS

AEGIS

Advanced Engineering Group Intelligence System

{canWrite() && ( )} {canWrite() && currentPage === 'home' && ( )} setShowUserManagement(true)} onAuditLog={() => setShowAuditLog(true)} onFeatureRequest={() => { setFeedbackType('feature'); setShowFeedback(true); }} />
{/* Page content — generic route guard via canAccessPage */} {currentPage === 'home' && } {currentPage === 'triage' && } {currentPage === 'compliance' && } {currentPage === 'ccp-metrics' && } {currentPage === 'knowledge-base' && } {currentPage === 'exports' && } {currentPage === 'jira' && } {currentPage === 'archer-templates' && } {currentPage === 'admin' && } {/* Global Modals */} {showUserManagement && setShowUserManagement(false)} />} {showAuditLog && setShowAuditLog(false)} />} {showNvdSync && setShowNvdSync(false)} onSyncComplete={() => {}} />} setShowFeedback(false)} defaultType={feedbackType} currentPage={currentPage} />
); }