import React, { useState } from 'react'; import { Save, Plus, Trash2 } from 'lucide-react'; import { mockRules } from '../data/mockData'; import { CVERule } from '../types/cve'; const RulesConfig: React.FC = () => { const [rules, setRules] = useState(mockRules); const [editingRule, setEditingRule] = useState | null>(null); const [isEditing, setIsEditing] = useState(false); const handleEditRule = (rule: CVERule) => { setEditingRule({ ...rule }); setIsEditing(true); }; const handleNewRule = () => { setEditingRule({ id: rules.length + 1, name: '', criteria: { severity: 'HIGH' }, actions: { create_ticket: true, ticket_priority: 'NORMAL' }, priority: rules.length + 1, is_active: true }); setIsEditing(true); }; const handleChange = (e: React.ChangeEvent) => { const { name, value, type } = e.target as HTMLInputElement; if (name === 'severity' || name === 'ticket_priority') { setEditingRule({ ...editingRule, criteria: name === 'severity' ? { ...editingRule?.criteria, severity: value } : editingRule?.criteria, actions: name === 'ticket_priority' ? { ...editingRule?.actions, ticket_priority: value } : editingRule?.actions }); return; } setEditingRule({ ...editingRule, [name]: type === 'checkbox' ? (e.target as HTMLInputElement).checked : type === 'number' ? parseInt(value) : value }); }; const handleActionChange = (e: React.ChangeEvent) => { const { name, checked } = e.target; if (editingRule) { setEditingRule({ ...editingRule, actions: { ...editingRule.actions, [name]: checked } }); } }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (editingRule && editingRule.name) { if (editingRule.id && rules.some(r => r.id === editingRule.id)) { // Update existing rule setRules(rules.map(rule => rule.id === editingRule.id ? editingRule as CVERule : rule)); } else { // Add new rule setRules([...rules, editingRule as CVERule]); } setIsEditing(false); setEditingRule(null); } }; const handleDelete = (ruleId: number) => { setRules(rules.filter(rule => rule.id !== ruleId)); }; const handleCancel = () => { setIsEditing(false); setEditingRule(null); }; return (

CVE Processing Rules

Configure automated actions for vulnerability management

Define rules that automatically process CVEs based on specific criteria. Rules are evaluated in priority order.

{isEditing && editingRule && (

{editingRule.id && rules.some(r => r.id === editingRule.id) ? 'Edit Rule' : 'Add New Rule'}

Criteria

Lower numbers are processed first

Actions

{editingRule.actions?.create_ticket && (
)}
)}
{rules.map((rule) => ( ))}
Priority Rule Name Criteria Actions Status Actions
{rule.priority} {rule.name} {rule.criteria.severity && ( {rule.criteria.severity} )} {rule.criteria.system_tags && ( System Tags )} {rule.actions.create_ticket && ( Create Ticket )} {rule.actions.notify_admins && ( Notify )} {rule.actions.add_to_report && ( Report )} {rule.is_active ? 'Active' : 'Inactive'}
); }; export default RulesConfig;