using CityInfo.API.DbContexts; using CityInfo.API.Models; using CityInfo.API.Services; using Microsoft.AspNetCore.StaticFiles; using Microsoft.EntityFrameworkCore; using Microsoft.IdentityModel.Tokens; using Serilog; Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .WriteTo.Console() .WriteTo.File("logs/cityinfo.txt", rollingInterval: RollingInterval.Day) .CreateLogger(); var builder = WebApplication.CreateBuilder(args); builder.Host.UseSerilog(); //builder.logging.clearproviders(); //builder.logging.addconsole(); // Add services to the container. builder.Services.AddControllers((options) => { options.ReturnHttpNotAcceptable = true; }) .AddNewtonsoftJson() .AddXmlDataContractSerializerFormatters(); // Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi builder.Services.AddOpenApi(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddDbContext( (dbContextOptins) => dbContextOptins.UseSqlite( builder.Configuration["ConnectionStrings:CityInfoDBConnectionString"] ) ); builder.Services.AddScoped(); builder.Services.AddProblemDetails(); //builder.Services.AddProblemDetails((options) => // { // options.CustomizeProblemDetails = ctx => // { // ctx.ProblemDetails.Extensions.Add("additionalInfo", "Addional info example"); // ctx.ProblemDetails.Extensions.Add("server", Environment.MachineName); // }; // }); #if DEBUG builder.Services.AddTransient(); #else builder.Services.AddTransient(); #endif builder.Services.AddAutoMapper(cfg => { }, AppDomain.CurrentDomain.GetAssemblies()); builder.Services.AddAuthentication("Bearer") .AddJwtBearer(options => { options.TokenValidationParameters = new() { ValidateIssuer = true, ValidateAudience = true, ValidateIssuerSigningKey = true, ValidIssuer = builder.Configuration["Authentication:Issuer"], ValidAudience = builder.Configuration["Authentication:Audience"], IssuerSigningKey = new SymmetricSecurityKey(Convert.FromBase64String(builder.Configuration["Authentication:SecretForKey"])) }; } ); builder.Services.AddAuthorization(options => { options.AddPolicy("MustBeFromCharleroi", policy => { policy.RequireAuthenticatedUser(); policy.RequireClaim("city", "Charleroi"); }); }); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler(); } // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.MapOpenApi(); app.UseSwaggerUI(options => { options.SwaggerEndpoint("/openapi/v1.json", "API v1"); }); } app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); app.Run();