using Core.Cerberos.Adapters.Extensions; using Core.Cerberos.Adapters.Helpers; using Core.Cerberos.Provider; using Microsoft.AspNetCore.RateLimiting; using Microsoft.AspNetCore.ResponseCompression; using System.IO.Compression; using System.Reflection; using System.Threading.RateLimiting; var builder = WebApplication.CreateBuilder(args); var authSettings = AuthHelper.GetAuthSettings(builder, "cerberos_dal"); builder.Services.ConfigureAuthentication(builder.Configuration, authSettings); builder.Configuration.AddUserSecrets(Assembly.GetExecutingAssembly()).AddEnvironmentVariables(); // Add services to the container. builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddCors(options => { options.AddPolicy("AllowAll", policyBuilder => policyBuilder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod()); }); builder.Services.AddMvc().AddJsonOptions(options => { options.JsonSerializerOptions.WriteIndented = true; options.JsonSerializerOptions.MaxDepth = 20; options.JsonSerializerOptions.NumberHandling = System.Text.Json.Serialization.JsonNumberHandling.AllowNamedFloatingPointLiterals; }); builder.Services.Configure(options => { options.Level = CompressionLevel.Fastest; }); builder.Services.Configure(options => { options.Level = CompressionLevel.SmallestSize; }); builder.Services.AddResponseCompression(options => { options.EnableForHttps = true; options.Providers.Add(); options.Providers.Add(); }); builder.Services.AddRateLimiter(_ => _ .AddFixedWindowLimiter("fixed", options => { options.PermitLimit = 5; options.Window = TimeSpan.FromSeconds(10); options.QueueProcessingOrder = QueueProcessingOrder.OldestFirst; options.QueueLimit = 2; }) .AddSlidingWindowLimiter("sliding", options => { options.PermitLimit = 5; options.Window = TimeSpan.FromSeconds(10); options.SegmentsPerWindow = 5; options.QueueProcessingOrder = QueueProcessingOrder.OldestFirst; options.QueueLimit = 2; })); builder.Services.AddResponseCaching(); builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwagger(builder.Configuration, "Core.Cerberos.DAL.API.xml", authSettings); builder.Services.AddVersioning(builder.Configuration); builder.Services.AddLogging(); builder.Services.AddProblemDetails(); builder.Services.AddDALLayer(builder.Configuration); var app = builder.Build(); app.UseSwaggerUI(builder.Configuration, authSettings); app.ConfigureSwagger(builder.Configuration); app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();