using Microsoft.Extensions.Options; using Musify.StreamingGateway.Authentication; using Musify.StreamingGateway.Configuration; using Musify.StreamingGateway.Middleware; const string CorsPolicy = "media-clients"; var builder = WebApplication.CreateBuilder(args); builder.Services .AddOptions() .Bind(builder.Configuration.GetRequiredSection(StreamTicketValidationConfiguration.SectionName)) .ValidateDataAnnotations() .ValidateOnStart(); builder.Services.AddSingleton(serviceProvider => serviceProvider.GetRequiredService>().Value); builder.Services.AddSingleton(); var allowedOrigins = builder.Configuration.GetSection("Cors:AllowedOrigins").Get() ?? []; builder.Services.AddCors(options => options.AddPolicy(CorsPolicy, policy => { if (builder.Environment.IsDevelopment()) policy.AllowAnyOrigin(); else policy.WithOrigins(allowedOrigins); policy.AllowAnyHeader() .WithMethods("GET", "HEAD") .WithExposedHeaders("Content-Range", "Accept-Ranges", "Content-Length"); })); builder.Services .AddReverseProxy() .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy")); var app = builder.Build(); app.MapGet("/health", () => Results.Ok("healthy")) .WithSummary("Health check endpoint"); app.UseCors(CorsPolicy); app.UseMiddleware(); app.MapReverseProxy(); app.Run();