Run Security Scan
Integrated Tools
{tool.description}
Recent Findings
{finding.description?.substring(0, 100)}...
{finding.filePath && ({finding.filePath} {finding.lineNumber && `:${finding.lineNumber}`}
)}SBOM
By License
No SBOM generated yet
'use client'; import { useState } from 'react'; import { useSecurity } from '@breakpilot/compliance-sdk-react'; import Link from 'next/link'; import { ArrowLeft, Lock, AlertTriangle, AlertCircle, CheckCircle, Play, Loader2, FileCode, Package, Database, Shield, } from 'lucide-react'; export default function SecurityPage() { const { sbom, findings, scan, isScanning, generateSbom, isGeneratingSbom } = useSecurity(); const [scanTarget, setScanTarget] = useState(''); const handleScan = async () => { if (!scanTarget.trim()) return; await scan(scanTarget); setScanTarget(''); }; const tools = [ { id: 'gitleaks', name: 'Gitleaks', description: 'Secret Detection', icon: Lock, }, { id: 'semgrep', name: 'Semgrep', description: 'SAST Analysis', icon: FileCode, }, { id: 'bandit', name: 'Bandit', description: 'Python Security', icon: Shield, }, { id: 'trivy', name: 'Trivy', description: 'Container Scanning', icon: Database, }, { id: 'grype', name: 'Grype', description: 'Dependency Vulnerabilities', icon: Package, }, { id: 'syft', name: 'Syft', description: 'SBOM Generation', icon: FileCode, }, ]; const findingsBySeverity = { critical: findings?.filter((f) => f.severity === 'critical').length ?? 0, high: findings?.filter((f) => f.severity === 'high').length ?? 0, medium: findings?.filter((f) => f.severity === 'medium').length ?? 0, low: findings?.filter((f) => f.severity === 'low').length ?? 0, }; return (
Vulnerability Scanning & SBOM
{tool.description}
{finding.description?.substring(0, 100)}...
{finding.filePath && ({finding.filePath} {finding.lineNumber && `:${finding.lineNumber}`}
)}No SBOM generated yet