Use config setting to decide if web content should be hosted

Also fail server startup if web content is expected but missing
pull/2601/head
Mark Monteiro 5 years ago
parent 3f4b9e9a81
commit 29bad073eb

@ -240,13 +240,10 @@ namespace Emby.Server.Implementations
public int HttpsPort { get; private set; } public int HttpsPort { get; private set; }
/// <summary> /// <summary>
/// Gets the content root for the webhost. If the webhost is not serving static web content, this will be null. /// Gets the content root for the webhost.
/// </summary> /// </summary>
public string ContentRoot { get; private set; } public string ContentRoot { get; private set; }
/// <inheritdoc/>
public bool IsHostingContent => ContentRoot != null;
/// <summary> /// <summary>
/// Gets the server configuration manager. /// Gets the server configuration manager.
/// </summary> /// </summary>

@ -2,7 +2,9 @@ using System.Threading.Tasks;
using Emby.Server.Implementations.Browser; using Emby.Server.Implementations.Browser;
using MediaBrowser.Controller; using MediaBrowser.Controller;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Extensions;
using MediaBrowser.Controller.Plugins; using MediaBrowser.Controller.Plugins;
using Microsoft.Extensions.Configuration;
namespace Emby.Server.Implementations.EntryPoints namespace Emby.Server.Implementations.EntryPoints
{ {
@ -36,7 +38,7 @@ namespace Emby.Server.Implementations.EntryPoints
return Task.CompletedTask; return Task.CompletedTask;
} }
if (!_appHost.IsHostingContent) if (_appHost.Resolve<IConfiguration>().IsNoWebContent())
{ {
BrowserLauncher.OpenSwaggerPage(_appHost); BrowserLauncher.OpenSwaggerPage(_appHost);
} }

@ -19,7 +19,7 @@ using Emby.Server.Implementations.Networking;
using Jellyfin.Drawing.Skia; using Jellyfin.Drawing.Skia;
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Drawing;
using MediaBrowser.Model.Globalization; using MediaBrowser.Controller.Extensions;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
@ -177,7 +177,7 @@ namespace Jellyfin.Server
ServiceCollection serviceCollection = new ServiceCollection(); ServiceCollection serviceCollection = new ServiceCollection();
await appHost.InitAsync(serviceCollection).ConfigureAwait(false); await appHost.InitAsync(serviceCollection).ConfigureAwait(false);
var host = CreateWebHostBuilder(appHost, serviceCollection).Build(); var host = CreateWebHostBuilder(appHost, serviceCollection, appConfig).Build();
// A bit hacky to re-use service provider since ASP.NET doesn't allow a custom service collection. // A bit hacky to re-use service provider since ASP.NET doesn't allow a custom service collection.
appHost.ServiceProvider = host.Services; appHost.ServiceProvider = host.Services;
@ -221,7 +221,7 @@ namespace Jellyfin.Server
} }
} }
private static IWebHostBuilder CreateWebHostBuilder(ApplicationHost appHost, IServiceCollection serviceCollection) private static IWebHostBuilder CreateWebHostBuilder(ApplicationHost appHost, IServiceCollection serviceCollection, IConfiguration appConfig)
{ {
var webhostBuilder = new WebHostBuilder() var webhostBuilder = new WebHostBuilder()
.UseKestrel(options => .UseKestrel(options =>
@ -268,9 +268,18 @@ namespace Jellyfin.Server
}) })
.UseStartup<Startup>(); .UseStartup<Startup>();
// Set the root directory for static content, if one exists if (!appConfig.IsNoWebContent())
if (appHost.IsHostingContent)
{ {
// 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); webhostBuilder.UseContentRoot(appHost.ContentRoot);
} }
@ -404,12 +413,6 @@ namespace Jellyfin.Server
} }
} }
// Reset webDir if the directory does not exist, or is empty
if (!Directory.Exists(webDir) || !Directory.GetFiles(webDir).Any())
{
webDir = null;
}
// logDir // logDir
// IF --logdir // IF --logdir
// ELSE IF $JELLYFIN_LOG_DIR // ELSE IF $JELLYFIN_LOG_DIR

@ -16,11 +16,6 @@ namespace MediaBrowser.Controller
{ {
event EventHandler HasUpdateAvailableChanged; event EventHandler HasUpdateAvailableChanged;
/// <summary>
/// Gets a value indicating whether the server is hosting the static web content from jellyfin-web.
/// </summary>
bool IsHostingContent { get; }
/// <summary> /// <summary>
/// Gets the system info. /// Gets the system info.
/// </summary> /// </summary>

Loading…
Cancel
Save