Do not call UseContentRoot() on the web host builder

This call has nothing to do with static web content and should not have ever been called with the web content path: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/?view=aspnetcore-3.1&tabs=windows#content-root
Since this call is removed, the ContentRoot property is also removed from ApplicationHost as it is no longer needed.
Finally, move validation of the static content path to the DashboardService where it is actually used.
pull/2601/head
Mark Monteiro 5 years ago
parent 602112fba4
commit 05ab61200a

@ -1,8 +1,6 @@
using System;
using System.IO;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Controller.Extensions;
using Microsoft.Extensions.Configuration;
namespace Emby.Server.Implementations.AppBase
{
@ -39,13 +37,7 @@ namespace Emby.Server.Implementations.AppBase
/// <value>The program data path.</value>
public string ProgramDataPath { get; }
/// <summary>
/// Gets the path to the web UI resources folder.
/// </summary>
/// <value>The web UI resources path.</value>
/// <remarks>
/// This value is not relevant if <see cref="ConfigurationExtensions.IsNoWebContent(IConfiguration)"/> is true.
/// </remarks>
/// <inheritdoc/>
public string WebPath { get; }
/// <summary>

@ -236,11 +236,6 @@ namespace Emby.Server.Implementations
/// </summary>
public int HttpsPort { get; private set; }
/// <summary>
/// Gets the content root for the webhost.
/// </summary>
public string ContentRoot { get; private set; }
/// <summary>
/// Gets the server configuration manager.
/// </summary>
@ -614,12 +609,6 @@ namespace Emby.Server.Implementations
DiscoverTypes();
await RegisterServices(serviceCollection, startupConfig).ConfigureAwait(false);
ContentRoot = ServerConfigurationManager.Configuration.DashboardSourcePath;
if (string.IsNullOrEmpty(ContentRoot))
{
ContentRoot = ServerConfigurationManager.ApplicationPaths.WebPath;
}
}
public async Task ExecuteWebsocketHandlerAsync(HttpContext context, Func<Task> next)

@ -243,7 +243,7 @@ namespace Jellyfin.Server
IConfiguration startupConfig,
IApplicationPaths appPaths)
{
var webhostBuilder = new WebHostBuilder()
return new WebHostBuilder()
.UseKestrel(options =>
{
var addresses = appHost.ServerConfigurationManager
@ -289,24 +289,6 @@ namespace Jellyfin.Server
services.TryAdd(serviceCollection);
})
.UseStartup<Startup>();
// Set up static content hosting unless it has been disabled via config
if (!startupConfig.NoWebContent())
{
// Fail startup if the web content does not exist
if (!Directory.Exists(appHost.ContentRoot) || !Directory.GetFiles(appHost.ContentRoot).Any())
{
throw new InvalidOperationException(
"The server is expected to host web content, but the provided content directory is either " +
$"invalid or empty: {appHost.ContentRoot}. If you do not want to host web content with the " +
$"server, you may set the '{MediaBrowser.Controller.Extensions.ConfigurationExtensions.NoWebContentKey}' flag.");
}
// Configure the web host to host the static web content
webhostBuilder.UseContentRoot(appHost.ContentRoot);
}
return webhostBuilder;
}
/// <summary>

@ -1,3 +1,5 @@
using MediaBrowser.Model.Configuration;
namespace MediaBrowser.Common.Configuration
{
/// <summary>
@ -12,9 +14,12 @@ namespace MediaBrowser.Common.Configuration
string ProgramDataPath { get; }
/// <summary>
/// Gets the path to the web UI resources folder
/// Gets the path to the web UI resources folder.
/// </summary>
/// <value>The web UI resources path.</value>
/// <remarks>
/// This value is not relevant if the server is configured to not host any static web content. Additionally,
/// the value for <see cref="ServerConfiguration.DashboardSourcePath"/> takes precedence over this one.
/// </remarks>
string WebPath { get; }
/// <summary>

@ -136,6 +136,17 @@ namespace MediaBrowser.WebDashboard.Api
_resultFactory = resultFactory;
_resourceFileManager = resourceFileManager;
_appConfig = appConfig;
// Validate web content path
string webContentPath = DashboardUIPath;
bool webContentPathValid = appConfig.NoWebContent() || (Directory.Exists(webContentPath) && Directory.GetFiles(webContentPath).Any());
if (!webContentPathValid)
{
throw new InvalidOperationException(
"The server is expected to host web content, but the provided content directory is either " +
$"invalid or empty: {webContentPath}. If you do not want to host web content with the server, " +
$"you may set the '{Controller.Extensions.ConfigurationExtensions.NoWebContentKey}' flag.");
}
}
/// <summary>

Loading…
Cancel
Save