🐛 Fix known proxies
This commit is contained in:
		| @@ -1,6 +1,7 @@ | |||||||
| using System.Net; | using System.Net; | ||||||
| using DysonNetwork.Develop.Identity; | using DysonNetwork.Develop.Identity; | ||||||
| using DysonNetwork.Shared.Auth; | using DysonNetwork.Shared.Auth; | ||||||
|  | using DysonNetwork.Shared.Http; | ||||||
| using Microsoft.AspNetCore.HttpOverrides; | using Microsoft.AspNetCore.HttpOverrides; | ||||||
| using Prometheus; | using Prometheus; | ||||||
|  |  | ||||||
| @@ -18,7 +19,7 @@ public static class ApplicationConfiguration | |||||||
|          |          | ||||||
|         app.UseRequestLocalization(); |         app.UseRequestLocalization(); | ||||||
|  |  | ||||||
|         ConfigureForwardedHeaders(app, configuration); |         app.ConfigureForwardedHeaders(configuration); | ||||||
|  |  | ||||||
|         app.UseAuthentication(); |         app.UseAuthentication(); | ||||||
|         app.UseAuthorization(); |         app.UseAuthorization(); | ||||||
| @@ -30,26 +31,4 @@ public static class ApplicationConfiguration | |||||||
|  |  | ||||||
|         return app; |         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); |  | ||||||
|     } |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,4 +1,5 @@ | |||||||
| using DysonNetwork.Gateway.Startup; | using DysonNetwork.Gateway.Startup; | ||||||
|  | using DysonNetwork.Shared.Http; | ||||||
| using Microsoft.AspNetCore.HttpOverrides; | using Microsoft.AspNetCore.HttpOverrides; | ||||||
|  |  | ||||||
| var builder = WebApplication.CreateBuilder(args); | var builder = WebApplication.CreateBuilder(args); | ||||||
| @@ -17,10 +18,7 @@ builder.Services.AddControllers(); | |||||||
|  |  | ||||||
| var app = builder.Build(); | var app = builder.Build(); | ||||||
|  |  | ||||||
| app.UseForwardedHeaders(new ForwardedHeadersOptions | app.ConfigureForwardedHeaders(app.Configuration); | ||||||
| { |  | ||||||
|     ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto |  | ||||||
| }); |  | ||||||
|  |  | ||||||
| app.UseRequestTimeouts(); | app.UseRequestTimeouts(); | ||||||
| app.UseCors(opts => | app.UseCors(opts => | ||||||
|   | |||||||
| @@ -5,6 +5,7 @@ using DysonNetwork.Pass.Credit; | |||||||
| using DysonNetwork.Pass.Leveling; | using DysonNetwork.Pass.Leveling; | ||||||
| using DysonNetwork.Pass.Permission; | using DysonNetwork.Pass.Permission; | ||||||
| using DysonNetwork.Pass.Wallet; | using DysonNetwork.Pass.Wallet; | ||||||
|  | using DysonNetwork.Shared.Http; | ||||||
| using Microsoft.AspNetCore.HttpOverrides; | using Microsoft.AspNetCore.HttpOverrides; | ||||||
| using Microsoft.Extensions.FileProviders; | using Microsoft.Extensions.FileProviders; | ||||||
| using Prometheus; | using Prometheus; | ||||||
| @@ -23,7 +24,7 @@ public static class ApplicationConfiguration | |||||||
|  |  | ||||||
|         app.UseRequestLocalization(); |         app.UseRequestLocalization(); | ||||||
|  |  | ||||||
|         ConfigureForwardedHeaders(app, configuration); |         app.ConfigureForwardedHeaders(configuration); | ||||||
|  |  | ||||||
|         app.UseCors(opts => |         app.UseCors(opts => | ||||||
|             opts.SetIsOriginAllowed(_ => true) |             opts.SetIsOriginAllowed(_ => true) | ||||||
| @@ -51,28 +52,6 @@ public static class ApplicationConfiguration | |||||||
|         return app; |         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); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public static WebApplication ConfigureGrpcServices(this WebApplication app) |     public static WebApplication ConfigureGrpcServices(this WebApplication app) | ||||||
|     { |     { | ||||||
|         app.MapGrpcService<AccountServiceGrpc>(); |         app.MapGrpcService<AccountServiceGrpc>(); | ||||||
|   | |||||||
| @@ -1,5 +1,6 @@ | |||||||
| using System.Net; | using System.Net; | ||||||
| using DysonNetwork.Pusher.Services; | using DysonNetwork.Pusher.Services; | ||||||
|  | using DysonNetwork.Shared.Http; | ||||||
| using Microsoft.AspNetCore.HttpOverrides; | using Microsoft.AspNetCore.HttpOverrides; | ||||||
|  |  | ||||||
| namespace DysonNetwork.Pusher.Startup; | namespace DysonNetwork.Pusher.Startup; | ||||||
| @@ -15,7 +16,7 @@ public static class ApplicationConfiguration | |||||||
|          |          | ||||||
|         app.UseRequestLocalization(); |         app.UseRequestLocalization(); | ||||||
|  |  | ||||||
|         ConfigureForwardedHeaders(app, configuration); |         app.ConfigureForwardedHeaders(configuration); | ||||||
|  |  | ||||||
|         app.UseCors(opts => |         app.UseCors(opts => | ||||||
|             opts.SetIsOriginAllowed(_ => true) |             opts.SetIsOriginAllowed(_ => true) | ||||||
| @@ -35,33 +36,4 @@ public static class ApplicationConfiguration | |||||||
|  |  | ||||||
|         return app; |         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); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public static WebApplication ConfigureGrpcServices(this WebApplication app) |  | ||||||
|     { |  | ||||||
|         app.MapGrpcService<PusherServiceGrpc>(); |  | ||||||
|          |  | ||||||
|         return app; |  | ||||||
|     } |  | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										45
									
								
								DysonNetwork.Shared/Http/KnownProxiesConfiguration.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								DysonNetwork.Shared/Http/KnownProxiesConfiguration.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | |||||||
|  | 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; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1,8 +1,7 @@ | |||||||
| using System.Net; |  | ||||||
| using DysonNetwork.Shared.Auth; | using DysonNetwork.Shared.Auth; | ||||||
|  | using DysonNetwork.Shared.Http; | ||||||
| using DysonNetwork.Sphere.Connection; | using DysonNetwork.Sphere.Connection; | ||||||
| using DysonNetwork.Sphere.Publisher; | using DysonNetwork.Sphere.Publisher; | ||||||
| using Microsoft.AspNetCore.HttpOverrides; |  | ||||||
| using Prometheus; | using Prometheus; | ||||||
|  |  | ||||||
| namespace DysonNetwork.Sphere.Startup; | namespace DysonNetwork.Sphere.Startup; | ||||||
| @@ -19,7 +18,7 @@ public static class ApplicationConfiguration | |||||||
|          |          | ||||||
|         app.UseRequestLocalization(); |         app.UseRequestLocalization(); | ||||||
|  |  | ||||||
|         ConfigureForwardedHeaders(app, configuration); |         app.ConfigureForwardedHeaders(configuration); | ||||||
|  |  | ||||||
|         app.UseWebSockets(); |         app.UseWebSockets(); | ||||||
|         app.UseAuthentication(); |         app.UseAuthentication(); | ||||||
| @@ -34,26 +33,4 @@ public static class ApplicationConfiguration | |||||||
|  |  | ||||||
|         return app; |         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); |  | ||||||
|     } |  | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user