fix: D3FEND expandable cards, System page cleanup, and multi-source improvements

- Make D3FEND defense cards clickable with expandable details and external link
- Fix D3FEND URLs to use PascalCase technique names matching the ontology
- Remove duplicate Import Atomic Red Team from System page (use Data Sources)
- Add bulk Activate All / Deactivate All buttons with confirmation modal
- Fix template admin list to show both active and inactive templates
- Add PATCH /test-templates/bulk-activate backend endpoint
- Auto-seed data sources on container startup via entrypoint.sh
- Fix SigmaHQ, CALDERA, GTFOBins import issues
- Register D3FEND sync handler in data sources router
- Add CIS Controls v8 compliance framework import
- Expand Test Catalog source filters (CALDERA, LOLBAS, GTFOBins)
- Campaign Generate from Threat Actor now opens actor selector modal
- Add coverage snapshot creation button to Comparison page
- Update README with accurate data source and feature documentation
This commit is contained in:
2026-02-10 13:22:23 +01:00
parent 8032b67fab
commit c2e9c687f4
19 changed files with 778 additions and 197 deletions
+15 -1
View File
@@ -22,6 +22,9 @@ const PAGE_SIZE = 12;
const SOURCE_OPTIONS = [
{ value: "", label: "All Sources" },
{ value: "atomic_red_team", label: "Atomic Red Team" },
{ value: "caldera", label: "MITRE CALDERA" },
{ value: "lolbas", label: "LOLBAS (Windows)" },
{ value: "gtfobins", label: "GTFOBins (Linux)" },
{ value: "custom", label: "Custom" },
];
@@ -45,9 +48,20 @@ const PLATFORM_OPTIONS = [
const SOURCE_BADGE: Record<string, string> = {
atomic_red_team: "bg-red-900/50 text-red-400 border-red-500/30",
caldera: "bg-purple-900/50 text-purple-400 border-purple-500/30",
lolbas: "bg-amber-900/50 text-amber-400 border-amber-500/30",
gtfobins: "bg-green-900/50 text-green-400 border-green-500/30",
custom: "bg-cyan-900/50 text-cyan-400 border-cyan-500/30",
};
const SOURCE_LABEL: Record<string, string> = {
atomic_red_team: "Atomic",
caldera: "CALDERA",
lolbas: "LOLBAS",
gtfobins: "GTFOBins",
custom: "Custom",
};
const SEVERITY_BADGE: Record<string, string> = {
low: "bg-blue-900/50 text-blue-400 border-blue-500/30",
medium: "bg-yellow-900/50 text-yellow-400 border-yellow-500/30",
@@ -302,7 +316,7 @@ function TemplateCard({
SOURCE_BADGE[template.source] || "bg-gray-800/50 text-gray-400 border-gray-600/30"
}`}
>
{template.source === "atomic_red_team" ? "Atomic" : template.source}
{SOURCE_LABEL[template.source] || template.source}
</span>
{/* Platform */}