import { useState } from 'react' import { useMutation } from '@tanstack/react-query' import { importCrowdsecConfig } from '../api/crowdsec' import { createBackup } from '../api/backups' import { Button } from '../components/ui/Button' import { Card } from '../components/ui/Card' import { toast } from 'react-hot-toast' export default function ImportCrowdSec() { const [file, setFile] = useState(null) const backupMutation = useMutation({ mutationFn: () => createBackup(), }) const importMutation = useMutation({ mutationFn: async (file: File) => importCrowdsecConfig(file), onSuccess: () => { toast.success('CrowdSec config imported') }, onError: (e: unknown) => { const msg = e instanceof Error ? e.message : String(e) toast.error(`Import failed: ${msg}`) } }) const handleFile = (e: React.ChangeEvent) => { const f = e.target.files?.[0] if (!f) return setFile(f) } const handleImport = async () => { if (!file) return try { toast.loading('Creating backup...') await backupMutation.mutateAsync() toast.dismiss() toast.loading('Importing CrowdSec...') await importMutation.mutateAsync(file) toast.dismiss() } catch { toast.dismiss() // importMutation onError handles toast } } return (

CrowdSec Configuration Packages

Upload a tar.gz or zip package. A backup is created before importing so you can roll back if needed. Export the current package from the Cerberus dashboard or CrowdSec config page.

) }