Jelajahi Sumber

Simplified Code

BaronGreenback 4 tahun lalu
induk
melakukan
6a7623da02

+ 8 - 8
Jellyfin.Networking/Manager/NetworkManager.cs

@@ -130,24 +130,24 @@ namespace Jellyfin.Networking.Manager
         public static string MockNetworkSettings { get; set; } = string.Empty;
         public static string MockNetworkSettings { get; set; } = string.Empty;
 
 
         /// <summary>
         /// <summary>
-        /// Gets or sets a value indicating whether IP6 is enabled.
+        /// Gets or sets a value indicating whether the system has IP4 is enabled.
         /// </summary>
         /// </summary>
-        public bool IsIP6Enabled { get; set; }
+        public static bool SystemIP4Enabled { get; set; }
 
 
         /// <summary>
         /// <summary>
-        /// Gets or sets a value indicating whether IP4 is enabled.
+        /// Gets or sets a value indicating whether the system has IP6 is enabled.
         /// </summary>
         /// </summary>
-        public bool IsIP4Enabled { get; set; }
+        public static bool SystemIP6Enabled { get; set; }
 
 
         /// <summary>
         /// <summary>
-        /// Gets or sets a value indicating whether the system has IP4 is enabled.
+        /// Gets or sets a value indicating whether IP6 is enabled.
         /// </summary>
         /// </summary>
-        public bool SystemIP4Enabled { get; set; }
+        public bool IsIP6Enabled { get; set; }
 
 
         /// <summary>
         /// <summary>
-        /// Gets or sets a value indicating whether the system has IP6 is enabled.
+        /// Gets or sets a value indicating whether IP4 is enabled.
         /// </summary>
         /// </summary>
-        public bool SystemIP6Enabled { get; set; }
+        public bool IsIP4Enabled { get; set; }
 
 
         /// <inheritdoc/>
         /// <inheritdoc/>
         public Collection<IPObject> RemoteAddressFilter { get; private set; }
         public Collection<IPObject> RemoteAddressFilter { get; private set; }

+ 51 - 52
Jellyfin.Server/Extensions/ApiServiceCollectionExtensions.cs

@@ -25,6 +25,7 @@ using Jellyfin.Api.Controllers;
 using Jellyfin.Api.ModelBinders;
 using Jellyfin.Api.ModelBinders;
 using Jellyfin.Data.Enums;
 using Jellyfin.Data.Enums;
 using Jellyfin.Networking.Configuration;
 using Jellyfin.Networking.Configuration;
+using Jellyfin.Networking.Manager;
 using Jellyfin.Server.Configuration;
 using Jellyfin.Server.Configuration;
 using Jellyfin.Server.Filters;
 using Jellyfin.Server.Filters;
 using Jellyfin.Server.Formatters;
 using Jellyfin.Server.Formatters;
@@ -174,64 +175,14 @@ namespace Jellyfin.Server.Extensions
                 .AddScheme<AuthenticationSchemeOptions, CustomAuthenticationHandler>(AuthenticationSchemes.CustomAuthentication, null);
                 .AddScheme<AuthenticationSchemeOptions, CustomAuthenticationHandler>(AuthenticationSchemes.CustomAuthentication, null);
         }
         }
 
 
