89 lines
4.0 KiB
C#
89 lines
4.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text.Json.Serialization;
|
|
|
|
namespace StellaOps.Excititor.WebService.Contracts;
|
|
|
|
/// <summary>
|
|
/// Response for /attestations/vex/{attestationId} endpoint.
|
|
/// </summary>
|
|
public sealed record VexAttestationDetailResponse(
|
|
[property: JsonPropertyName("attestationId")] string AttestationId,
|
|
[property: JsonPropertyName("tenant")] string Tenant,
|
|
[property: JsonPropertyName("createdAt")] DateTimeOffset CreatedAt,
|
|
[property: JsonPropertyName("predicateType")] string PredicateType,
|
|
[property: JsonPropertyName("subject")] VexAttestationSubject Subject,
|
|
[property: JsonPropertyName("builder")] VexAttestationBuilderIdentity Builder,
|
|
[property: JsonPropertyName("verification")] VexAttestationVerificationState Verification,
|
|
[property: JsonPropertyName("chainOfCustody")] IReadOnlyList<VexAttestationCustodyLink> ChainOfCustody,
|
|
[property: JsonPropertyName("metadata")] IReadOnlyDictionary<string, string> Metadata);
|
|
|
|
/// <summary>
|
|
/// Subject of the attestation (what was signed).
|
|
/// </summary>
|
|
public sealed record VexAttestationSubject(
|
|
[property: JsonPropertyName("digest")] string Digest,
|
|
[property: JsonPropertyName("digestAlgorithm")] string DigestAlgorithm,
|
|
[property: JsonPropertyName("name")] string? Name,
|
|
[property: JsonPropertyName("uri")] string? Uri);
|
|
|
|
/// <summary>
|
|
/// Builder identity for the attestation.
|
|
/// </summary>
|
|
public sealed record VexAttestationBuilderIdentity(
|
|
[property: JsonPropertyName("id")] string Id,
|
|
[property: JsonPropertyName("version")] string? Version,
|
|
[property: JsonPropertyName("builderId")] string? BuilderId,
|
|
[property: JsonPropertyName("invocationId")] string? InvocationId);
|
|
|
|
/// <summary>
|
|
/// DSSE verification state.
|
|
/// </summary>
|
|
public sealed record VexAttestationVerificationState(
|
|
[property: JsonPropertyName("valid")] bool Valid,
|
|
[property: JsonPropertyName("verifiedAt")] DateTimeOffset? VerifiedAt,
|
|
[property: JsonPropertyName("signatureType")] string? SignatureType,
|
|
[property: JsonPropertyName("keyId")] string? KeyId,
|
|
[property: JsonPropertyName("issuer")] string? Issuer,
|
|
[property: JsonPropertyName("envelopeDigest")] string? EnvelopeDigest,
|
|
[property: JsonPropertyName("diagnostics")] IReadOnlyDictionary<string, string> Diagnostics);
|
|
|
|
/// <summary>
|
|
/// Chain-of-custody link in the attestation provenance.
|
|
/// </summary>
|
|
public sealed record VexAttestationCustodyLink(
|
|
[property: JsonPropertyName("step")] int Step,
|
|
[property: JsonPropertyName("actor")] string Actor,
|
|
[property: JsonPropertyName("action")] string Action,
|
|
[property: JsonPropertyName("timestamp")] DateTimeOffset Timestamp,
|
|
[property: JsonPropertyName("reference")] string? Reference);
|
|
|
|
/// <summary>
|
|
/// Response for /attestations/vex/list endpoint.
|
|
/// </summary>
|
|
public sealed record VexAttestationListResponse(
|
|
[property: JsonPropertyName("items")] IReadOnlyList<VexAttestationListItem> Items,
|
|
[property: JsonPropertyName("cursor")] string? Cursor,
|
|
[property: JsonPropertyName("hasMore")] bool HasMore,
|
|
[property: JsonPropertyName("total")] int Total);
|
|
|
|
/// <summary>
|
|
/// Summary item for attestation list.
|
|
/// </summary>
|
|
public sealed record VexAttestationListItem(
|
|
[property: JsonPropertyName("attestationId")] string AttestationId,
|
|
[property: JsonPropertyName("tenant")] string Tenant,
|
|
[property: JsonPropertyName("createdAt")] DateTimeOffset CreatedAt,
|
|
[property: JsonPropertyName("predicateType")] string PredicateType,
|
|
[property: JsonPropertyName("subjectDigest")] string SubjectDigest,
|
|
[property: JsonPropertyName("valid")] bool Valid,
|
|
[property: JsonPropertyName("builderId")] string? BuilderId);
|
|
|
|
/// <summary>
|
|
/// Response for /attestations/vex/lookup endpoint.
|
|
/// </summary>
|
|
public sealed record VexAttestationLookupResponse(
|
|
[property: JsonPropertyName("subjectDigest")] string SubjectDigest,
|
|
[property: JsonPropertyName("attestations")] IReadOnlyList<VexAttestationListItem> Attestations,
|
|
[property: JsonPropertyName("queriedAt")] DateTimeOffset QueriedAt);
|