using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using StellaOps.Excititor.Core.Storage; using StellaOps.Excititor.WebService.Services; namespace StellaOps.Excititor.WebService.Endpoints; /// /// Attestation API endpoints (temporarily disabled while Mongo is removed and Postgres storage is adopted). /// public static class AttestationEndpoints { public static void MapAttestationEndpoints(this WebApplication app) { // GET /attestations/vex/list app.MapGet("/attestations/vex/list", ( HttpContext context, IOptions storageOptions) => { var scopeResult = ScopeAuthorization.RequireScope(context, "vex.read"); if (scopeResult is not null) { return scopeResult; } if (!TryResolveTenant(context, storageOptions.Value, requireHeader: false, out _, out var tenantError)) { return tenantError; } return Results.Problem( detail: "Attestation listing is temporarily unavailable during Postgres migration (Mongo/BSON removed).", statusCode: StatusCodes.Status503ServiceUnavailable, title: "Service unavailable"); }).WithName("ListVexAttestations"); // GET /attestations/vex/{attestationId} app.MapGet("/attestations/vex/{attestationId}", ( HttpContext context, string attestationId, IOptions storageOptions) => { var scopeResult = ScopeAuthorization.RequireScope(context, "vex.read"); if (scopeResult is not null) { return scopeResult; } if (!TryResolveTenant(context, storageOptions.Value, requireHeader: false, out _, out var tenantError)) { return tenantError; } if (string.IsNullOrWhiteSpace(attestationId)) { return Results.Problem( detail: "attestationId is required.", statusCode: StatusCodes.Status400BadRequest, title: "Validation error"); } return Results.Problem( detail: "Attestation retrieval is temporarily unavailable during Postgres migration (Mongo/BSON removed).", statusCode: StatusCodes.Status503ServiceUnavailable, title: "Service unavailable"); }).WithName("GetVexAttestation"); } }