using System.Security.Cryptography.X509Certificates; using Registration.Infra.Repositories; using Registration.API.Configuration; using Registration.API.Services; var builder = WebApplication.CreateBuilder(args); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddScoped(); var relayOptions = builder.Configuration.GetSection("VbytesRelay").Get() ?? throw new InvalidOperationException("VbytesRelay configuration section is missing."); builder.Services.Configure(builder.Configuration.GetSection("VbytesRelay")); var certificate = X509CertificateLoader.LoadPkcs12FromFile( relayOptions.ClientCertificatePfxPath, password: null); builder.Services.AddHttpClient(VbytesParticipantRelayService.HttpClientName, client => { client.BaseAddress = new Uri(relayOptions.BaseUrl); client.Timeout = TimeSpan.FromSeconds(30); }) .ConfigurePrimaryHttpMessageHandler(() => { var handler = new HttpClientHandler(); handler.ClientCertificates.Add(certificate); return handler; }); builder.Services.AddScoped(); builder.Services.AddScoped(); var authApiOptions = builder.Configuration.GetSection("AuthApi").Get() ?? throw new InvalidOperationException("AuthApi configuration section is missing."); builder.Services.Configure(builder.Configuration.GetSection("AuthApi")); builder.Services.AddHttpClient(AuthService.HttpClientName, client => { client.BaseAddress = new Uri(authApiOptions.BaseUrl); client.Timeout = TimeSpan.FromSeconds(10); }); builder.Services.AddScoped(); builder.Services.AddControllers(); var app = builder.Build(); using (var scope = app.Services.CreateScope()) { var repo = scope.ServiceProvider.GetRequiredService(); await repo.EnsureCreated(); } // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } if (!app.Environment.IsDevelopment()) { app.UseHttpsRedirection(); } app.UseAuthorization(); app.MapControllers(); app.Run();