mirror of
https://github.com/okieselbach/AutopilotMonitor.git
synced 2026-10-25 13:10:13 +00:00
Merge branch 'main' of https://github.com/okieselbach/Autopilot-Monitor
This commit is contained in:
+5
@@ -39,6 +39,11 @@ namespace AutopilotMonitor.Functions.DataAccess.TableStorage
|
||||
public Task<string?> GetVulnerabilityReportJsonAsync(string tenantId, string sessionId)
|
||||
=> _storage.GetVulnerabilityReportJsonAsync(tenantId, sessionId);
|
||||
|
||||
public async Task DeleteVulnerabilityReportAsync(string tenantId, string sessionId)
|
||||
{
|
||||
await _storage.DeleteVulnerabilityReportAsync(tenantId, sessionId);
|
||||
}
|
||||
|
||||
// --- Software Inventory ---
|
||||
|
||||
public Task UpsertSoftwareInventoryAsync(string tenantId, List<Dictionary<string, object>> inventoryItems,
|
||||
|
||||
+9
@@ -96,6 +96,15 @@ namespace AutopilotMonitor.Functions.Functions.Vulnerability
|
||||
await rescanResponse.WriteAsJsonAsync(new { success = true, sessionId, report = freshReport, rescanned = true });
|
||||
return rescanResponse;
|
||||
}
|
||||
|
||||
// Rescan found no vulnerabilities — clear the stale report so the
|
||||
// UI no longer shows outdated findings from a previous scan.
|
||||
await _vulnRepo.DeleteVulnerabilityReportAsync(effectiveTenantId, sessionId);
|
||||
_logger.LogInformation("Vulnerability re-scan complete for session {SessionId}: no findings, cleared old report", sessionId);
|
||||
|
||||
var noFindingsResponse = req.CreateResponse(HttpStatusCode.OK);
|
||||
await noFindingsResponse.WriteAsJsonAsync(new { success = true, sessionId, report = (object?)null, rescanned = true, message = "Re-scan complete: no vulnerabilities found" });
|
||||
return noFindingsResponse;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
@@ -553,6 +553,28 @@ namespace AutopilotMonitor.Functions.Services
|
||||
scanSummary?.GetValueOrDefault("overall_risk")?.ToString() ?? "none");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Deletes the stored vulnerability report for a session.
|
||||
/// Used when a re-scan finds no vulnerabilities, to clear stale data.
|
||||
/// </summary>
|
||||
public async Task DeleteVulnerabilityReportAsync(string tenantId, string sessionId)
|
||||
{
|
||||
SecurityValidator.EnsureValidGuid(tenantId, nameof(tenantId));
|
||||
SecurityValidator.EnsureValidGuid(sessionId, nameof(sessionId));
|
||||
|
||||
try
|
||||
{
|
||||
var tableClient = _tableServiceClient.GetTableClient(Constants.TableNames.VulnerabilityReports);
|
||||
var partitionKey = $"{tenantId}_{sessionId}";
|
||||
await tableClient.DeleteEntityAsync(partitionKey, "report");
|
||||
_logger.LogInformation("Deleted vulnerability report for session {SessionId}", sessionId);
|
||||
}
|
||||
catch (Azure.RequestFailedException ex) when (ex.Status == 404)
|
||||
{
|
||||
// Already deleted or never existed — nothing to do
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the vulnerability correlation report for a session.
|
||||
/// Returns the deserialized report data, or null if no report exists.
|
||||
|
||||
@@ -18,6 +18,7 @@ namespace AutopilotMonitor.Shared.DataAccess
|
||||
/// to avoid Newtonsoft JToken serialization issues.
|
||||
/// </summary>
|
||||
Task<string?> GetVulnerabilityReportJsonAsync(string tenantId, string sessionId);
|
||||
Task DeleteVulnerabilityReportAsync(string tenantId, string sessionId);
|
||||
|
||||
// --- Software Inventory ---
|
||||
Task UpsertSoftwareInventoryAsync(string tenantId, List<Dictionary<string, object>> inventoryItems,
|
||||
|
||||
Reference in New Issue
Block a user