Files
Elecciones-2025/Elecciones-Web/src/Elecciones.Worker/Program.cs

87 lines
2.7 KiB
C#
Raw Normal View History

using Elecciones.Database;
using Elecciones.Infrastructure.Services;
using Elecciones.Worker;
using Microsoft.EntityFrameworkCore;
2025-08-15 17:31:51 -03:00
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Serilog;
using System.Net.Http;
using System.Net.Security;
using System.Security.Authentication;
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.CreateBootstrapLogger();
Log.Information("Iniciando Elecciones.Worker Host...");
var builder = Host.CreateApplicationBuilder(args);
2025-08-15 17:31:51 -03:00
builder.Services.AddSerilog(config =>
config
.ReadFrom.Configuration(builder.Configuration)
.Enrich.FromLogContext()
.WriteTo.Console()
.WriteTo.File("logs/worker-.log", rollingInterval: RollingInterval.Day));
2025-08-15 17:31:51 -03:00
// --- Configuración de Servicios ---
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<EleccionesDbContext>(options =>
options.UseSqlServer(connectionString));
#if DEBUG
builder.Services.AddSingleton<IElectoralApiService, FakeElectoralApiService>();
#else
builder.Services.AddHttpClient("ElectoralApiClient", client =>
{
var baseUrl = builder.Configuration["ElectoralApi:BaseUrl"];
if (!string.IsNullOrEmpty(baseUrl))
{
client.BaseAddress = new Uri(baseUrl);
}
2025-08-16 09:37:54 -03:00
// Limpiamos headers por defecto y añadimos uno que simula ser un navegador moderno.
// Esto es crucial para pasar a través de WAFs (Web Application Firewalls).
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36");
2025-08-15 17:31:51 -03:00
})
.ConfigurePrimaryHttpMessageHandler(() =>
{
return new SocketsHttpHandler
{
SslOptions = new SslClientAuthenticationOptions
{
// Forzamos el protocolo TLS 1.3
EnabledSslProtocols = SslProtocols.Tls13,
// --- ¡¡¡LA LÍNEA CLAVE CORREGIDA!!! ---
// Forzamos explícitamente los únicos 3 cipher suites que el servidor acepta.
CipherSuitesPolicy = new CipherSuitesPolicy(new[]
{
TlsCipherSuite.TLS_AES_128_GCM_SHA256,
TlsCipherSuite.TLS_AES_256_GCM_SHA384,
TlsCipherSuite.TLS_CHACHA20_POLY1305_SHA256
})
}
};
});
2025-08-15 17:31:51 -03:00
builder.Services.AddSingleton<IElectoralApiService, ElectoralApiService>();
2025-08-15 17:31:51 -03:00
// --- FIN DE LA SECCIÓN MODIFICADA ---
#endif
builder.Services.AddHostedService<Worker>();
var host = builder.Build();
2025-08-15 17:31:51 -03:00
try {
host.Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "El Host de Elecciones.Worker terminó inesperadamente");
}
finally
{
Log.CloseAndFlush();
}