Frontend gaps fill work. Testing fixes work. Auditing in progress.

This commit is contained in:
StellaOps Bot
2025-12-30 01:22:58 +02:00
parent 1dc4bcbf10
commit 7a5210e2aa
928 changed files with 183942 additions and 3941 deletions

View File

@@ -216,6 +216,8 @@ public sealed class PostgresAdvisoryStore : IPostgresAdvisoryStore, AdvisoryCont
}
}
var fallbackLanguage = TryReadLanguage(entity.RawPayload);
// Reconstruct from child entities
var aliases = await _aliasRepository.GetByAdvisoryAsync(entity.Id, cancellationToken).ConfigureAwait(false);
var cvss = await _cvssRepository.GetByAdvisoryAsync(entity.Id, cancellationToken).ConfigureAwait(false);
@@ -267,11 +269,16 @@ public sealed class PostgresAdvisoryStore : IPostgresAdvisoryStore, AdvisoryCont
}
}
var normalizedVersions = BuildNormalizedVersions(versionRanges);
return new AffectedPackage(
MapEcosystemToType(a.Ecosystem),
a.PackageName,
null,
versionRanges);
versionRanges,
Array.Empty<AffectedPackageStatus>(),
Array.Empty<AdvisoryProvenance>(),
normalizedVersions);
}).ToArray();
// Parse provenance if available
@@ -293,7 +300,7 @@ public sealed class PostgresAdvisoryStore : IPostgresAdvisoryStore, AdvisoryCont
entity.AdvisoryKey,
entity.Title ?? entity.AdvisoryKey,
entity.Summary,
null,
fallbackLanguage,
entity.PublishedAt,
entity.ModifiedAt,
entity.Severity,
@@ -309,6 +316,65 @@ public sealed class PostgresAdvisoryStore : IPostgresAdvisoryStore, AdvisoryCont
null);
}
private static IReadOnlyList<NormalizedVersionRule> BuildNormalizedVersions(IEnumerable<AffectedVersionRange> ranges)
{
if (ranges is null)
{
return Array.Empty<NormalizedVersionRule>();
}
var buffer = new List<NormalizedVersionRule>();
foreach (var range in ranges)
{
if (range is null)
{
continue;
}
var rule = range.ToNormalizedVersionRule(range.Provenance.Value);
if (rule is not null)
{
buffer.Add(rule);
}
}
return buffer.Count == 0 ? Array.Empty<NormalizedVersionRule>() : buffer;
}
private static string? TryReadLanguage(string? rawPayload)
{
if (string.IsNullOrWhiteSpace(rawPayload))
{
return null;
}
try
{
using var document = JsonDocument.Parse(rawPayload, new JsonDocumentOptions
{
AllowTrailingCommas = true
});
if (document.RootElement.ValueKind != JsonValueKind.Object)
{
return null;
}
if (!document.RootElement.TryGetProperty("language", out var languageElement))
{
return null;
}
return languageElement.ValueKind == JsonValueKind.String
? languageElement.GetString()
: null;
}
catch (JsonException)
{
return null;
}
}
private static string MapEcosystemToType(string ecosystem)
{
return ecosystem.ToLowerInvariant() switch