import React, { useState } from 'react'; import { Save, Plus, Trash2, RefreshCw } from 'lucide-react'; import { mockSources } from '../data/mockData'; import { CVESource } from '../types/cve'; const SourcesConfig: React.FC = () => { const [sources, setSources] = useState(mockSources); const [newSource, setNewSource] = useState(false); const [formData, setFormData] = useState>({ name: '', url: '', api_key: '', is_active: true, sync_frequency: 24 }); const handleChange = (e: React.ChangeEvent) => { const { name, value, type } = e.target as HTMLInputElement; setFormData({ ...formData, [name]: type === 'checkbox' ? (e.target as HTMLInputElement).checked : type === 'number' ? parseInt(value) : value }); }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (formData.name && formData.url) { const newSourceObj: CVESource = { id: sources.length + 1, name: formData.name || '', url: formData.url || '', api_key: formData.api_key || '', is_active: formData.is_active || false, sync_frequency: formData.sync_frequency || 24, last_sync: 'Never', sync_status: 'PENDING' }; setSources([...sources, newSourceObj]); setNewSource(false); setFormData({ name: '', url: '', api_key: '', is_active: true, sync_frequency: 24 }); } }; const handleSync = (sourceId: number) => { // In a real implementation, this would trigger the sync process // For this prototype, we'll just update the last_sync time setSources( sources.map(source => source.id === sourceId ? { ...source, last_sync: new Date().toISOString(), sync_status: 'SUCCESS' as const } : source ) ); }; const handleDelete = (sourceId: number) => { setSources(sources.filter(source => source.id !== sourceId)); }; return (

CVE Data Sources

Configure and manage vulnerability data sources

Configure external data sources for CVE information. The plugin will automatically sync with these sources based on the configured frequency.

{newSource && (

Add New Data Source

)}
{sources.map((source) => ( ))}
Source Name URL Frequency Last Sync Status Active Actions
{source.name} {source.url} Every {source.sync_frequency} hours {source.last_sync === 'Never' ? 'Never' : new Date(source.last_sync).toLocaleString()} {source.sync_status} {source.is_active ? 'Active' : 'Inactive'}
); }; export default SourcesConfig;