using System.Text; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.IdentityModel.Tokens; using PruebaGentle.Core.Config; using PruebaGentle.Core.Interfaces; using PruebaGentle.Infrastructure.Repositories; using PruebaGentle.Infrastructure.Services; var builder = WebApplication.CreateBuilder(args); // Bind JwtSettings builder.Services.Configure( builder.Configuration.GetSection("JwtSettings")); // Dependency Injection builder.Services.AddScoped(); builder.Services.AddSingleton(); // JWT Authentication var jwtSettings = builder.Configuration.GetSection("JwtSettings"); var secretKey = jwtSettings["Secret"] ?? throw new InvalidOperationException("JWT Secret not configured."); builder.Services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = "PruebaGentle", ValidAudience = "PruebaGentle", IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey)) }; }); builder.Services.AddAuthorization(); // Controllers builder.Services.AddControllers(); // OpenAPI (native .NET 10) builder.Services.AddOpenApi(); // CORS builder.Services.AddCors(options => { options.AddDefaultPolicy(policy => { policy.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); }); }); var app = builder.Build(); // Middleware pipeline if (app.Environment.IsDevelopment()) { app.MapOpenApi(); } app.UseCors(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.Run();