feat(rt-import): import Red Team engagement results as validated tests
Some checks failed
Aegis CI / lint-and-test (push) Has been cancelled
Some checks failed
Aegis CI / lint-and-test (push) Has been cancelled
Backend — POST /tests/import-rt (red_lead + admin): Accepts engagement JSON with name/date/description/operator and a list of techniques each with mitre_id, result, attack_success, platform, notes. Creates one Test per technique directly in 'validated' state (red + blue validation = approved) bypassing the normal workflow. Recalculates technique.status_global for all affected techniques. Returns created/skipped summary. Frontend — /tests/import-rt (new dedicated page): - Format reference panel (collapsible) with field descriptions - Download template JSON button (generates a filled example) - Paste JSON textarea + file upload (.json) - Live validation + preview table showing what will be imported - Import button with spinner - Success / warning / error result display Accessible to admin and red_lead only. Added to sidebar under Tests > Import RT Results. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -282,6 +282,38 @@ export interface TempoSyncResult {
|
||||
detail?: string;
|
||||
}
|
||||
|
||||
// ── RT Import ──────────────────────────────────────────────────────
|
||||
|
||||
export interface RTTechniqueEntry {
|
||||
mitre_id: string;
|
||||
result: "detected" | "not_detected" | "partially_detected";
|
||||
attack_success: boolean;
|
||||
platform?: string;
|
||||
notes?: string;
|
||||
}
|
||||
|
||||
export interface RTImportPayload {
|
||||
name: string;
|
||||
date?: string;
|
||||
description?: string;
|
||||
operator?: string;
|
||||
techniques: RTTechniqueEntry[];
|
||||
}
|
||||
|
||||
export interface RTImportResult {
|
||||
created: number;
|
||||
skipped: number;
|
||||
items: { mitre_id: string; test_name: string; result: string; attack_success: boolean }[];
|
||||
warnings: { mitre_id: string; reason: string }[];
|
||||
engagement: string;
|
||||
}
|
||||
|
||||
/** Import results from a real Red Team engagement. */
|
||||
export async function importRT(payload: RTImportPayload): Promise<RTImportResult> {
|
||||
const { data } = await client.post<RTImportResult>("/tests/import-rt", payload);
|
||||
return data;
|
||||
}
|
||||
|
||||
/** Manually push this test's red team execution worklog to Tempo. */
|
||||
export async function syncTestToTempo(
|
||||
testId: string,
|
||||
|
||||
Reference in New Issue
Block a user