import { useState } from "react"; import { useQuery, useMutation } from "@tanstack/react-query"; import { queryClient, apiRequest } from "@/lib/queryClient"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger, DialogFooter, } from "@/components/ui/dialog"; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { Switch } from "@/components/ui/switch"; import { Server, Plus, Trash2, Edit } from "lucide-react"; import { format } from "date-fns"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { insertRouterSchema, type InsertRouter } from "@shared/schema"; import type { Router } from "@shared/schema"; import { useToast } from "@/hooks/use-toast"; export default function Routers() { const { toast } = useToast(); const [addDialogOpen, setAddDialogOpen] = useState(false); const [editDialogOpen, setEditDialogOpen] = useState(false); const [editingRouter, setEditingRouter] = useState(null); const { data: routers, isLoading } = useQuery({ queryKey: ["/api/routers"], }); const addForm = useForm({ resolver: zodResolver(insertRouterSchema), defaultValues: { name: "", ipAddress: "", apiPort: 8729, username: "", password: "", enabled: true, }, }); const editForm = useForm({ resolver: zodResolver(insertRouterSchema), }); const addMutation = useMutation({ mutationFn: async (data: InsertRouter) => { return await apiRequest("POST", "/api/routers", data); }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["/api/routers"] }); toast({ title: "Router aggiunto", description: "Il router è stato configurato con successo", }); setAddDialogOpen(false); addForm.reset(); }, onError: (error: any) => { toast({ title: "Errore", description: error.message || "Impossibile aggiungere il router", variant: "destructive", }); }, }); const updateMutation = useMutation({ mutationFn: async ({ id, data }: { id: string; data: InsertRouter }) => { return await apiRequest("PUT", `/api/routers/${id}`, data); }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["/api/routers"] }); toast({ title: "Router aggiornato", description: "Le modifiche sono state salvate con successo", }); setEditDialogOpen(false); setEditingRouter(null); editForm.reset(); }, onError: (error: any) => { toast({ title: "Errore", description: error.message || "Impossibile aggiornare il router", variant: "destructive", }); }, }); const deleteMutation = useMutation({ mutationFn: async (id: string) => { await apiRequest("DELETE", `/api/routers/${id}`); }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["/api/routers"] }); toast({ title: "Router eliminato", description: "Il router è stato rimosso con successo", }); }, onError: () => { toast({ title: "Errore", description: "Impossibile eliminare il router", variant: "destructive", }); }, }); const handleAddSubmit = (data: InsertRouter) => { addMutation.mutate(data); }; const handleEditSubmit = (data: InsertRouter) => { if (editingRouter) { updateMutation.mutate({ id: editingRouter.id, data }); } }; const handleEdit = (router: Router) => { setEditingRouter(router); editForm.reset({ name: router.name, ipAddress: router.ipAddress, apiPort: router.apiPort, username: router.username, password: router.password, enabled: router.enabled, }); setEditDialogOpen(true); }; return (

Router MikroTik

Gestisci i router connessi al sistema IDS

Aggiungi Router MikroTik Configura un nuovo router MikroTik per il sistema IDS. Assicurati che l'API RouterOS (porta 8729/8728) sia abilitata.
( Nome Router Nome descrittivo per identificare il router )} /> ( Indirizzo IP Indirizzo IP o hostname del router )} /> ( Porta API field.onChange(parseInt(e.target.value))} data-testid="input-port" /> Porta RouterOS API MikroTik (8729 per API-SSL, 8728 per API) )} /> ( Username )} /> ( Password )} /> (
Abilitato Attiva il router per il blocco automatico degli IP
)} />
Router Configurati ({routers?.length || 0}) {isLoading ? (
Caricamento...
) : routers && routers.length > 0 ? (
{routers.map((router) => (

{router.name}

{router.ipAddress}:{router.apiPort}

{router.enabled ? "Attivo" : "Disabilitato"}
Username: {router.username}
Creato: {format(new Date(router.createdAt), "dd/MM/yyyy")}
{router.lastSync && (
Ultima sync: {format(new Date(router.lastSync), "HH:mm:ss")}
)}
))}
) : (

Nessun router configurato

Aggiungi il primo router per iniziare

)}
Modifica Router Modifica le impostazioni del router {editingRouter?.name}
( Nome Router )} /> ( Indirizzo IP )} /> ( Porta API field.onChange(parseInt(e.target.value))} data-testid="input-edit-port" /> Porta RouterOS API MikroTik (8729 per API-SSL, 8728 per API) )} /> ( Username )} /> ( Password )} /> (
Abilitato Attiva il router per il blocco automatico degli IP
)} />
); }