using AsadiTools.Data; using AsadiTools.Services; using Microsoft.AspNetCore.DataProtection; using Microsoft.EntityFrameworkCore; var builder = WebApplication.CreateBuilder(args); // Persist DataProtection keys to the volume so sessions/antiforgery survive restarts var dpKeysPath = builder.Configuration["DataProtection:KeysPath"] ?? "/app/data/keys"; builder.Services.AddDataProtection() .PersistKeysToFileSystem(new DirectoryInfo(dpKeysPath)) .SetApplicationName("AsadiTools"); builder.Services.AddRazorPages(); builder.Services.AddSession(o => { o.IdleTimeout = TimeSpan.FromHours(2); o.Cookie.HttpOnly = true; o.Cookie.IsEssential = true; }); builder.Services.AddHttpContextAccessor(); builder.Services.AddScoped(); builder.Services.AddDbContext(o => o.UseSqlite(builder.Configuration.GetConnectionString("Default") ?? "Data Source=asadi.db")); builder.Services.AddAuthentication("AdminCookie") .AddCookie("AdminCookie", o => { o.LoginPath = "/Admin/Login"; o.LogoutPath = "/Admin/Logout"; o.Cookie.Name = "AsadiAdmin"; o.ExpireTimeSpan = TimeSpan.FromHours(8); }); builder.Services.AddAuthorization(); var app = builder.Build(); using (var scope = app.Services.CreateScope()) SeedData.Initialize(scope.ServiceProvider.GetRequiredService()); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseSession(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.MapStaticAssets(); app.MapRazorPages().WithStaticAssets(); app.Run();