using System.Net; using System.Reflection; using Microsoft.AspNetCore.HttpOverrides; using Microsoft.OpenApi.Models; using rmutr_report.Models; using IPNetwork = Microsoft.AspNetCore.HttpOverrides.IPNetwork; var builder = WebApplication.CreateBuilder(args); var configuration = builder.Configuration; var setting = new Setting { report_path = configuration["Settings:ReportPath"] }; builder.Services.AddSingleton(setting); builder.Services.AddControllers(); builder.Services.AddCors(options => { options.AddPolicy("AllowAllOrigins", policy => { policy.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod(); }); }); builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("reports", new OpenApiInfo { Title = "Reports API", Version = "v1" }); c.SwaggerDoc("graph", new OpenApiInfo { Title = "Graph API", Version = "v1" }); var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); c.IncludeXmlComments(xmlPath); c.EnableAnnotations(); }); var app = builder.Build(); app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto, KnownNetworks = { new IPNetwork(IPAddress.Any, 0) } }); app.UseSwagger(c => { c.RouteTemplate = "swagger/{documentName}/swagger.json"; c.PreSerializeFilters.Add((swaggerDoc, httpReq) => { if (!httpReq.Headers.ContainsKey("X-Forwarded-Host")) return; var serverUrl = $"{httpReq.Headers["X-Scheme"]}://" + $"{httpReq.Headers["X-Forwarded-Host"]}" + $"{httpReq.Headers["X-Forwarded-Prefix"]}"; swaggerDoc.Servers = new List { new OpenApiServer { Url = serverUrl } }; }); }); app.UseSwaggerUI(c => { c.SwaggerEndpoint("reports/swagger.json", "Reports API v1"); c.SwaggerEndpoint("graph/swagger.json", "Graph API v1"); c.DefaultModelExpandDepth(0); c.DefaultModelsExpandDepth(-1); }); app.UseRouting(); app.UseAuthorization(); app.UseCors("AllowAllOrigins"); app.MapControllers(); app.Run();