102 lines
3.4 KiB
C#
102 lines
3.4 KiB
C#
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<MqSettings>();
|
||
|
||
// 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, ParrAuthenticationHandler>(ParrAuthenticationOptions.DefaultScheme, opt => { });
|
||
// не используем, так как проверка ролей остается прежней, а роли подставляем в ParrAuthenticationHandler
|
||
//builder.Services.AddSimpleRoleAuthorization<BaseSimpleRoleProvider>();
|
||
|
||
// При использовании балансировщика (haproxy, перенаправлять заголовки) (см ниже: app.UseForwardedHeaders();)
|
||
builder.Services.Configure<ForwardedHeadersOptions>(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();
|