Introduce streaming endpoint for NDJSON scan progress, incorporate scan checkpoints into scan details, and update UI components to display this new information. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 0d01f99a-ea6a-447d-82fd-311715434a39 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 2852b526-3bf8-4a93-a62a-a50e26291074 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/e32d2b99-1721-47dd-833c-98b372f48008/0d01f99a-ea6a-447d-82fd-311715434a39/8MCgDZm Replit-Helium-Checkpoint-Created: true
62 lines
3.6 KiB
TypeScript
62 lines
3.6 KiB
TypeScript
import { Badge } from "@/components/ui/badge";
|
|
import { ShieldCheck, ShieldAlert, Shield, AlertTriangle, Info, AlertCircle, AlertOctagon, CheckCircle2, MinusCircle, XCircle } from "lucide-react";
|
|
|
|
export const CHECKPOINT_STATUS_LABELS: Record<string, string> = {
|
|
pass: "Unauffällig",
|
|
flagged: "Auffällig",
|
|
skipped: "Übersprungen",
|
|
error: "Fehler",
|
|
};
|
|
|
|
export function CheckpointStatusBadge({ status, className }: { status: string, className?: string }) {
|
|
switch (status) {
|
|
case "pass":
|
|
return <Badge className={`bg-emerald-500 hover:bg-emerald-600 text-white border-transparent ${className}`}><CheckCircle2 className="w-3 h-3 mr-1"/> Unauffällig</Badge>;
|
|
case "flagged":
|
|
return <Badge className={`bg-rose-500 hover:bg-rose-600 text-white border-transparent ${className}`}><AlertTriangle className="w-3 h-3 mr-1"/> Auffällig</Badge>;
|
|
case "skipped":
|
|
return <Badge variant="outline" className={`text-muted-foreground ${className}`}><MinusCircle className="w-3 h-3 mr-1"/> Übersprungen</Badge>;
|
|
case "error":
|
|
return <Badge className={`bg-amber-500 hover:bg-amber-600 text-white border-transparent ${className}`}><XCircle className="w-3 h-3 mr-1"/> Fehler</Badge>;
|
|
default:
|
|
return <Badge variant="outline" className={className}>{status}</Badge>;
|
|
}
|
|
}
|
|
|
|
export function VerdictBadge({ verdict, className }: { verdict: string, className?: string }) {
|
|
switch (verdict) {
|
|
case "pass":
|
|
return <Badge className={`bg-emerald-500 hover:bg-emerald-600 text-white ${className}`}><ShieldCheck className="w-3 h-3 mr-1"/> Freigabe</Badge>;
|
|
case "review":
|
|
return <Badge className={`bg-amber-500 hover:bg-amber-600 text-white ${className}`}><ShieldAlert className="w-3 h-3 mr-1"/> Manuelle Prüfung</Badge>;
|
|
case "block":
|
|
return <Badge className={`bg-rose-500 hover:bg-rose-600 text-white ${className}`}><Shield className="w-3 h-3 mr-1"/> Blockieren</Badge>;
|
|
default:
|
|
return <Badge variant="outline" className={className}>{verdict}</Badge>;
|
|
}
|
|
}
|
|
|
|
export function SeverityBadge({ severity, className }: { severity: string, className?: string }) {
|
|
switch (severity) {
|
|
case "critical":
|
|
return <Badge className={`bg-rose-600 hover:bg-rose-700 text-white border-transparent ${className}`}><AlertOctagon className="w-3 h-3 mr-1"/> Kritisch</Badge>;
|
|
case "high":
|
|
return <Badge className={`bg-orange-500 hover:bg-orange-600 text-white border-transparent ${className}`}><AlertTriangle className="w-3 h-3 mr-1"/> Hoch</Badge>;
|
|
case "medium":
|
|
return <Badge className={`bg-amber-400 hover:bg-amber-500 text-white border-transparent ${className}`}><AlertCircle className="w-3 h-3 mr-1"/> Mittel</Badge>;
|
|
case "low":
|
|
return <Badge className={`bg-blue-400 hover:bg-blue-500 text-white border-transparent ${className}`}><Info className="w-3 h-3 mr-1"/> Niedrig</Badge>;
|
|
case "info":
|
|
return <Badge className={`bg-slate-400 hover:bg-slate-500 text-white border-transparent ${className}`}><Info className="w-3 h-3 mr-1"/> Info</Badge>;
|
|
default:
|
|
return <Badge variant="outline" className={className}>{severity}</Badge>;
|
|
}
|
|
}
|
|
|
|
export function AxisBadge({ axis, className }: { axis: string, className?: string }) {
|
|
return axis === "security" ? (
|
|
<Badge variant="outline" className={`border-blue-200 text-blue-700 bg-blue-50 dark:bg-blue-900/20 dark:border-blue-800 dark:text-blue-400 ${className}`}>IT-Sicherheit</Badge>
|
|
) : (
|
|
<Badge variant="outline" className={`border-purple-200 text-purple-700 bg-purple-50 dark:bg-purple-900/20 dark:border-purple-800 dark:text-purple-400 ${className}`}>Datenschutz</Badge>
|
|
);
|
|
}
|