45 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System.Net;
 | 
						|
using Microsoft.AspNetCore.Builder;
 | 
						|
using Microsoft.AspNetCore.HttpOverrides;
 | 
						|
using Microsoft.Extensions.Configuration;
 | 
						|
using IPNetwork = Microsoft.AspNetCore.HttpOverrides.IPNetwork;
 | 
						|
 | 
						|
namespace DysonNetwork.Shared.Http;
 | 
						|
 | 
						|
public static class KnownProxiesConfiguration
 | 
						|
{
 | 
						|
    public static WebApplication ConfigureForwardedHeaders(this 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 if (IPNetwork.TryParse(proxy, out var ipNetwork))
 | 
						|
                    {
 | 
						|
                        forwardedHeadersOptions.KnownNetworks.Add(ipNetwork);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        if (forwardedHeadersOptions.KnownProxies.Count == 0 && forwardedHeadersOptions.KnownNetworks.Count == 0)
 | 
						|
        {
 | 
						|
            forwardedHeadersOptions.KnownProxies.Add(IPAddress.Any);
 | 
						|
            forwardedHeadersOptions.KnownProxies.Add(IPAddress.IPv6Any);
 | 
						|
        }
 | 
						|
 | 
						|
        app.UseForwardedHeaders(forwardedHeadersOptions);
 | 
						|
 | 
						|
        return app;
 | 
						|
    }
 | 
						|
} |