61 lines
1.9 KiB
C#
61 lines
1.9 KiB
C#
using System.Net;
|
|
using Microsoft.AspNetCore.Builder;
|
|
using Microsoft.AspNetCore.HttpOverrides;
|
|
using Microsoft.Extensions.Configuration;
|
|
|
|
namespace DysonNetwork.Shared.Startup;
|
|
|
|
public static class ApplicationConfiguration
|
|
{
|
|
public static WebApplication ConfigureAppMiddleware(this WebApplication app, IConfiguration configuration)
|
|
{
|
|
app.MapOpenApi();
|
|
|
|
app.UseRequestLocalization();
|
|
|
|
ConfigureForwardedHeaders(app, configuration);
|
|
|
|
app.UseCors(opts =>
|
|
opts.SetIsOriginAllowed(_ => true)
|
|
.WithExposedHeaders("*")
|
|
.WithHeaders()
|
|
.AllowCredentials()
|
|
.AllowAnyHeader()
|
|
.AllowAnyMethod()
|
|
);
|
|
|
|
app.UseWebSockets();
|
|
app.UseRateLimiter();
|
|
app.UseHttpsRedirection();
|
|
app.UseAuthorization();
|
|
|
|
app.MapControllers().RequireRateLimiting("fixed");
|
|
app.MapStaticAssets().RequireRateLimiting("fixed");
|
|
app.MapRazorPages().RequireRateLimiting("fixed");
|
|
|
|
return app;
|
|
}
|
|
|
|
private static void ConfigureForwardedHeaders(WebApplication app, IConfiguration configuration)
|
|
{
|
|
var knownProxiesSection = configuration.GetSection("KnownProxies");
|
|
var forwardedHeadersOptions = new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.All };
|
|
|
|
if (knownProxiesSection.Exists())
|
|
{
|
|
var proxyAddresses = knownProxiesSection.Get<string[]>();
|
|
if (proxyAddresses != null)
|
|
foreach (var proxy in proxyAddresses)
|
|
if (IPAddress.TryParse(proxy, out var ipAddress))
|
|
forwardedHeadersOptions.KnownProxies.Add(ipAddress);
|
|
}
|
|
else
|
|
{
|
|
forwardedHeadersOptions.KnownProxies.Add(IPAddress.Any);
|
|
forwardedHeadersOptions.KnownProxies.Add(IPAddress.IPv6Any);
|
|
}
|
|
|
|
app.UseForwardedHeaders(forwardedHeadersOptions);
|
|
}
|
|
}
|