save progress
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
// Part of Step 2: Evidence Collection (Task T5)
|
||||
// =============================================================================
|
||||
|
||||
using System.Globalization;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace StellaOps.AirGap.Importer.Reconciliation.Parsers;
|
||||
@@ -114,7 +115,7 @@ public sealed class SpdxParser : ISbomParser
|
||||
if (root.TryGetProperty("creationInfo", out var creationInfoProp) &&
|
||||
creationInfoProp.TryGetProperty("created", out var createdProp))
|
||||
{
|
||||
if (DateTimeOffset.TryParse(createdProp.GetString(), out var parsed))
|
||||
if (TryParseTimestamp(createdProp.GetString(), out var parsed))
|
||||
{
|
||||
createdAt = parsed;
|
||||
}
|
||||
@@ -224,17 +225,7 @@ public sealed class SpdxParser : ISbomParser
|
||||
}
|
||||
|
||||
// Determine primary digest (prefer SHA256)
|
||||
string? digest = null;
|
||||
if (hashes.TryGetValue("SHA256", out var sha256))
|
||||
{
|
||||
digest = NormalizeDigest("sha256:" + sha256);
|
||||
}
|
||||
else if (hashes.Count > 0)
|
||||
{
|
||||
// Use first available hash
|
||||
var first = hashes.First();
|
||||
digest = NormalizeDigest($"{first.Key.ToLowerInvariant()}:{first.Value}");
|
||||
}
|
||||
var digest = TrySelectSha256Digest(hashes);
|
||||
|
||||
// If no digest, this package can't be indexed by digest
|
||||
if (string.IsNullOrEmpty(digest))
|
||||
@@ -302,4 +293,24 @@ public sealed class SpdxParser : ISbomParser
|
||||
{
|
||||
return ArtifactIndex.NormalizeDigest(digest);
|
||||
}
|
||||
|
||||
private static bool TryParseTimestamp(string? value, out DateTimeOffset timestamp)
|
||||
{
|
||||
timestamp = default;
|
||||
return !string.IsNullOrWhiteSpace(value) &&
|
||||
DateTimeOffset.TryParse(value, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out timestamp);
|
||||
}
|
||||
|
||||
private static string? TrySelectSha256Digest(IReadOnlyDictionary<string, string> hashes)
|
||||
{
|
||||
foreach (var key in new[] { "SHA256", "SHA-256", "sha256" })
|
||||
{
|
||||
if (hashes.TryGetValue(key, out var sha256))
|
||||
{
|
||||
return NormalizeDigest("sha256:" + sha256);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user