using ZahlenAnalyse.Web.Components; using MudBlazor.Services; using Raven.Client.Documents; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Authentication.OpenIdConnect; using Microsoft.IdentityModel.Tokens; using DotNetEnv; Env.Load(); var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorComponents() .AddInteractiveServerComponents(); builder.Services.AddMudServices(); var store = new DocumentStore { Urls = new[] { builder.Configuration["RavenDb:Urls"] }, Database = builder.Configuration["RavenDb:Database"] }; store.Initialize(); builder.Services.AddSingleton(store); builder.Services.AddCascadingAuthenticationState(); builder.Services.AddAuthentication(options => { options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme; }) .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme) .AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options => { var pocketIdConfig = builder.Configuration.GetSection("PocketId"); options.Authority = pocketIdConfig["Authority"]; options.ClientId = pocketIdConfig["ClientId"]; options.ClientSecret = pocketIdConfig["ClientSecret"]; options.ResponseType = "code"; options.SaveTokens = true; // Wichtig für lokale Dev-Umgebungen ohne HTTPS-Zertifikatsprüfung (falls nötig) // options.RequireHttpsMetadata = false; options.TokenValidationParameters = new TokenValidationParameters { NameClaimType = "name", RoleClaimType = "roles" }; }); builder.Services.AddAuthorization(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error", createScopeForErrors: true); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseStatusCodePagesWithReExecute("/not-found", createScopeForStatusCodePages: true); app.UseHttpsRedirection(); app.UseAntiforgery(); app.MapStaticAssets(); app.UseAuthentication(); app.UseAuthorization(); app.MapRazorComponents() .AddInteractiveServerRenderMode(); app.MapGet("/login", async (HttpContext context) => { await context.ChallengeAsync(OpenIdConnectDefaults.AuthenticationScheme, new AuthenticationProperties { RedirectUri = "/" }); }); app.MapGet("/logout", async (HttpContext context) => { await context.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); await context.SignOutAsync(OpenIdConnectDefaults.AuthenticationScheme, new AuthenticationProperties { RedirectUri = "/" }); }); app.Run();