diff --git a/backend/src/Squidex.Web/Pipeline/CleanupHostMiddleware.cs b/backend/src/Squidex.Web/Pipeline/CleanupHostMiddleware.cs index 76fb26dcd..8457f52a5 100644 --- a/backend/src/Squidex.Web/Pipeline/CleanupHostMiddleware.cs +++ b/backend/src/Squidex.Web/Pipeline/CleanupHostMiddleware.cs @@ -21,7 +21,16 @@ namespace Squidex.Web.Pipeline { this.next = next; - host = new HostString(new Uri(options.Value.BaseUrl).Host); + var uri = new Uri(options.Value.BaseUrl); + + if (HasHttpPort(uri) || HasHttpsPort(uri)) + { + host = new HostString(uri.Host); + } + else + { + host = new HostString(uri.Host, uri.Port); + } } public Task InvokeAsync(HttpContext context) @@ -30,5 +39,15 @@ namespace Squidex.Web.Pipeline return next(context); } + + private static bool HasHttpPort(Uri uri) + { + return uri.Scheme == "http" && uri.Port == 80; + } + + private static bool HasHttpsPort(Uri uri) + { + return uri.Scheme == "https" && uri.Port == 443; + } } -} +} \ No newline at end of file diff --git a/backend/tests/Squidex.Web.Tests/Pipeline/CleanupHostMiddlewareTests.cs b/backend/tests/Squidex.Web.Tests/Pipeline/CleanupHostMiddlewareTests.cs index 491553753..ffb55236b 100644 --- a/backend/tests/Squidex.Web.Tests/Pipeline/CleanupHostMiddlewareTests.cs +++ b/backend/tests/Squidex.Web.Tests/Pipeline/CleanupHostMiddlewareTests.cs @@ -5,6 +5,7 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== +using System; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Options; @@ -31,22 +32,28 @@ namespace Squidex.Web.Pipeline next = Next; } - [Fact] - public async Task Should_override_host_from_urls_options() + [Theory] + [InlineData("https://cloud.squidex.io", "cloud.squidex.io")] + [InlineData("https://cloud.squidex.io:5000", "cloud.squidex.io:5000")] + [InlineData("http://cloud.squidex.io", "cloud.squidex.io")] + [InlineData("http://cloud.squidex.io:5000", "cloud.squidex.io:5000")] + public async Task Should_override_host_from_urls_options(string baseUrl, string expectedHost) { - var options = Options.Create(new UrlsOptions { BaseUrl = "https://cloud.squidex.io" }); + var uri = new Uri(baseUrl); + + var options = Options.Create(new UrlsOptions { BaseUrl = baseUrl }); var sut = new CleanupHostMiddleware(next, options); var httpContext = new DefaultHttpContext(); - httpContext.Request.Scheme = "https"; - httpContext.Request.Host = new HostString("host", 443); + httpContext.Request.Scheme = uri.Scheme; + httpContext.Request.Host = new HostString(uri.Host, uri.Port); await sut.InvokeAsync(httpContext); - Assert.Equal("cloud.squidex.io", httpContext.Request.Host.Value); + Assert.Equal(expectedHost, httpContext.Request.Host.Value); Assert.True(isNextCalled); } } -} +} \ No newline at end of file