разные правки по беку
This commit is contained in:
@@ -8,11 +8,12 @@ using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.OpenApi;
|
||||
using Scalar.AspNetCore;
|
||||
using Serilog;
|
||||
using Tnsu.ApprovalRoute.Api.Auth;
|
||||
using Tnsu.ApprovalRoute.Api.Filters;
|
||||
using Tnsu.ApprovalRoute.Application;
|
||||
using Tnsu.ApprovalRoute.Application.ListPartitioning;
|
||||
using Tnsu.ApprovalRoute.Application.Reminders;
|
||||
using Tnsu.ApprovalRoute.Application.RequestTypeLists;
|
||||
using Tnsu.ApprovalRoute.Application.Common.Interfaces;
|
||||
using Tnsu.ApprovalRoute.Infrastructure;
|
||||
|
||||
@@ -20,11 +21,27 @@ const string CorsPolicyName = "Frontend";
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
// Заменяет собой встроенных провайдеров логирования: все ILogger<T> в приложении
|
||||
// (включая наши логи в ListPartitioning) идут через Serilog в оба синка ниже.
|
||||
// ReadFrom.Configuration — чтобы Logging:LogLevel в appsettings продолжал работать
|
||||
// как обычно, без второй, серилоговской системы настройки уровней рядом с ним.
|
||||
builder.Host.UseSerilog((context, services, configuration) => configuration
|
||||
.ReadFrom.Configuration(context.Configuration)
|
||||
.Enrich.FromLogContext()
|
||||
.WriteTo.Console()
|
||||
// Один файл на календарный месяц (rollOnFileSizeLimit не включаем — ротация
|
||||
// только по времени). retainedFileCountLimit: null — логи не подчищаются
|
||||
// автоматически, ротацией места на диске занимается инфраструктура хоста.
|
||||
.WriteTo.File(
|
||||
"logs/log-.txt",
|
||||
rollingInterval: RollingInterval.Month,
|
||||
retainedFileCountLimit: null));
|
||||
|
||||
builder.Services.Configure<ForwardedHeadersOptions>(options =>
|
||||
{
|
||||
options.ForwardedHeaders =
|
||||
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
|
||||
|
||||
|
||||
options.KnownNetworks.Clear();
|
||||
options.KnownProxies.Clear();
|
||||
});
|
||||
@@ -40,7 +57,7 @@ builder.Services.AddCors(options =>
|
||||
builder.Services.AddApprovalRouteInfrastructure(builder.Configuration);
|
||||
builder.Services.AddApprovalRouteApplication();
|
||||
builder.Services.Configure<RemindersOptions>(builder.Configuration.GetSection("Reminders"));
|
||||
builder.Services.Configure<ListProvisioningOptions>(builder.Configuration.GetSection("ListProvisioning"));
|
||||
builder.Services.Configure<ListPartitioningOptions>(builder.Configuration.GetSection("ListPartitioning"));
|
||||
|
||||
// Hangfire на том же Postgres, что и остальные данные. Свои таблицы он создаёт сам
|
||||
// (схема hangfire) при старте — отдельной EF-миграции для них не нужно.
|
||||
@@ -109,6 +126,19 @@ app.UseCors(CorsPolicyName);
|
||||
app.UseAuthentication();
|
||||
app.UseAuthorization();
|
||||
|
||||
// Свой Basic Auth, а не схемы из AuthSetup: дашборд Hangfire открывается прямо в
|
||||
// браузере без похода за токеном Entra, ему нужна отдельная, простая проверка.
|
||||
// Логин/пароль — в конфигурации (Hangfire:Dashboard), см. appsettings.json.
|
||||
app.UseHangfireDashboard("/hangfire", new DashboardOptions
|
||||
{
|
||||
Authorization =
|
||||
[
|
||||
new HangfireDashboardBasicAuthFilter(
|
||||
app.Configuration["Hangfire:Dashboard:Username"] ?? string.Empty,
|
||||
app.Configuration["Hangfire:Dashboard:Password"] ?? string.Empty)
|
||||
]
|
||||
});
|
||||
|
||||
app.MapControllers();
|
||||
|
||||
await app.InitAndRunAsync();
|
||||
|
||||
Reference in New Issue
Block a user