refactor: Remove unused properties and methods from VexExportManifestRecord and VexConsensusRecord
This commit is contained in:
		| @@ -90,18 +90,6 @@ internal sealed class VexExportManifestRecord | ||||
|     public string? ConsensusRevision { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public string? PolicyRevisionId { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public string? PolicyDigest { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public string? ConsensusDigest { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public string? ScoreDigest { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public string? PredicateType { get; set; } | ||||
|         = null; | ||||
|  | ||||
| @@ -139,10 +127,6 @@ internal sealed class VexExportManifestRecord | ||||
|             FromCache = manifest.FromCache, | ||||
|             SourceProviders = manifest.SourceProviders.ToList(), | ||||
|             ConsensusRevision = manifest.ConsensusRevision, | ||||
|             PolicyRevisionId = manifest.PolicyRevisionId, | ||||
|             PolicyDigest = manifest.PolicyDigest, | ||||
|             ConsensusDigest = manifest.ConsensusDigest?.ToUri(), | ||||
|             ScoreDigest = manifest.ScoreDigest?.ToUri(), | ||||
|             PredicateType = manifest.Attestation?.PredicateType, | ||||
|             RekorApiVersion = manifest.Attestation?.Rekor?.ApiVersion, | ||||
|             RekorLocation = manifest.Attestation?.Rekor?.Location, | ||||
| @@ -183,40 +167,10 @@ internal sealed class VexExportManifestRecord | ||||
|             SourceProviders, | ||||
|             FromCache, | ||||
|             ConsensusRevision, | ||||
|             PolicyRevisionId, | ||||
|             PolicyDigest, | ||||
|             ParseContentAddress(ConsensusDigest), | ||||
|             ParseContentAddress(ScoreDigest), | ||||
|             attestation, | ||||
|             SizeBytes); | ||||
|     } | ||||
|  | ||||
|     private static VexContentAddress? ParseContentAddress(string? value) | ||||
|     { | ||||
|         if (string.IsNullOrWhiteSpace(value)) | ||||
|         { | ||||
|             return null; | ||||
|         } | ||||
|  | ||||
|         var separatorIndex = value.IndexOf(':'); | ||||
|         if (separatorIndex <= 0 || separatorIndex >= value.Length - 1) | ||||
|         { | ||||
|             return null; | ||||
|         } | ||||
|  | ||||
|         var algorithm = value.Substring(0, separatorIndex); | ||||
|         var digest = value.Substring(separatorIndex + 1); | ||||
|  | ||||
|         try | ||||
|         { | ||||
|             return new VexContentAddress(algorithm, digest); | ||||
|         } | ||||
|         catch | ||||
|         { | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static string CreateId(VexQuerySignature signature, VexExportFormat format) | ||||
|         => string.Format(CultureInfo.InvariantCulture, "{0}|{1}", signature.Value, format.ToString().ToLowerInvariant()); | ||||
| } | ||||
| @@ -357,9 +311,6 @@ internal sealed class VexConsensusRecord | ||||
|  | ||||
|     public List<VexConsensusConflictDocument> Conflicts { get; set; } = new(); | ||||
|  | ||||
|     public VexSignalDocument? Signals { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public string? PolicyVersion { get; set; } | ||||
|         = null; | ||||
|  | ||||
| @@ -372,9 +323,6 @@ internal sealed class VexConsensusRecord | ||||
|     public string? Summary { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public DateTime GeneratedAt { get; set; } | ||||
|         = DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Utc); | ||||
|  | ||||
|     public static string CreateId(string vulnerabilityId, string productKey) | ||||
|         => string.Format(CultureInfo.InvariantCulture, "{0}|{1}", vulnerabilityId.Trim(), productKey.Trim()); | ||||
|  | ||||
| @@ -388,12 +336,10 @@ internal sealed class VexConsensusRecord | ||||
|             CalculatedAt = consensus.CalculatedAt.UtcDateTime, | ||||
|             Sources = consensus.Sources.Select(VexConsensusSourceDocument.FromDomain).ToList(), | ||||
|             Conflicts = consensus.Conflicts.Select(VexConsensusConflictDocument.FromDomain).ToList(), | ||||
|             Signals = VexSignalDocument.FromDomain(consensus.Signals), | ||||
|             PolicyVersion = consensus.PolicyVersion, | ||||
|             PolicyRevisionId = consensus.PolicyRevisionId, | ||||
|             PolicyDigest = consensus.PolicyDigest, | ||||
|             Summary = consensus.Summary, | ||||
|             GeneratedAt = consensus.CalculatedAt.UtcDateTime, | ||||
|         }; | ||||
|  | ||||
|     public VexConsensus ToDomain() | ||||
| @@ -404,7 +350,6 @@ internal sealed class VexConsensusRecord | ||||
|             new DateTimeOffset(CalculatedAt, TimeSpan.Zero), | ||||
|             Sources.Select(static source => source.ToDomain()), | ||||
|             Conflicts.Select(static conflict => conflict.ToDomain()), | ||||
|             Signals?.ToDomain(), | ||||
|             PolicyVersion, | ||||
|             Summary, | ||||
|             PolicyRevisionId, | ||||
| @@ -534,245 +479,6 @@ internal sealed class VexConsensusConflictDocument | ||||
|             Reason); | ||||
| } | ||||
|  | ||||
| [BsonIgnoreExtraElements] | ||||
| internal sealed class VexSignalDocument | ||||
| { | ||||
|     public VexSeveritySignalDocument? Severity { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public bool? Kev { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public double? Epss { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public static VexSignalDocument? FromDomain(VexSignalSnapshot? signals) | ||||
|     { | ||||
|         if (signals is null) | ||||
|         { | ||||
|             return null; | ||||
|         } | ||||
|  | ||||
|         return new VexSignalDocument | ||||
|         { | ||||
|             Severity = VexSeveritySignalDocument.FromDomain(signals.Severity), | ||||
|             Kev = signals.Kev, | ||||
|             Epss = signals.Epss, | ||||
|         }; | ||||
|     } | ||||
|  | ||||
|     public VexSignalSnapshot ToDomain() | ||||
|         => new( | ||||
|             Severity?.ToDomain(), | ||||
|             Kev, | ||||
|             Epss); | ||||
| } | ||||
|  | ||||
| [BsonIgnoreExtraElements] | ||||
| internal sealed class VexSeveritySignalDocument | ||||
| { | ||||
|     public string Scheme { get; set; } = default!; | ||||
|  | ||||
|     public double? Score { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public string? Label { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public string? Vector { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public static VexSeveritySignalDocument? FromDomain(VexSeveritySignal? signal) | ||||
|     { | ||||
|         if (signal is null) | ||||
|         { | ||||
|             return null; | ||||
|         } | ||||
|  | ||||
|         return new VexSeveritySignalDocument | ||||
|         { | ||||
|             Scheme = signal.Scheme, | ||||
|             Score = signal.Score, | ||||
|             Label = signal.Label, | ||||
|             Vector = signal.Vector, | ||||
|         }; | ||||
|     } | ||||
|  | ||||
|     public VexSeveritySignal ToDomain() | ||||
|         => new( | ||||
|             Scheme, | ||||
|             Score, | ||||
|             Label, | ||||
|             Vector); | ||||
| } | ||||
|  | ||||
| [BsonIgnoreExtraElements] | ||||
| internal sealed class VexStatementRecord | ||||
| { | ||||
|     [BsonId] | ||||
|     public ObjectId Id { get; set; } | ||||
|         = ObjectId.GenerateNewId(); | ||||
|  | ||||
|     public string VulnerabilityId { get; set; } = default!; | ||||
|  | ||||
|     public string ProviderId { get; set; } = default!; | ||||
|  | ||||
|     public VexProductDocument Product { get; set; } = default!; | ||||
|  | ||||
|     public string Status { get; set; } = default!; | ||||
|  | ||||
|     public string? Justification { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public string? Detail { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public VexClaimDocumentRecord Document { get; set; } = default!; | ||||
|  | ||||
|     public DateTime FirstSeen { get; set; } | ||||
|         = DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Utc); | ||||
|  | ||||
|     public DateTime LastSeen { get; set; } | ||||
|         = DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Utc); | ||||
|  | ||||
|     public VexConfidenceDocument? Confidence { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public Dictionary<string, string> AdditionalMetadata { get; set; } = new(StringComparer.Ordinal); | ||||
|  | ||||
|     public VexSignalDocument? Signals { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public DateTime InsertedAt { get; set; } | ||||
|         = DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Utc); | ||||
|  | ||||
|     public static VexStatementRecord FromDomain(VexClaim claim, DateTimeOffset observedAt) | ||||
|         => new() | ||||
|         { | ||||
|             VulnerabilityId = claim.VulnerabilityId, | ||||
|             ProviderId = claim.ProviderId, | ||||
|             Product = VexProductDocument.FromDomain(claim.Product), | ||||
|             Status = claim.Status.ToString().ToLowerInvariant(), | ||||
|             Justification = claim.Justification?.ToString().ToLowerInvariant(), | ||||
|             Detail = claim.Detail, | ||||
|             Document = VexClaimDocumentRecord.FromDomain(claim.Document), | ||||
|             FirstSeen = claim.FirstSeen.UtcDateTime, | ||||
|             LastSeen = claim.LastSeen.UtcDateTime, | ||||
|             Confidence = claim.Confidence is null ? null : VexConfidenceDocument.FromDomain(claim.Confidence), | ||||
|             AdditionalMetadata = claim.AdditionalMetadata.ToDictionary(kvp => kvp.Key, kvp => kvp.Value, StringComparer.Ordinal), | ||||
|             Signals = VexSignalDocument.FromDomain(claim.Signals), | ||||
|             InsertedAt = observedAt.UtcDateTime, | ||||
|         }; | ||||
|  | ||||
|     public VexClaim ToDomain() | ||||
|     { | ||||
|         VexJustification? justification = string.IsNullOrWhiteSpace(Justification) | ||||
|             ? null | ||||
|             : Enum.Parse<VexJustification>(Justification, ignoreCase: true); | ||||
|  | ||||
|         var metadata = (AdditionalMetadata ?? new Dictionary<string, string>(StringComparer.Ordinal)) | ||||
|             .ToImmutableDictionary(StringComparer.Ordinal); | ||||
|  | ||||
|         return new VexClaim( | ||||
|             VulnerabilityId, | ||||
|             ProviderId, | ||||
|             Product.ToDomain(), | ||||
|             Enum.Parse<VexClaimStatus>(Status, ignoreCase: true), | ||||
|             Document.ToDomain(), | ||||
|             new DateTimeOffset(FirstSeen, TimeSpan.Zero), | ||||
|             new DateTimeOffset(LastSeen, TimeSpan.Zero), | ||||
|             justification, | ||||
|             Detail, | ||||
|             Confidence?.ToDomain(), | ||||
|             Signals?.ToDomain(), | ||||
|             metadata); | ||||
|     } | ||||
| } | ||||
|  | ||||
| [BsonIgnoreExtraElements] | ||||
| internal sealed class VexClaimDocumentRecord | ||||
| { | ||||
|     public string Format { get; set; } = default!; | ||||
|  | ||||
|     public string Digest { get; set; } = default!; | ||||
|  | ||||
|     public string SourceUri { get; set; } = default!; | ||||
|  | ||||
|     public string? Revision { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public VexSignatureMetadataDocument? Signature { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public static VexClaimDocumentRecord FromDomain(VexClaimDocument document) | ||||
|         => new() | ||||
|         { | ||||
|             Format = document.Format.ToString().ToLowerInvariant(), | ||||
|             Digest = document.Digest, | ||||
|             SourceUri = document.SourceUri.ToString(), | ||||
|             Revision = document.Revision, | ||||
|             Signature = document.Signature is null ? null : VexSignatureMetadataDocument.FromDomain(document.Signature), | ||||
|         }; | ||||
|  | ||||
|     public VexClaimDocument ToDomain() | ||||
|     { | ||||
|         var format = Enum.Parse<VexDocumentFormat>(Format, ignoreCase: true); | ||||
|         return new VexClaimDocument( | ||||
|             format, | ||||
|             Digest, | ||||
|             new Uri(SourceUri), | ||||
|             Revision, | ||||
|             Signature?.ToDomain()); | ||||
|     } | ||||
| } | ||||
|  | ||||
| [BsonIgnoreExtraElements] | ||||
| internal sealed class VexSignatureMetadataDocument | ||||
| { | ||||
|     public string Type { get; set; } = default!; | ||||
|  | ||||
|     public string? Subject { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public string? Issuer { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public string? KeyId { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public DateTime? VerifiedAt { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public string? TransparencyLogReference { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public static VexSignatureMetadataDocument FromDomain(VexSignatureMetadata metadata) | ||||
|         => new() | ||||
|         { | ||||
|             Type = metadata.Type, | ||||
|             Subject = metadata.Subject, | ||||
|             Issuer = metadata.Issuer, | ||||
|             KeyId = metadata.KeyId, | ||||
|             VerifiedAt = metadata.VerifiedAt?.UtcDateTime, | ||||
|             TransparencyLogReference = metadata.TransparencyLogReference, | ||||
|         }; | ||||
|  | ||||
|     public VexSignatureMetadata ToDomain() | ||||
|     { | ||||
|         var verifiedAt = VerifiedAt.HasValue | ||||
|             ? new DateTimeOffset(DateTime.SpecifyKind(VerifiedAt.Value, DateTimeKind.Utc)) | ||||
|             : (DateTimeOffset?)null; | ||||
|  | ||||
|         return new VexSignatureMetadata( | ||||
|             Type, | ||||
|             Subject, | ||||
|             Issuer, | ||||
|             KeyId, | ||||
|             verifiedAt, | ||||
|             TransparencyLogReference); | ||||
|     } | ||||
| } | ||||
|  | ||||
| [BsonIgnoreExtraElements] | ||||
| internal sealed class VexConfidenceDocument | ||||
| { | ||||
| @@ -876,31 +582,12 @@ internal sealed class VexConnectorStateDocument | ||||
|  | ||||
|     public List<string> DocumentDigests { get; set; } = new(); | ||||
|  | ||||
|     public Dictionary<string, string> ResumeTokens { get; set; } = new(StringComparer.Ordinal); | ||||
|  | ||||
|     public DateTime? LastSuccessAt { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public int FailureCount { get; set; } | ||||
|         = 0; | ||||
|  | ||||
|     public DateTime? NextEligibleRun { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public string? LastFailureReason { get; set; } | ||||
|         = null; | ||||
|  | ||||
|     public static VexConnectorStateDocument FromRecord(VexConnectorState state) | ||||
|         => new() | ||||
|         { | ||||
|             ConnectorId = state.ConnectorId, | ||||
|             LastUpdated = state.LastUpdated?.UtcDateTime, | ||||
|             DocumentDigests = state.DocumentDigests.ToList(), | ||||
|             ResumeTokens = state.ResumeTokens.ToDictionary(static pair => pair.Key, static pair => pair.Value, StringComparer.Ordinal), | ||||
|             LastSuccessAt = state.LastSuccessAt?.UtcDateTime, | ||||
|             FailureCount = state.FailureCount, | ||||
|             NextEligibleRun = state.NextEligibleRun?.UtcDateTime, | ||||
|             LastFailureReason = state.LastFailureReason, | ||||
|         }; | ||||
|  | ||||
|     public VexConnectorState ToRecord() | ||||
| @@ -912,11 +599,6 @@ internal sealed class VexConnectorStateDocument | ||||
|         return new VexConnectorState( | ||||
|             ConnectorId, | ||||
|             lastUpdated, | ||||
|             DocumentDigests.ToImmutableArray(), | ||||
|             ResumeTokens?.ToImmutableDictionary(StringComparer.Ordinal) ?? ImmutableDictionary<string, string>.Empty, | ||||
|             LastSuccessAt.HasValue ? new DateTimeOffset(DateTime.SpecifyKind(LastSuccessAt.Value, DateTimeKind.Utc)) : null, | ||||
|             FailureCount, | ||||
|             NextEligibleRun.HasValue ? new DateTimeOffset(DateTime.SpecifyKind(NextEligibleRun.Value, DateTimeKind.Utc)) : null, | ||||
|             string.IsNullOrWhiteSpace(LastFailureReason) ? null : LastFailureReason.Trim()); | ||||
|             DocumentDigests.ToImmutableArray()); | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user