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);
 | |
|     }
 | |
| }
 |