feat: add tenant provisioning and key lifecycle (#5)
quality-gate / quality (push) Successful in 50s
quality-gate / quality (push) Successful in 50s
Closes #5
This commit is contained in:
@@ -1,15 +1,15 @@
|
||||
using System.Net;
|
||||
using FinalFactory.Rendezvous.Contracts;
|
||||
using FinalFactory.Rendezvous.Server.Http;
|
||||
using FinalFactory.Rendezvous.Server.Provisioning;
|
||||
using FinalFactory.Rendezvous.Server.Transport;
|
||||
using Microsoft.OpenApi;
|
||||
|
||||
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
|
||||
bool isOpenApiGeneration = Environment.GetCommandLineArgs().Any(static argument =>
|
||||
string.Equals(
|
||||
Path.GetFileName(argument),
|
||||
"dotnet-getdocument.dll",
|
||||
StringComparison.OrdinalIgnoreCase));
|
||||
bool isOpenApiGeneration = string.Equals(
|
||||
System.Reflection.Assembly.GetEntryAssembly()?.GetName().Name,
|
||||
"GetDocument.Insider",
|
||||
StringComparison.Ordinal);
|
||||
|
||||
builder.Services.AddOpenApi("v1", static options =>
|
||||
options.AddSchemaTransformer(static (schema, context, cancellationToken) =>
|
||||
@@ -34,6 +34,30 @@ builder.Services.AddOpenApi("v1", static options =>
|
||||
}));
|
||||
builder.Services.ConfigureHttpJsonOptions(static options =>
|
||||
ContractJson.Configure(options.SerializerOptions));
|
||||
|
||||
if (isOpenApiGeneration)
|
||||
{
|
||||
builder.Services.AddSingleton(new ProvisioningReadiness(false));
|
||||
}
|
||||
else
|
||||
{
|
||||
ProvisioningOptions provisioningOptions = builder.Configuration
|
||||
.GetSection(ProvisioningOptions.SectionName)
|
||||
.Get<ProvisioningOptions>() ?? new ProvisioningOptions();
|
||||
ISecretProvider secretProvider = builder.Environment.IsDevelopment()
|
||||
? new EphemeralDevelopmentSecretProvider()
|
||||
: new EnvironmentSecretProvider();
|
||||
ProvisioningRuntime provisioning = ProvisioningRuntime.Create(
|
||||
provisioningOptions,
|
||||
secretProvider,
|
||||
DateTimeOffset.UtcNow);
|
||||
builder.Services.AddSingleton(provisioning);
|
||||
builder.Services.AddSingleton(provisioning.Policies);
|
||||
builder.Services.AddSingleton(provisioning.Credentials);
|
||||
builder.Services.AddSingleton(provisioning.PublisherAuthorization);
|
||||
builder.Services.AddSingleton(new ProvisioningReadiness(true));
|
||||
}
|
||||
|
||||
builder.Services
|
||||
.AddOptions<UdpMediatorOptions>()
|
||||
.BindConfiguration(UdpMediatorOptions.SectionName)
|
||||
@@ -61,7 +85,8 @@ app.MapGet(
|
||||
.WithTags("Health");
|
||||
app.MapGet(
|
||||
"/health/ready",
|
||||
static (UdpMediatorService mediator) => mediator.LocalEndpoint is null
|
||||
static (UdpMediatorService mediator, ProvisioningReadiness provisioning) =>
|
||||
mediator.LocalEndpoint is null || !provisioning.IsReady
|
||||
? Results.StatusCode(StatusCodes.Status503ServiceUnavailable)
|
||||
: Results.Ok(new HealthResponse { Status = "ready" }))
|
||||
.Produces<HealthResponse>()
|
||||
|
||||
Reference in New Issue
Block a user