import React, { useState } from 'react'; import { CheckCircle, XCircle, AlertCircle } from 'lucide-react'; import { useToast } from '../contexts/ToastContext'; const API_BASE = process.env.REACT_APP_API_BASE || 'http://localhost:3001/api'; export default function QuickCVELookup() { const [query, setQuery] = useState(''); const [result, setResult] = useState(null); const [loading, setLoading] = useState(false); const toast = useToast(); const handleLookup = async () => { const trimmed = query.trim(); if (!trimmed) return; setLoading(true); try { const response = await fetch(`${API_BASE}/cves/check/${encodeURIComponent(trimmed)}`, { credentials: 'include' }); if (!response.ok) throw new Error('Failed to check CVE'); const data = await response.json(); setResult(data); } catch (err) { toast.error(err.message); setResult({ error: err.message }); } finally { setLoading(false); } }; return (

Quick CVE Lookup

setQuery(e.target.value)} onKeyDown={(e) => e.key === 'Enter' && handleLookup()} className="flex-1 intel-input" aria-label="CVE ID to look up" />
{result && (
{result.error ? (

Error

{result.error}

) : result.exists ? (

✓ CVE Addressed ({result.vendors.length} vendor{result.vendors.length > 1 ? 's' : ''})

{result.vendors.map((vendorInfo, idx) => (

{vendorInfo.vendor}

Severity: {vendorInfo.severity}

Status: {vendorInfo.status}

Documents: {vendorInfo.total_documents} attached

))}
) : (

Not Found

This CVE has not been addressed yet. No entry exists in the database.

)}
)}
); }