Wrap application in baseurl

This commit is contained in:
crobibero 2020-09-03 17:11:12 -06:00
parent 7504f067ef
commit 4e52fe1060
2 changed files with 60 additions and 57 deletions

View File

@ -44,11 +44,7 @@ namespace Jellyfin.Server.Middleware
var localPath = httpContext.Request.Path.ToString(); var localPath = httpContext.Request.Path.ToString();
var baseUrlPrefix = serverConfigurationManager.Configuration.BaseUrl; var baseUrlPrefix = serverConfigurationManager.Configuration.BaseUrl;
if (string.Equals(localPath, baseUrlPrefix + "/", StringComparison.OrdinalIgnoreCase) if (!localPath.StartsWith(baseUrlPrefix, StringComparison.OrdinalIgnoreCase))
|| string.Equals(localPath, baseUrlPrefix, StringComparison.OrdinalIgnoreCase)
|| string.Equals(localPath, "/", StringComparison.OrdinalIgnoreCase)
|| string.IsNullOrEmpty(localPath)
|| !localPath.StartsWith(baseUrlPrefix, StringComparison.OrdinalIgnoreCase))
{ {
// Always redirect back to the default path if the base prefix is invalid or missing // Always redirect back to the default path if the base prefix is invalid or missing
_logger.LogDebug("Normalizing an URL at {LocalPath}", localPath); _logger.LogDebug("Normalizing an URL at {LocalPath}", localPath);

View File

@ -88,71 +88,78 @@ namespace Jellyfin.Server
/// </summary> /// </summary>
/// <param name="app">The application builder.</param> /// <param name="app">The application builder.</param>
/// <param name="env">The webhost environment.</param> /// <param name="env">The webhost environment.</param>
/// <param name="serverApplicationHost">The server application host.</param>
/// <param name="appConfig">The application config.</param> /// <param name="appConfig">The application config.</param>
public void Configure( public void Configure(
IApplicationBuilder app, IApplicationBuilder app,
IWebHostEnvironment env, IWebHostEnvironment env,
IServerApplicationHost serverApplicationHost,
IConfiguration appConfig) IConfiguration appConfig)
{ {
if (env.IsDevelopment()) // Only add base url redirection if a base url is set.
if (!string.IsNullOrEmpty(_serverConfigurationManager.Configuration.BaseUrl))
{ {
app.UseDeveloperExceptionPage(); app.UseBaseUrlRedirection();
} }
app.UseMiddleware<ExceptionMiddleware>(); // Wrap rest of configuration so everything only listens on BaseUrl.
app.Map(_serverConfigurationManager.Configuration.BaseUrl, mainApp =>
app.UseMiddleware<ResponseTimeMiddleware>();
app.UseWebSockets();
app.UseResponseCompression();
app.UseCors(ServerCorsPolicy.DefaultPolicyName);
if (_serverConfigurationManager.Configuration.RequireHttps
&& _serverApplicationHost.ListenWithHttps)
{ {
app.UseHttpsRedirection(); if (env.IsDevelopment())
}
app.UseStaticFiles();
app.UsePathBase(_serverConfigurationManager.Configuration.BaseUrl);
if (appConfig.HostWebClient())
{
app.UseStaticFiles(new StaticFileOptions
{ {
FileProvider = new PhysicalFileProvider(_serverConfigurationManager.ApplicationPaths.WebPath), mainApp.UseDeveloperExceptionPage();
RequestPath = "/web"
});
}
app.UseAuthentication();
app.UseJellyfinApiSwagger(_serverConfigurationManager);
app.UseRouting();
app.UseAuthorization();
if (_serverConfigurationManager.Configuration.EnableMetrics)
{
// Must be registered after any middleware that could change HTTP response codes or the data will be bad
app.UseHttpMetrics();
}
app.UseLanFiltering();
app.UseIpBasedAccessValidation();
app.UseBaseUrlRedirection();
app.UseWebSocketHandler();
app.UseServerStartupMessage();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
if (_serverConfigurationManager.Configuration.EnableMetrics)
{
endpoints.MapMetrics(_serverConfigurationManager.Configuration.BaseUrl.TrimStart('/') + "/metrics");
} }
endpoints.MapHealthChecks(_serverConfigurationManager.Configuration.BaseUrl.TrimStart('/') + "/health"); mainApp.UseMiddleware<ExceptionMiddleware>();
mainApp.UseMiddleware<ResponseTimeMiddleware>();
mainApp.UseWebSockets();
mainApp.UseResponseCompression();
mainApp.UseCors(ServerCorsPolicy.DefaultPolicyName);
if (_serverConfigurationManager.Configuration.RequireHttps
&& _serverApplicationHost.ListenWithHttps)
{
mainApp.UseHttpsRedirection();
}
mainApp.UsePathBase(_serverConfigurationManager.Configuration.BaseUrl);
mainApp.UseStaticFiles();
if (appConfig.HostWebClient())
{
mainApp.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(_serverConfigurationManager.ApplicationPaths.WebPath),
RequestPath = "/web"
});
}
mainApp.UseAuthentication();
mainApp.UseJellyfinApiSwagger(_serverConfigurationManager);
mainApp.UseRouting();
mainApp.UseAuthorization();
if (_serverConfigurationManager.Configuration.EnableMetrics)
{
// Must be registered after any middleware that could change HTTP response codes or the data will be bad
mainApp.UseHttpMetrics();
}
mainApp.UseLanFiltering();
mainApp.UseIpBasedAccessValidation();
mainApp.UseWebSocketHandler();
mainApp.UseServerStartupMessage();
mainApp.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
if (_serverConfigurationManager.Configuration.EnableMetrics)
{
endpoints.MapMetrics("/metrics");
}
endpoints.MapHealthChecks("/health");
});
}); });
// Add type descriptor for legacy datetime parsing. // Add type descriptor for legacy datetime parsing.