using System.Text; using LehrerApp.Api; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.IdentityModel.Tokens; var builder = WebApplication.CreateBuilder(args); builder.WebHost.UseKestrel(o => { var port = builder.Configuration.GetValue("Api:Port", 5000); o.ListenAnyIP(port); }); var secret = builder.Configuration["JWT_SECRET"] ?? throw new InvalidOperationException("JWT_SECRET nicht konfiguriert."); builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(o => o.TokenValidationParameters = new() { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret)), ValidateIssuer = false, ValidateAudience = false, ClockSkew = TimeSpan.FromMinutes(5), }); builder.Services.AddAuthorization(); var data = builder.Configuration["Api:DataPath"] ?? "./data"; builder.Services.AddSingleton(_ => new EventStore(data)); builder.Services.AddSingleton(_ => new SnapshotStore(data)); builder.Services.AddSingleton(_ => new ReadableSnapshotStore(data)); builder.Services.AddSingleton(sp => new PlainEventStore(sp.GetRequiredService())); var app = builder.Build(); app.UseAuthentication(); app.UseAuthorization(); app.MapAuthEndpoints(secret); app.MapSyncEndpoints(); app.MapSnapshotEndpoints(); app.MapReadableSnapshotEndpoints(); app.MapPlainSyncEndpoints(); app.Run();