using Core.Blueprint.KeyVault.Configuration; using Core.Blueprint.Logging.Configuration; using Core.Thalos.BuildingBlocks; using Core.Thalos.BuildingBlocks.Configuration; using Core.Thalos.BuildingBlocks.Extensions; using Core.Thalos.External.ClientConfiguration; using Microsoft.AspNetCore.ResponseCompression; using OpenTelemetry.Logs; using OpenTelemetry.Resources; using System.IO.Compression; using System.Reflection; var builder = WebApplication.CreateBuilder(args); builder.Configuration .AddUserSecrets(Assembly.GetExecutingAssembly()) .AddEnvironmentVariables(); var services = builder.Services.AddKeyVault(builder.Configuration); var authSettings = await AuthHelper.GetAuthSettings(builder.Services, builder, "thalos_common"); builder.Services.ConfigureAuthentication(builder.Configuration, authSettings); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddResponseCompression(); builder.Services.AddProblemDetails(); builder.Services.AddLogs(builder); builder.Services.AddMemoryCache(); builder.Services.AddResponseCaching(configureOptions => { configureOptions.UseCaseSensitivePaths = true; }); builder.Logging.AddOpenTelemetry(options => { options.IncludeScopes = true; options.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("core.thalos.bff.api")).AddConsoleExporter(); }); builder.Host.ConfigureServices((context, services) => { builder.Services.AddHsts(options => { options.Preload = true; options.IncludeSubDomains = true; options.MaxAge = TimeSpan.FromDays(60); }); builder.Services.AddResponseCaching(configureOptions => { configureOptions.UseCaseSensitivePaths = true; configureOptions.MaximumBodySize = 2048; }); builder.Services.AddHttpsRedirection(options => { options.RedirectStatusCode = 308; }); services.AddHttpLogging(http => { http.CombineLogs = true; }); services.AddAntiforgery(); services.AddCors(options => { options.AddPolicy("AllowAll", policyBuilder => policyBuilder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod()); }); services.AddMvc().AddJsonOptions(options => { options.JsonSerializerOptions.WriteIndented = true; options.JsonSerializerOptions.MaxDepth = 20; options.JsonSerializerOptions.NumberHandling = System.Text.Json.Serialization.JsonNumberHandling.AllowNamedFloatingPointLiterals; }); services.Configure(options => { options.Level = CompressionLevel.SmallestSize; }); services.Configure(options => { options.Level = CompressionLevel.SmallestSize; }); services.AddResponseCompression(options => { options.EnableForHttps = true; options.Providers.Add(); options.Providers.Add(); }); services.AddResponseCaching(); services.AddControllers(); services.AddSwaggerGen(builder.Configuration, "Core.Thalos.BFF.Api.xml", authSettings); services.AddVersioning(builder.Configuration); services.AddLogging(); services.AddProblemDetails(); services.AddHttpContextAccessor(); services.AddTransient(); // Register the TrackingIdHandler services.RegisterExternalLayer(builder.Configuration); }); builder.Services.AddCors(options => { options.AddDefaultPolicy( builder => { builder.AllowAnyOrigin() .AllowAnyHeader() .AllowAnyMethod(); }); }); builder.Services.AddScoped(); builder.Services.AddOutputCache(options => { options.AddBasePolicy(builder => builder.Expire(TimeSpan.FromSeconds(10))); options.AddPolicy("Expire20", builder => builder.Expire(TimeSpan.FromSeconds(20))); options.AddPolicy("Expire30", builder => builder.Expire(TimeSpan.FromSeconds(30))); }); //*************************************************************************// var app = builder.Build(); app.UseLogging(builder.Configuration); app.UseSwaggerUI(builder.Configuration, authSettings); app.ConfigureSwagger(builder.Configuration); app.UseRouting(); app.UseCors(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseResponseCompression(); app.UseOutputCache(); app.UseResponseCaching(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); //app.MapHealthChecks("/health"); app.Run();