Update Excititor ingestion plan and enhance policy endpoints for overlay integration

This commit is contained in:
master
2025-12-11 11:00:01 +02:00
parent 2bd189387e
commit b83aa1aa0b
3 changed files with 18 additions and 17 deletions

View File

@@ -106,12 +106,8 @@ public static class PolicyEndpoints
}
var claimResults = await FallbackClaimsAsync(claimStore, advisories, purls, providerFilter, statusFilter, request.Limit, cancellationToken).ConfigureAwait(false);
var groupedClaims = claimResults
.GroupBy(c => c.AdvisoryKey, StringComparer.OrdinalIgnoreCase)
.Select(group => new PolicyVexLookupItem(group.Key, new[] { group.Key }, group.ToList()))
.ToList();
return Results.Ok(new PolicyVexLookupResponse(groupedClaims, claimResults.Count, timeProvider.GetUtcNow()));
var totalStatements = claimResults.Sum(item => item.Statements.Count);
return Results.Ok(new PolicyVexLookupResponse(claimResults, totalStatements, timeProvider.GetUtcNow()));
}
private static async Task<IReadOnlyList<GraphOverlayItem>> ResolveOverlaysAsync(
@@ -184,7 +180,7 @@ public static class PolicyEndpoints
Metadata: metadata);
}
private static async Task<List<PolicyVexStatement>> FallbackClaimsAsync(
private static async Task<List<PolicyVexLookupItem>> FallbackClaimsAsync(
IVexClaimStore claimStore,
IReadOnlyList<string> advisories,
IReadOnlyList<string> purls,
@@ -193,7 +189,7 @@ public static class PolicyEndpoints
int limit,
CancellationToken cancellationToken)
{
var results = new List<PolicyVexStatement>();
var results = new List<PolicyVexLookupItem>();
foreach (var advisory in advisories)
{
var claims = await claimStore.FindByVulnerabilityAsync(advisory, limit, cancellationToken).ConfigureAwait(false);
@@ -201,15 +197,18 @@ public static class PolicyEndpoints
var filtered = claims
.Where(c => providers.Count == 0 || providers.Contains(c.ProviderId, StringComparer.OrdinalIgnoreCase))
.Where(c => statuses.Count == 0 || statuses.Contains(c.Status.ToString().ToLowerInvariant()))
.Where(c => purls.Count == 0 || purls.Contains(c.Product.Key, StringComparer.OrdinalIgnoreCase))
.Where(c => purls.Count == 0
|| purls.Contains(c.Product.Key, StringComparer.OrdinalIgnoreCase)
|| (!string.IsNullOrWhiteSpace(c.Product.Purl) && purls.Contains(c.Product.Purl, StringComparer.OrdinalIgnoreCase)))
.OrderByDescending(c => c.LastSeen)
.ThenBy(c => c.ProviderId, StringComparer.Ordinal)
.Take(limit);
.Take(limit)
.Select(MapClaimStatement)
.ToList();
results.AddRange(filtered.Select(MapClaimStatement));
if (results.Count >= limit)
if (filtered.Count > 0)
{
break;
results.Add(new PolicyVexLookupItem(advisory, new[] { advisory }, filtered));
}
}