-        private static void AddIpAddress(NetworkConfiguration config, ForwardedHeadersOptions options, IPAddress addr, int prefixLength, bool systemIP6Enabled)
-        {
-            if ((!config.EnableIPV4 && addr.AddressFamily == AddressFamily.InterNetwork) || (!config.EnableIPV6 && addr.AddressFamily == AddressFamily.InterNetworkV6))
-            {
-                return;
-            }
-
-            if (systemIP6Enabled && addr.AddressFamily == AddressFamily.InterNetwork)
-            {
-                // If the server is using dual-mode sockets, IPv4 addresses are supplied in an IPv6 format.
-                // https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-5.0 .
-                addr = addr.MapToIPv6();
-            }
-
-            if (prefixLength == 32)
-            {
-                options.KnownProxies.Add(addr);
-            }
-            else
-            {
-                options.KnownNetworks.Add(new IPNetwork(addr, prefixLength));
-            }
-        }
-
-        /// <summary>
-        /// Sets up the proxy configuration based on the addresses in <paramref name="userList"/>.
-        /// </summary>
-        /// <param name="networkManager">The <see cref="INetworkManager"/> instance.</param>
-        /// <param name="config">The <see cref="NetworkConfiguration"/> containing the config settings.</param>
-        /// <param name="userList">The string array to parse.</param>
-        /// <param name="options">The <see cref="ForwardedHeadersOptions"/> instance.</param>
-        internal static void ParseList(INetworkManager networkManager, NetworkConfiguration config, string[] userList, ForwardedHeadersOptions options)
-        {
-            for (var i = 0; i < userList.Length; i++)
-            {
-                if (IPNetAddress.TryParse(userList[i], out var addr))
-                {
-                    AddIpAddress(config, options, addr.Address, addr.PrefixLength, networkManager.SystemIP6Enabled);
-                }
-                else if (IPHost.TryParse(userList[i], out var host))
-                {
-                    foreach (var address in host.GetAddresses())
-                    {
-                        AddIpAddress(config, options, addr.Address, addr.PrefixLength, networkManager.SystemIP6Enabled);
-                    }
-                }
-            }
-        }
-
         /// <summary>
         /// <summary>
         /// Extension method for adding the jellyfin API to the service collection.
         /// Extension method for adding the jellyfin API to the service collection.
         /// </summary>
         /// </summary>
         /// <param name="serviceCollection">The service collection.</param>
         /// <param name="serviceCollection">The service collection.</param>
         /// <param name="pluginAssemblies">An IEnumerable containing all plugin assemblies with API controllers.</param>
         /// <param name="pluginAssemblies">An IEnumerable containing all plugin assemblies with API controllers.</param>
         /// <param name="config">The <see cref="NetworkConfiguration"/>.</param>
         /// <param name="config">The <see cref="NetworkConfiguration"/>.</param>
-        /// <param name="networkManager">The <see cref="INetworkManager"/> instance.</param>
         /// <returns>The MVC builder.</returns>
         /// <returns>The MVC builder.</returns>
-        public static IMvcBuilder AddJellyfinApi(this IServiceCollection serviceCollection, IEnumerable<Assembly> pluginAssemblies, NetworkConfiguration config, INetworkManager networkManager)
+        public static IMvcBuilder AddJellyfinApi(this IServiceCollection serviceCollection, IEnumerable<Assembly> pluginAssemblies, NetworkConfiguration config)
         {
         {
             IMvcBuilder mvcBuilder = serviceCollection
             IMvcBuilder mvcBuilder = serviceCollection
                 .AddCors()
                 .AddCors()
@@ -249,7 +200,7 @@ namespace Jellyfin.Server.Extensions
                     }
                     }
                     else
                     else
                     {
                     {
-                        ParseList(networkManager, config, config.KnownProxies, options);
+                        ParseList(config, config.KnownProxies, options);
                     }
                     }
 
 
                     // Only set forward limit if we have some known proxies or some known networks.
                     // Only set forward limit if we have some known proxies or some known networks.
@@ -370,6 +321,54 @@ namespace Jellyfin.Server.Extensions
             });
             });
         }
         }
 
 
