using System.Diagnostics; using Flurl.Http; using Hellang.Middleware.ProblemDetails; using InnovEnergy.App.Backend.Database; using InnovEnergy.App.Backend.Websockets; using Microsoft.AspNetCore.HttpOverrides; using Microsoft.AspNetCore.Mvc; using Microsoft.OpenApi.Models; using InnovEnergy.Lib.Utils; using Org.BouncyCastle.Math.EC; namespace InnovEnergy.App.Backend; public static class Program { public static async Task Main(String[] args) { Watchdog.NotifyReady(); Db.Init(); var builder = WebApplication.CreateBuilder(args); RabbitMqManager.InitializeEnvironment(); RabbitMqManager.StartRabbitMqConsumer(); WebsocketManager.MonitorSalimaxInstallationTable(); WebsocketManager.MonitorSalidomoInstallationTable(); builder.Services.AddControllers(); builder.Services.AddProblemDetails(setup => { //This includes the stacktrace in Development Env setup.IncludeExceptionDetails = (_, _) => builder.Environment.IsDevelopment() || builder.Environment.IsStaging(); //This handles our Exceptions setup.Map(exception => new ProblemDetails { Detail = exception.Detail, Status = exception.Status, Type = exception.Type, Instance = exception.Instance }); }); builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", OpenApiInfo); c.UseAllOfToExtendReferenceSchemas(); c.SupportNonNullableReferenceTypes(); }); var app = builder.Build(); app.Use(async (context, next) => { context.Request.WriteLine(); await next(context); }); app.UseWebSockets(); app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto }); if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseCors(p => p.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod()) ; //app.UseHttpsRedirection(); app.MapControllers(); app.UseProblemDetails(); app.Run(); } private static OpenApiInfo OpenApiInfo { get; } = new OpenApiInfo { Title = "InnovEnergy Backend API", Version = "v1" }; }