Files
parr_api/PARR.API/Program.cs

105 lines
3.6 KiB
C#
Raw Normal View History

2023-09-27 11:31:46 +10:00
using Elastic.CommonSchema.Serilog;
2023-05-17 16:00:50 +10:00
using FluentValidation;
using Microsoft.AspNetCore.HttpOverrides;
using PARR.API.Authentication;
using PARR.API.Infrastructure;
2023-05-17 16:30:13 +10:00
using PARR.API.Installers;
using PARR.API.Settings;
using PARR.Core;
2023-05-17 16:30:13 +10:00
using PARR.DAL;
using PARR.Infrastructure;
2023-05-17 16:00:50 +10:00
using Serilog;
using System.Reflection;
2023-05-17 15:17:00 +10:00
var builder = WebApplication.CreateBuilder(args);
2023-05-17 16:00:50 +10:00
builder.Host.UseSerilog((context, config) =>
{
2023-09-27 11:31:46 +10:00
if (context.HostingEnvironment.IsProduction())
config.WriteTo.Console(new EcsTextFormatter());
else
config.WriteTo.Console();
config.ReadFrom.Configuration(builder.Configuration);
2023-05-17 16:00:50 +10:00
});
builder.Services.InstallSettings(builder.Configuration);
2023-05-17 15:17:00 +10:00
// Add services to the container.
builder.Services.AddDalServices(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);
//---- --- ----
2023-05-17 16:00:50 +10:00
builder.Services.InstallApiServices(builder.Configuration);
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
2023-09-19 14:34:55 +10:00
// Dal configuration
builder.Configuration.AddDalConfigurations(builder.Services);
builder.Services.AddDallSettings(builder.Configuration);
// Auth
2023-12-04 12:02:55 +10:00
builder.Services.AddAuthentication(ParrAuthenticationOptions.DefaultScheme)
.AddScheme<ParrAuthenticationOptions, ParrAuthenticationHandler>(ParrAuthenticationOptions.DefaultScheme, opt => { });
// не используем, так как проверка ролей остается прежней, а роли подставляем в ParrAuthenticationHandler
//builder.Services.AddSimpleRoleAuthorization<BaseSimpleRoleProvider>();
2023-12-04 12:02:55 +10:00
// При использовании балансировщика (haproxy, перенаправлять заголовки) (см ниже: app.UseForwardedHeaders();)
builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
2023-12-04 12:02:55 +10:00
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
});
builder.Services.AddValidatorServices();
//builder.Services.AddValidatorsFromAssembly(Assembly.GetExecutingAssembly());
//builder.Services.AddControllers();
2023-05-17 15:17:00 +10:00
builder.Services.AddHttpContextAccessor();
2023-05-17 16:00:50 +10:00
2023-05-17 15:17:00 +10:00
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
2023-05-17 16:00:50 +10:00
builder.Services.InstallSwaggerService(builder.Configuration);
2023-12-11 09:23:19 +10:00
builder.Services.InstallCorsServices();
2023-05-17 15:17:00 +10:00
var app = builder.Build();
// подключаем обработку моих кастомных Exceptions (GlobalExceptionHandler)
app.UseExceptionHandler();
2023-12-04 12:02:55 +10:00
// При использовании балансировщика (haproxy, перенаправлять заголовки)
app.UseForwardedHeaders();
2023-05-17 15:17:00 +10:00
// Configure the HTTP request pipeline.
2023-05-17 16:00:50 +10:00
app.InstallSwagger();
2023-05-17 15:17:00 +10:00
app.UseAuthentication();
2023-05-17 15:17:00 +10:00
app.UseAuthorization();
app.MapControllers();
2023-12-11 09:23:19 +10:00
app.InstallCors(builder);
app.UseStaticFiles();
2023-12-11 09:23:19 +10:00
2023-05-17 15:17:00 +10:00
app.Run();