70 lines
2.4 KiB
C#
70 lines
2.4 KiB
C#
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace StellaOps.Provcache.Api;
|
|
|
|
public static partial class ProvcacheEndpointExtensions
|
|
{
|
|
/// <summary>
|
|
/// GET /v1/provcache/{veriKey}/manifest
|
|
/// </summary>
|
|
private static async Task<IResult> GetInputManifestAsync(
|
|
string veriKey,
|
|
IProvcacheService provcacheService,
|
|
TimeProvider timeProvider,
|
|
ILogger<ProvcacheApiEndpoints> logger,
|
|
CancellationToken cancellationToken)
|
|
{
|
|
logger.LogDebug("GET /v1/provcache/{VeriKey}/manifest", veriKey);
|
|
|
|
try
|
|
{
|
|
// First get the entry to verify it exists
|
|
var result = await provcacheService.GetAsync(veriKey, bypassCache: false, cancellationToken);
|
|
|
|
if (result.Status == ProvcacheResultStatus.CacheMiss)
|
|
{
|
|
return Results.NotFound(new ProblemDetails
|
|
{
|
|
Title = "Entry not found",
|
|
Detail = $"No cache entry found for VeriKey: {veriKey}",
|
|
Status = StatusCodes.Status404NotFound
|
|
});
|
|
}
|
|
|
|
if (result.Status == ProvcacheResultStatus.Expired)
|
|
{
|
|
return Results.NotFound(new ProblemDetails
|
|
{
|
|
Title = "Entry expired",
|
|
Detail = $"Cache entry for VeriKey '{veriKey}' has expired",
|
|
Status = StatusCodes.Status404NotFound
|
|
});
|
|
}
|
|
|
|
var entry = result.Entry;
|
|
if (entry is null)
|
|
{
|
|
return Results.NotFound(new ProblemDetails
|
|
{
|
|
Title = "Entry not found",
|
|
Detail = $"No cache entry found for VeriKey: {veriKey}",
|
|
Status = StatusCodes.Status404NotFound
|
|
});
|
|
}
|
|
|
|
// Build the input manifest from the entry metadata
|
|
// In a full implementation, we'd resolve these hashes to more detailed metadata
|
|
// from their respective stores (SBOM store, VEX store, policy registry, etc.)
|
|
var manifest = BuildInputManifest(entry, timeProvider);
|
|
|
|
return Results.Ok(manifest);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
logger.LogError(ex, "Error getting input manifest for VeriKey {VeriKey}", veriKey);
|
|
return InternalError("Manifest retrieval failed");
|
|
}
|
|
}
|
|
}
|