using System.Text;using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.EntityFrameworkCore; using Microsoft.IdentityModel.Tokens; using Minio; using Serilog; try { var builder = WebApplication.CreateBuilder(args); builder.Host.UseSerilog((ctx, cfg) => cfg.ReadFrom.Configuration(ctx.Configuration)); // Configuration builder.Services.Configure(builder.Configuration.GetSection(JwtOptions.Section)); builder.Services.Configure(builder.Configuration.GetSection(MinioOptions.Section)); // Database builder.Services.AddDbContext(options => options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection"))); // MinIO var minioOptions = builder.Configuration.GetSection(MinioOptions.Section).Get()!; builder.Services.AddSingleton(new MinioClient() .WithEndpoint(minioOptions.Endpoint) .WithCredentials(minioOptions.AccessKey, minioOptions.SecretKey) .WithSSL(minioOptions.UseSsl) .Build()); // JWT Authentication var jwtOptions = builder.Configuration.GetSection(JwtOptions.Section).Get()!; builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = jwtOptions.Issuer, ValidAudience = jwtOptions.Audience, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtOptions.Secret)) }; }); builder.Services.AddAuthorization(); // Services builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddVigilCareRecordsSwagger(); var app = builder.Build(); app.UseMiddleware(); app.UseMiddleware(); if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(options => { options.SwaggerEndpoint("/swagger/v1/swagger.json", "VigilCare Records API v1"); options.DocumentTitle = "VigilCare Records API"; }); } app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); using (var scope = app.Services.CreateScope()) { var db = scope.ServiceProvider.GetRequiredService(); await db.Database.MigrateAsync(); await DataSeeder.SeedAsync(db); } app.Run(); } catch (System.Exception) { throw; } public partial class Program { }