using Elastic.CommonSchema.Serilog; using FluentValidation; using Microsoft.AspNetCore.HttpOverrides; using PARR.API.Authentication; using PARR.API.Installers; using PARR.API.Settings; using PARR.Core; using PARR.DAL; using PARR.Domain.Enums; using PARR.Domain.Settings; using PARR.Infrastructure; using Serilog; using System.Reflection; var builder = WebApplication.CreateBuilder(args); builder.Host.UseSerilog((context, config) => { if (context.HostingEnvironment.IsProduction()) config.WriteTo.Console(new EcsTextFormatter()); else config.WriteTo.Console(); config.ReadFrom.Configuration(builder.Configuration); }); builder.Services.InstallSettings(builder.Configuration); // Add services to the container. builder.Services.InstallDalServices(builder.Configuration); //---- new ---- builder.Services.AddCoreServices(builder.Configuration); builder.Services.AddTaskManagement(mqSettingsFactory: (provider, taskType) => { var taskSettingsMq = provider.GetRequiredService(); // swith для примера //return taskType switch //{ // TaskTypeEnum.Workload => MqSettingsBase{ }, // _ => throw new ArgumentException($"Неизвестный тип задания {taskType}. Не смог для него получить настройки") //}; if (taskSettingsMq.Tasks.TryGetValue(taskType, out var settings)) return settings; throw new ArgumentException($"Настройки для типа задания {taskType} не найдены в конфигурации."); }); builder.Services.AddInfrastructureServices(builder.Configuration); //---- --- ---- builder.Services.InstallApiServices(builder.Configuration); builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); // Dal configuration builder.Configuration.AddDalConfigurations(builder.Services); builder.Services.AddDallSettings(builder.Configuration); // Auth builder.Services.AddAuthentication(ParrAuthenticationOptions.DefaultScheme) .AddScheme(ParrAuthenticationOptions.DefaultScheme, opt => { }); // не используем, так как проверка ролей остается прежней, а роли подставляем в ParrAuthenticationHandler //builder.Services.AddSimpleRoleAuthorization(); // При использовании балансировщика (haproxy, перенаправлять заголовки) (см ниже: app.UseForwardedHeaders();) builder.Services.Configure(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; options.KnownNetworks.Clear(); options.KnownProxies.Clear(); }); builder.Services.AddHttpContextAccessor(); builder.Services.AddControllers(); builder.Services.AddValidatorsFromAssembly(Assembly.GetExecutingAssembly()); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.InstallSwaggerService(builder.Configuration); builder.Services.InstallCorsServices(); var app = builder.Build(); // При использовании балансировщика (haproxy, перенаправлять заголовки) app.UseForwardedHeaders(); // Configure the HTTP request pipeline. app.InstallSwagger(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.InstallCors(builder); app.UseStaticFiles(); app.Run();