2
0
Эх сурвалжийг харах

Use config setting to decide if web content should be hosted

Also fail server startup if web content is expected but missing
Mark Monteiro 5 жил өмнө
parent
commit
29bad073eb

+ 1 - 4
Emby.Server.Implementations/ApplicationHost.cs

@@ -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>

+ 3 - 1
Emby.Server.Implementations/EntryPoints/StartupWizard.cs

@@ -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);
             }
             }

+ 14 - 11
Jellyfin.Server/Program.cs

@@ -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 (appHost.IsHostingContent)
+            if (!appConfig.IsNoWebContent())
             {
             {
+                // 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

+ 0 - 5
MediaBrowser.Controller/IServerApplicationHost.cs

@@ -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>