import { useQuery, useMutation } from "@tanstack/react-query"; import { queryClient, apiRequest } from "@/lib/queryClient"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Shield, Plus, Trash2, CheckCircle2, XCircle } from "lucide-react"; import { format } from "date-fns"; import { useState } from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; import type { Whitelist } from "@shared/schema"; import { insertWhitelistSchema } from "@shared/schema"; import { useToast } from "@/hooks/use-toast"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger, DialogFooter, } from "@/components/ui/dialog"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; const whitelistFormSchema = insertWhitelistSchema.extend({ ipAddress: z.string() .min(7, "Inserisci un IP valido") .regex(/^(\d{1,3}\.){3}\d{1,3}$/, "Formato IP non valido") .refine((ip) => { const parts = ip.split('.').map(Number); return parts.every(part => part >= 0 && part <= 255); }, "Ogni ottetto deve essere tra 0 e 255"), }); export default function WhitelistPage() { const { toast } = useToast(); const [isAddDialogOpen, setIsAddDialogOpen] = useState(false); const form = useForm>({ resolver: zodResolver(whitelistFormSchema), defaultValues: { ipAddress: "", comment: "", reason: "", active: true, }, }); const { data: whitelist, isLoading } = useQuery({ queryKey: ["/api/whitelist"], }); const addMutation = useMutation({ mutationFn: async (data: z.infer) => { return await apiRequest("POST", "/api/whitelist", data); }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["/api/whitelist"] }); toast({ title: "IP aggiunto", description: "L'indirizzo IP è stato aggiunto alla whitelist", }); setIsAddDialogOpen(false); form.reset(); }, onError: (error: any) => { toast({ title: "Errore", description: error.message || "Impossibile aggiungere l'IP alla whitelist", variant: "destructive", }); }, }); const deleteMutation = useMutation({ mutationFn: async (id: string) => { await apiRequest("DELETE", `/api/whitelist/${id}`); }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["/api/whitelist"] }); toast({ title: "IP rimosso", description: "L'indirizzo IP è stato rimosso dalla whitelist", }); }, onError: (error: any) => { toast({ title: "Errore", description: error.message || "Impossibile rimuovere l'IP dalla whitelist", variant: "destructive", }); }, }); const onSubmit = (data: z.infer) => { addMutation.mutate(data); }; return (

Whitelist IP

Gestisci gli indirizzi IP fidati che non verranno bloccati

Aggiungi IP alla Whitelist Inserisci l'indirizzo IP che vuoi proteggere dal blocco automatico
( Indirizzo IP * )} /> ( Motivo )} /> ( Note