using IdentityModel; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection.Extensions; using Yavsc; using Yavsc.Interface; using Yavsc.Interfaces; using Yavsc.Models; using Yavsc.Services; using Yavsc.Server.Helpers; using Microsoft.AspNetCore.Identity; namespace Yavsc.Blogs; internal class Program { private static async Task Main(string[] args) { Console.Title = "Yavsc.Blogs"; var builder = WebApplication.CreateBuilder(args); builder.AddConfiguration("blogs"); var services = builder.Services; // MvcBuilder builder.Services .AddAuthorization(options => { options.AddPolicy("BlogScope", policy => { policy .RequireAuthenticatedUser() .RequireClaim(JwtClaimTypes.Scope, new string[] { "blogs" }); }); }) .AddYavscCors(builder.Configuration) .AddControllers(); String authority = builder.Configuration.GetValue("Site:Authority"); if (string.IsNullOrEmpty(authority)) { throw new Exception("Site:Authority is not configured in appsettings.json"); } // AuthenticationBuilder services.AddAuthentication("Bearer") .AddYavscJwtBearer(builder.Configuration, options => { options.Authority = authority; options.Audience = builder.Configuration.GetValue ("Site:Audience"); }); // DbContextBuilder services.AddDbContext(options => options.UseNpgsql(builder.Configuration.GetConnectionString( YavscConstants.YavscConnectionStringName))); // other services services .AddTransient() .AddTransient, MailSender>() .TryAddSingleton(); services .AddTransient() .AddTransient() .AddTransient() .AddTransient() .AddScoped() .AddLocalization(options => { options.ResourcesPath = "Resources"; }) .AddDistributedMemoryCache() .AddSession(options => { options.IdleTimeout = TimeSpan.FromMinutes(30); options.Cookie.HttpOnly = true; options.Cookie.IsEssential = false; }).Configure(options => { var supportedCultures = new[] { "fr", "en", "pt" }; options.SetDefaultCulture(supportedCultures[0]) .AddSupportedCultures(supportedCultures) .AddSupportedUICultures(supportedCultures); }); // App startup using (var app = builder.Build()) { if (app.Environment.IsDevelopment()) app.UseDeveloperExceptionPage(); app .UseRouting() .UseAuthentication() .UseAuthorization() .UseCors("default") ; app.Services.GetRequiredService().CreateLogger("Program") .LogInformation($"Yavsc.Blogs started, Authority is '{authority}''"); app.MapControllers(); app.MapIdentityApi().RequireAuthorization("BlogScope") .WithHttpLogging(Microsoft.AspNetCore.HttpLogging.HttpLoggingFields.All) .WithTags("Identity") .WithDescription("Identity API for Yavsc.Blogs") .WithMetadata(new ApiExplorerSettingsAttribute { GroupName = "Identity" }); app.UseSession(); await app.RunAsync(); } } }