diff --git a/build/Version.props b/build/Version.props index 6c380db619..5e2e897532 100644 --- a/build/Version.props +++ b/build/Version.props @@ -3,7 +3,7 @@ - 6.15.100 + 6.15.101 5.6.0 10.13.0 0.6.0 diff --git a/src/Tgstation.Server.Host/Core/Application.cs b/src/Tgstation.Server.Host/Core/Application.cs index 0eebc4ebe2..11f9e8763a 100644 --- a/src/Tgstation.Server.Host/Core/Application.cs +++ b/src/Tgstation.Server.Host/Core/Application.cs @@ -577,6 +577,7 @@ namespace Tgstation.Server.Host.Core /// The containing the to use. /// The containing the to use. /// The for the . + #pragma warning disable public void Configure( IApplicationBuilder applicationBuilder, IServerControl serverControl, @@ -618,12 +619,34 @@ namespace Tgstation.Server.Host.Core // Wrap exceptions in a 500 (ErrorMessage) response applicationBuilder.UseServerErrorHandling(); + applicationBuilder.Use((context, next) => + { + logger.LogDebug("Crossedfall Pre middleware:"); + foreach (var header in context.Request.Headers) + { + logger.LogDebug("{header}: {value}", header.Key, header.Value); + } + + return next(); + }); + // header forwarding important for OIDC applicationBuilder.UseMiddleware(Options.Create(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost, })); + applicationBuilder.Use((context, next) => + { + logger.LogDebug("Crossedfall Post middleware:"); + foreach (var header in context.Request.Headers) + { + logger.LogDebug("{header}: {value}", header.Key, header.Value); + } + + return next(); + }); + /*applicationBuilder.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost, diff --git a/src/Tgstation.Server.Host/Core/ForwardedHeadersMiddleware.cs b/src/Tgstation.Server.Host/Core/ForwardedHeadersMiddleware.cs index e151890c3c..a128a24e8f 100644 --- a/src/Tgstation.Server.Host/Core/ForwardedHeadersMiddleware.cs +++ b/src/Tgstation.Server.Host/Core/ForwardedHeadersMiddleware.cs @@ -122,7 +122,9 @@ public class ForwardedHeadersMiddleware /// The for the current request. public Task Invoke(HttpContext context) { + _logger.LogDebug("Pre apply"); ApplyForwarders(context); + _logger.LogDebug("Post apply"); return _next(context); } @@ -150,6 +152,7 @@ public class ForwardedHeadersMiddleware { checkProto = true; forwardedProto = requestHeaders.GetCommaSeparatedValues(_options.ForwardedProtoHeaderName); + _logger.LogDebug("Checking proto: {forwarded}", forwardedProto); if (_options.RequireHeaderSymmetry && checkFor && forwardedFor!.Length != forwardedProto.Length) { _logger.LogWarning(1, "Parameter count mismatch between X-Forwarded-For and X-Forwarded-Proto."); @@ -197,6 +200,7 @@ public class ForwardedHeadersMiddleware var sets = new SetOfForwarders[entryCount]; for (int i = 0; i < sets.Length; i++) { + _logger.LogDebug("Set iter: {i}", i); // They get processed in reverse order, right to left. var set = new SetOfForwarders(); if (checkFor && i < forwardedFor!.Length) @@ -206,6 +210,7 @@ public class ForwardedHeadersMiddleware if (checkProto && i < forwardedProto!.Length) { set.Scheme = forwardedProto[forwardedProto.Length - i - 1]; + _logger.LogDebug("Set scheme: {scheme}", set.Scheme); } if (checkHost && i < forwardedHost!.Length) { @@ -232,6 +237,7 @@ public class ForwardedHeadersMiddleware for (; entriesConsumed < sets.Length; entriesConsumed++) { + _logger.LogDebug("Consume iter: {i}", entriesConsumed); var set = sets[entriesConsumed]; if (checkFor) { @@ -271,8 +277,10 @@ public class ForwardedHeadersMiddleware if (checkProto) { + _logger.LogDebug("Consume check proto: {setScheme}", set.Scheme); if (!string.IsNullOrEmpty(set.Scheme) && set.Scheme.AsSpan().IndexOfAnyExcept(SchemeChars) < 0) { + _logger.LogDebug("Consume apply proto"); applyChanges = true; currentValues.Scheme = set.Scheme; } @@ -315,6 +323,7 @@ public class ForwardedHeadersMiddleware if (applyChanges) { + _logger.LogDebug("Apply changes: {scheme}", currentValues.Scheme); if (checkFor && currentValues.RemoteIpAndPort != null) { if (connection.RemoteIpAddress != null) @@ -353,6 +362,8 @@ public class ForwardedHeadersMiddleware requestHeaders.Remove(_options.ForwardedProtoHeaderName); } request.Scheme = currentValues.Scheme; + + _logger.LogDebug("Do apply proto: {scheme}, {forwarded}", request.Scheme, forwardedProto); } if (checkHost && currentValues.Host != null)