+        /// <summary>
+        /// Sets up the proxy configuration based on the addresses in <paramref name="userList"/>.
+        /// </summary>
+        /// <param name="config">The <see cref="NetworkConfiguration"/> containing the config settings.</param>
+        /// <param name="userList">The string array to parse.</param>
+        /// <param name="options">The <see cref="ForwardedHeadersOptions"/> instance.</param>
+        internal static void ParseList(NetworkConfiguration config, string[] userList, ForwardedHeadersOptions options)
+        {
+            for (var i = 0; i < userList.Length; i++)
+            {
+                if (IPNetAddress.TryParse(userList[i], out var addr))
+                {
+                    AddIpAddress(config, options, addr.Address, addr.PrefixLength);
+                }
+                else if (IPHost.TryParse(userList[i], out var host))
+                {
+                    foreach (var address in host.GetAddresses())
+                    {
+                        AddIpAddress(config, options, addr.Address, addr.PrefixLength);
+                    }
+                }
+            }
+        }
+
+        private static void AddIpAddress(NetworkConfiguration config, ForwardedHeadersOptions options, IPAddress addr, int prefixLength)
+        {
+            if ((!config.EnableIPV4 && addr.AddressFamily == AddressFamily.InterNetwork) || (!config.EnableIPV6 && addr.AddressFamily == AddressFamily.InterNetworkV6))
+            {
+                return;
+            }
+
+            if (NetworkManager.SystemIP6Enabled && addr.AddressFamily == AddressFamily.InterNetwork)
+            {
+                // If the server is using dual-mode sockets, IPv4 addresses are supplied in an IPv6 format.
+                // https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-5.0 .
+                addr = addr.MapToIPv6();
+            }
+
+            if (prefixLength == 32)
+            {
+                options.KnownProxies.Add(addr);
+            }
+            else
+            {
+                options.KnownNetworks.Add(new IPNetwork(addr, prefixLength));
+            }
+        }
+
         private static void AddSwaggerTypeMappings(this SwaggerGenOptions options)
         private static void AddSwaggerTypeMappings(this SwaggerGenOptions options)
         {
         {
             /*
             /*

+ 2 - 6
Jellyfin.Server/Startup.cs

@@ -26,22 +26,18 @@ namespace Jellyfin.Server
     {
     {
         private readonly IServerConfigurationManager _serverConfigurationManager;
         private readonly IServerConfigurationManager _serverConfigurationManager;
         private readonly IServerApplicationHost _serverApplicationHost;
         private readonly IServerApplicationHost _serverApplicationHost;
-        private readonly INetworkManager _networkManager;
 
 
         /// <summary>
         /// <summary>
         /// Initializes a new instance of the <see cref="Startup" /> class.
         /// Initializes a new instance of the <see cref="Startup" /> class.
         /// </summary>
         /// </summary>
         /// <param name="serverConfigurationManager">The server configuration manager.</param>
         /// <param name="serverConfigurationManager">The server configuration manager.</param>
         /// <param name="serverApplicationHost">The server application host.</param>
         /// <param name="serverApplicationHost">The server application host.</param>
-        /// <param name="networkManager">The network manager.</param>
         public Startup(
         public Startup(
             IServerConfigurationManager serverConfigurationManager,
             IServerConfigurationManager serverConfigurationManager,
-            IServerApplicationHost serverApplicationHost,
-            INetworkManager networkManager)
+            IServerApplicationHost serverApplicationHost)
         {
         {
             _serverConfigurationManager = serverConfigurationManager;
             _serverConfigurationManager = serverConfigurationManager;
             _serverApplicationHost = serverApplicationHost;
             _serverApplicationHost = serverApplicationHost;
-            _networkManager = networkManager;
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -56,7 +52,7 @@ namespace Jellyfin.Server
             {
             {
                 options.HttpsPort = _serverApplicationHost.HttpsPort;
                 options.HttpsPort = _serverApplicationHost.HttpsPort;
             });
             });
-            services.AddJellyfinApi(_serverApplicationHost.GetApiPluginAssemblies(), _serverConfigurationManager.GetNetworkConfiguration(), _networkManager);
+            services.AddJellyfinApi(_serverApplicationHost.GetApiPluginAssemblies(), _serverConfigurationManager.GetNetworkConfiguration());
 
 
             services.AddJellyfinApiSwagger();
             services.AddJellyfinApiSwagger();
 
 

+ 0 - 10
MediaBrowser.Common/Net/INetworkManager.cs

@@ -44,16 +44,6 @@ namespace MediaBrowser.Common.Net
         /// </summary>
         /// </summary>
         bool IsIP4Enabled { get; set; }
         bool IsIP4Enabled { get; set; }
 
 
-        /// <summary>
-        /// Gets or sets a value indicating whether the system has IP4 is enabled.
-        /// </summary>
-        bool SystemIP4Enabled { get; set; }
-
-        /// <summary>
-        /// Gets or sets a value indicating whether the system has IP6 is enabled.
-        /// </summary>
-        bool SystemIP6Enabled { get; set; }
-
         /// <summary>
         /// <summary>
         /// Calculates the list of interfaces to use for Kestrel.
         /// Calculates the list of interfaces to use for Kestrel.
         /// </summary>
         /// </summary>

+ 2 - 2
tests/Jellyfin.Api.Tests/ParseNetworkTests.cs

@@ -30,7 +30,7 @@ namespace Jellyfin.Api.Tests
         public void TestNetworks(bool ip4, bool ip6, string hostList, string match)
         public void TestNetworks(bool ip4, bool ip6, string hostList, string match)
         {
         {
             using var nm = CreateNetworkManager();
             using var nm = CreateNetworkManager();
-            nm.SystemIP6Enabled = ip6;
+            NetworkManager.SystemIP6Enabled = ip6;
 
 
             var settings = new NetworkConfiguration
             var settings = new NetworkConfiguration
             {
             {
@@ -45,7 +45,7 @@ namespace Jellyfin.Api.Tests
             options.KnownProxies.Clear();
             options.KnownProxies.Clear();
             options.KnownNetworks.Clear();
             options.KnownNetworks.Clear();
 
 
-            ApiServiceCollectionExtensions.ParseList(nm, settings, hostList.Split(","), options);
+            ApiServiceCollectionExtensions.ParseList(settings, hostList.Split(","), options);
 
 
             var sb = new StringBuilder();
             var sb = new StringBuilder();
             foreach (var item in options.KnownProxies)
             foreach (var item in options.KnownProxies)