diff options
author | crupest <crupest@outlook.com> | 2022-11-21 11:08:48 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2022-11-21 11:08:48 +0800 |
commit | 7e44b56ec4112f5e131c7fb96838b18550a62c85 (patch) | |
tree | e3e55a3984664fc60f51b10a37c321aabd38f17d /BackEnd/Timeline/Startup.cs | |
parent | 473720658913997919c680df6c82a75d429711d1 (diff) | |
download | timeline-7e44b56ec4112f5e131c7fb96838b18550a62c85.tar.gz timeline-7e44b56ec4112f5e131c7fb96838b18550a62c85.tar.bz2 timeline-7e44b56ec4112f5e131c7fb96838b18550a62c85.zip |
Fix #1354 #1355 .
Diffstat (limited to 'BackEnd/Timeline/Startup.cs')
-rw-r--r-- | BackEnd/Timeline/Startup.cs | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/BackEnd/Timeline/Startup.cs b/BackEnd/Timeline/Startup.cs index 3f94f8a9..fa4968d7 100644 --- a/BackEnd/Timeline/Startup.cs +++ b/BackEnd/Timeline/Startup.cs @@ -33,6 +33,8 @@ namespace Timeline {
public class Startup
{
+ private readonly bool _enableForwardedHeaders;
+ private readonly string? _forwardedHeadersAllowedProxyHosts;
private readonly FrontEndMode _frontEndMode;
public Startup(IConfiguration configuration, IWebHostEnvironment environment)
@@ -51,9 +53,12 @@ namespace Timeline if (!Enum.TryParse(frontEndModeString, true, out _frontEndMode))
{
_frontEndMode = FrontEndMode.Normal;
- Console.WriteLine("Unknown FrontEnd configuaration value '{0}', fallback to normal.", frontEndModeString);
+ Console.WriteLine("Unknown FrontEnd configuration value '{0}', fallback to normal.", frontEndModeString);
}
}
+
+ _enableForwardedHeaders = ApplicationConfiguration.GetBoolConfig(configuration, ApplicationConfiguration.EnableForwardedHeadersKey, false);
+ _forwardedHeadersAllowedProxyHosts = Configuration.GetValue<string?>(ApplicationConfiguration.ForwardedHeadersAllowedProxyHostsKey);
}
public IWebHostEnvironment Environment { get; }
@@ -135,6 +140,28 @@ namespace Timeline config.RootPath = "ClientApp";
});
}
+
+ if (_enableForwardedHeaders)
+ {
+ services.Configure<ForwardedHeadersOptions>(options =>
+ {
+ options.ForwardedHeaders = Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedFor | Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedProto;
+ if (_forwardedHeadersAllowedProxyHosts is not null)
+ {
+ options.KnownNetworks.Clear();
+ options.KnownProxies.Clear();
+ foreach (var host in _forwardedHeadersAllowedProxyHosts.Split(new char[] { ';', ',' }))
+ {
+ // Resolve host to ip
+ var ips = System.Net.Dns.GetHostAddresses(host);
+ foreach (var ip in ips)
+ {
+ options.KnownProxies.Add(ip);
+ }
+ }
+ }
+ });
+ }
}
@@ -151,6 +178,11 @@ namespace Timeline });
}
+ if (_enableForwardedHeaders)
+ {
+ app.UseForwardedHeaders();
+ }
+
app.UseOpenApi();
app.UseReDoc();
|