using System.Text.Json; using System.Text.Json.Serialization; using Femto.Api; using Femto.Api.Auth; using Femto.Common; using Femto.Modules.Auth.Application; using Femto.Modules.Blog.Application; using Femto.Modules.Media.Application; using Microsoft.AspNetCore.Authentication; const string CorsPolicyName = "DefaultCorsPolicy"; var builder = WebApplication.CreateBuilder(args); builder.Services.AddOpenApi(); var connectionString = builder.Configuration.GetConnectionString("Database"); if (connectionString is null) throw new Exception("no database connection string found"); var blobStorageRoot = builder.Configuration.GetValue("BlobStorageRoot"); if (blobStorageRoot is null) throw new Exception("no blob storage root found"); builder.Services.InitializeBlogModule(connectionString); builder.Services.InitializeMediaModule(connectionString, blobStorageRoot); builder.Services.InitializeAuthenticationModule(connectionString); builder.Services.AddScoped(); builder.Services.AddScoped(s => s.GetRequiredService()); builder.Services.AddControllers(); builder.Services.AddCors(options => { options.AddPolicy( CorsPolicyName, b => { b.AllowAnyHeader().AllowAnyMethod().WithOrigins("http://localhost:5173"); } ); }); builder .Services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNameCaseInsensitive = true; options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase; options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); options.JsonSerializerOptions.NumberHandling = JsonNumberHandling.AllowReadingFromString; }); builder .Services.AddAuthentication("SessionAuth") .AddScheme( "SessionAuth", options => { } ); builder.Services.AddAuthorization(); // if not already added var app = builder.Build(); app.UseCors(CorsPolicyName); if (app.Environment.IsDevelopment()) { app.MapOpenApi(); } app.MapControllers(); app.UseHttpsRedirection(); app.Run();