using System.Text.Json.Serialization; using Microsoft.AspNetCore.Http.Timeouts; using Microsoft.EntityFrameworkCore; using Spacebar.AdminAPI.Middleware; using Spacebar.AdminAPI.Services; using Spacebar.Db.Contexts; using Spacebar.RabbitMqUtilities; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(options => { options.MaxValidationDepth = null; // options.MaxIAsyncEnumerableBufferLimit = 1; }).AddJsonOptions(options => { options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull; options.JsonSerializerOptions.WriteIndented = true; // options.JsonSerializerOptions.DefaultBufferSize = ; }).AddMvcOptions(o=> { o.SuppressOutputFormatterBuffering = true; }); // Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi builder.Services.AddOpenApi(); builder.Services.AddDbContextPool(options => { options .UseNpgsql(builder.Configuration.GetConnectionString("Spacebar")) .EnableDetailedErrors(); }); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddRequestTimeouts(x => { x.DefaultPolicy = new RequestTimeoutPolicy { Timeout = TimeSpan.FromMinutes(10), WriteTimeoutResponse = async context => { context.Response.StatusCode = 504; context.Response.ContentType = "application/json"; await context.Response.StartAsync(); await context.Response.WriteAsJsonAsync(new { error = "Unknown error" }); await context.Response.CompleteAsync(); } }; }); // builder.Services.AddCors(options => { // options.AddPolicy( // "Open", // policy => policy.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod()); // }); var app = builder.Build(); app.Use((context, next) => { context.Response.Headers["Access-Control-Allow-Origin"] = "*"; context.Response.Headers["Access-Control-Allow-Methods"] = "GET, POST, PUT, DELETE, OPTIONS"; context.Response.Headers["Access-Control-Allow-Headers"] = "*, Authorization"; if (context.Request.Method == "OPTIONS") { context.Response.StatusCode = 200; return Task.CompletedTask; } return next(); }); app.UsePathBase("/_spacebar/admin"); // app.UseCors("Open"); // Configure the HTTP request pipeline. app.MapOpenApi(); app.UseMiddleware(); app.UseAuthorization(); app.MapControllers(); app.Run();