| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 | using System;using System.Linq;using System.Net;using Jellyfin.Networking.Configuration;using Jellyfin.Networking.Manager;using Jellyfin.Server.Extensions;using MediaBrowser.Common.Configuration;using Microsoft.AspNetCore.Builder;using Microsoft.AspNetCore.HttpOverrides;using Microsoft.Extensions.Logging.Abstractions;using Moq;using Xunit;namespace Jellyfin.Server.Tests{    public class ParseNetworkTests    {        public static TheoryData<bool, bool, string[], IPAddress[], IPNetwork[]> TestNetworks_TestData()        {            var data = new TheoryData<bool, bool, string[], IPAddress[], IPNetwork[]>();            data.Add(                true,                true,                new string[] { "192.168.t", "127.0.0.1", "1234.1232.12.1234" },                new IPAddress[] { IPAddress.Loopback.MapToIPv6() },                Array.Empty<IPNetwork>());            data.Add(                true,                false,                new string[] { "192.168.x", "127.0.0.1", "1234.1232.12.1234" },                new IPAddress[] { IPAddress.Loopback },                Array.Empty<IPNetwork>());            data.Add(                true,                true,                new string[] { "::1" },                Array.Empty<IPAddress>(),                new IPNetwork[] { new IPNetwork(IPAddress.IPv6Loopback, 128) });            data.Add(                false,                false,                new string[] { "localhost" },                Array.Empty<IPAddress>(),                Array.Empty<IPNetwork>());            data.Add(                true,                false,                new string[] { "localhost" },                new IPAddress[] { IPAddress.Loopback },                Array.Empty<IPNetwork>());            data.Add(                false,                true,                new string[] { "localhost" },                Array.Empty<IPAddress>(),                new IPNetwork[] { new IPNetwork(IPAddress.IPv6Loopback, 128) });            data.Add(                true,                true,                new string[] { "localhost" },                new IPAddress[] { IPAddress.Loopback.MapToIPv6() },                new IPNetwork[] { new IPNetwork(IPAddress.IPv6Loopback, 128) });            return data;        }        [Theory]        [MemberData(nameof(TestNetworks_TestData))]        public void TestNetworks(bool ip4, bool ip6, string[] hostList, IPAddress[] knownProxies, IPNetwork[] knownNetworks)        {            using var nm = CreateNetworkManager();            var settings = new NetworkConfiguration            {                EnableIPV4 = ip4,                EnableIPV6 = ip6            };            ForwardedHeadersOptions options = new ForwardedHeadersOptions();            // Need this here as ::1 and 127.0.0.1 are in them by default.            options.KnownProxies.Clear();            options.KnownNetworks.Clear();            ApiServiceCollectionExtensions.AddProxyAddresses(settings, hostList, options);            Assert.Equal(knownProxies.Length, options.KnownProxies.Count);            foreach (var item in knownProxies)            {                Assert.True(options.KnownProxies.Contains(item));            }            Assert.Equal(knownNetworks.Length, options.KnownNetworks.Count);            foreach (var item in knownNetworks)            {                Assert.NotNull(options.KnownNetworks.FirstOrDefault(x => x.Prefix.Equals(item.Prefix) && x.PrefixLength == item.PrefixLength));            }        }        private static IConfigurationManager GetMockConfig(NetworkConfiguration conf)        {            var configManager = new Mock<IConfigurationManager>            {                CallBase = true            };            configManager.Setup(x => x.GetConfiguration(It.IsAny<string>())).Returns(conf);            return configManager.Object;        }        private static NetworkManager CreateNetworkManager()        {            var conf = new NetworkConfiguration()            {                EnableIPV6 = true,                EnableIPV4 = true,            };            return new NetworkManager(GetMockConfig(conf), new NullLogger<NetworkManager>());        }    }}
 |