using Azure.Identity; using Core.Blueprint.External; using Core.Blueprint.External.ClientConfiguration; using Core.Blueprint.Logging.Configuration; using Microsoft.AspNetCore.ResponseCompression; using Microsoft.Extensions.Configuration.AzureAppConfiguration; using OpenTelemetry.Logs; using OpenTelemetry.Resources; using System.IO.Compression; using System.Reflection; var builder = WebApplication.CreateBuilder(args); //builder.Configuration.AddAzureAppConfiguration(options => //{ // var endpoint = builder.Configuration.GetSection("Endpoints:AppConfigurationURI").Value; // if (string.IsNullOrEmpty(endpoint)) // throw new ArgumentException("The app configuration is missing"); // options.Connect(new Uri(endpoint), new DefaultAzureCredential()) // .Select(KeyFilter.Any, "blueprint_api"); // options.ConfigureKeyVault(keyVaultOptions => // { // keyVaultOptions.SetCredential(new DefaultAzureCredential()); // }); //}); builder.Services.AddEndpointsApiExplorer(); builder.Configuration .AddUserSecrets(Assembly.GetExecutingAssembly()) .AddEnvironmentVariables(); 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.blueprint.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.AddEndpointsApiExplorer(); services.AddSwaggerGen(); 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(); }); }); //*************************************************************************// var app = builder.Build(); app.UseCors(options => options.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin()); app.UseSwagger(); app.UseSwaggerUI(); app.UseResponseCompression(); app.UseResponseCaching(); app.UseHttpsRedirection(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.UseHsts(); app.UseAntiforgery(); app.UseLogging(builder.Configuration); app.Run();