Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Removes obsolete network settings from system.xml #5482

Open
wants to merge 25 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
8348145
New xml migration
BaronGreenback Mar 11, 2021
e96671b
Moved to program.cs
BaronGreenback Mar 11, 2021
6d4e544
Moved migration
BaronGreenback Mar 15, 2021
a9f4cf8
Update ApplicationHost.cs
BaronGreenback Mar 15, 2021
08aeb4f
Update ApplicationHost.cs
BaronGreenback Mar 15, 2021
d5051d7
Update Program.cs
BaronGreenback Mar 15, 2021
1b9b775
Changed to xmlTextReader
BaronGreenback Mar 15, 2021
a43ffc1
reworking
BaronGreenback Mar 22, 2021
14ce842
Simplified
BaronGreenback Mar 22, 2021
5d28ac0
removed unused file.
BaronGreenback Mar 22, 2021
6617fc3
sln correction
BaronGreenback Mar 22, 2021
72b3684
Merge branch 'master' into SettingsMigration
BaronGreenback Mar 23, 2021
23aad2d
Updated from master
BaronGreenback Apr 15, 2021
1bd8259
Used fixed config.
BaronGreenback Apr 15, 2021
1c95184
Merge branch 'master' into SettingsMigration
BaronGreenback Apr 21, 2021
26c6d90
fixed merge
BaronGreenback Apr 21, 2021
ed638d2
Update MigrationRunner.cs
BaronGreenback May 6, 2021
1fd43bc
Create delete me
BaronGreenback May 6, 2021
0d4e0bf
Rename Jellyfin.Server/Migrations/Legacy/V703/NetworkConfiguration.cs…
BaronGreenback May 6, 2021
b12443a
Update and rename Jellyfin.Server/Migrations/Legacy/V703/ServerConfig…
BaronGreenback May 6, 2021
13a8616
Delete delete me
BaronGreenback May 6, 2021
d391257
Update NetworkConfiguration.cs
BaronGreenback May 6, 2021
2d1452e
Improved
BaronGreenback May 7, 2021
6de8c96
changed path to configuration folder
BaronGreenback May 7, 2021
c09b0f7
Merge branch 'master' into SettingsMigration
BaronGreenback May 29, 2021
File filter
Filter file types
Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.

Always

Just for now

Next
New xml migration
  • Loading branch information
BaronGreenback committed Mar 11, 2021
commit 834814583fec8137dba82a0f7005c66cd19391e6
@@ -14,6 +14,8 @@
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Serialization;
using Emby.Dlna;
using Emby.Dlna.Main;
using Emby.Dlna.Ssdp;
@@ -84,6 +86,7 @@
using MediaBrowser.Controller.TV;
using MediaBrowser.LocalMetadata.Savers;
using MediaBrowser.MediaEncoding.BdInfo;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Cryptography;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Globalization;
@@ -266,16 +269,21 @@ public virtual bool CanLaunchWebBrowser
LoggerFactory = loggerFactory;
_fileSystemManager = fileSystem;

Logger = LoggerFactory.CreateLogger<ApplicationHost>();

// Have to migrate settings here as it needs to be done before system.xml is processed.
XmlConfigMigrationHelper.MigrateConfigurationTo<ServerConfiguration, NetworkConfiguration>(
Path.Combine(ApplicationPaths.ConfigurationDirectoryPath, "system.xml"),
Path.Combine(ApplicationPaths.ConfigurationDirectoryPath, "network.xml"),
Logger,
_xmlSerializer);

ConfigurationManager = new ServerConfigurationManager(ApplicationPaths, LoggerFactory, _xmlSerializer, _fileSystemManager);
// Have to migrate settings here as migration subsystem not yet initialised.
MigrateNetworkConfiguration();

// Have to pre-register the NetworkConfigurationFactory, as the configuration sub-system is not yet initialised.
ConfigurationManager.RegisterConfiguration<NetworkConfigurationFactory>();
NetManager = new NetworkManager((IServerConfigurationManager)ConfigurationManager, LoggerFactory.CreateLogger<NetworkManager>());

Logger = LoggerFactory.CreateLogger<ApplicationHost>();

_startupOptions = options;
_startupConfig = startupConfig;

@@ -299,22 +307,6 @@ public virtual bool CanLaunchWebBrowser
ApplicationVersion);
}

/// <summary>
/// Temporary function to migration network settings out of system.xml and into network.xml.
/// TODO: remove at the point when a fixed migration path has been decided upon.
/// </summary>
private void MigrateNetworkConfiguration()
{
string path = Path.Combine(ConfigurationManager.CommonApplicationPaths.ConfigurationDirectoryPath, "network.xml");
if (!File.Exists(path))
{
var networkSettings = new NetworkConfiguration();
ClassMigrationHelper.CopyProperties(ServerConfigurationManager.Configuration, networkSettings);
_xmlSerializer.SerializeToFile(networkSettings, path);
Logger?.LogDebug("Successfully migrated network settings.");
}
}

public string ExpandVirtualPath(string path)
{
var appPaths = ApplicationPaths;

This file was deleted.

@@ -0,0 +1,99 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml;
using System.Xml.Serialization;
using MediaBrowser.Model.Serialization;
using Microsoft.Extensions.Logging;

namespace Jellyfin.Api.Helpers
{
/// <summary>
/// Defines the <see cref="XmlConfigMigrationHelper" />.
/// </summary>
public static class XmlConfigMigrationHelper
{
/// <summary>
/// Processes the invalid entries in an XML file, and migrates them into a new file.
/// The type <typeparamref name="T"/> should <b>not</b> contain the properties that need to be migrated.
/// </summary>
/// <typeparam name="T">The type of the existing configuration class with the obsolete properties <b>removed</b>.</typeparam>
/// <typeparam name="T2">The type of the destination configuration class.</typeparam>
/// <param name="sourceFile">The source xml file to be migrated.</param>
/// <param name="destFile">The destination xml to be created based upon <typeparamref name="T2"/>.</param>
/// <param name="logger">The <see cref="ILogger"/> instance.</param>
/// <param name="xmlSerializer">The <see cref="IXmlSerializer"/> instance.</param>
public static void MigrateConfigurationTo<T, T2>(string sourceFile, string destFile, ILogger logger, IXmlSerializer xmlSerializer)
{
if (!File.Exists(destFile))
{
var settings = Activator.CreateInstance<T2>();
var settingsType = typeof(T2);
var props = settingsType.GetProperties().Where(x => x.CanWrite).ToList();

// manually load source xml file.
var serializer = new XmlSerializer(typeof(T));
serializer.UnknownElement += (object? sender, XmlElementEventArgs e) =>
{
var p = props.Find(x => x.Name == e.Element.Name);
if (p != null)
{
if (p.PropertyType == typeof(bool))
{
bool.TryParse(e.Element.InnerText, out var boolVal);
p.SetValue(settings, boolVal);
}
else if (p.PropertyType == typeof(int))
{
int.TryParse(e.Element.InnerText, out var intVal);
p.SetValue(settings, intVal);
}
else if (p.PropertyType == typeof(string[]))
{
var items = new List<string>();
foreach (XmlNode el in e.Element.ChildNodes)
{
items.Add(el.InnerText);
}

p.SetValue(settings, items.ToArray());
}
else
{
try
{
p.SetValue(settings, e.Element.InnerText ?? string.Empty);
}
catch
{
logger.LogError(
"Unable to migrate value {Name}. Unknown datatype {Type}. Value {Value}.",
e.Element.Name,
p.PropertyType.ToString(),
e.Element.InnerText);
}
}
}
};

T? deserialized;
try
{
using (StreamReader reader = new StreamReader(sourceFile))
{
deserialized = (T?)serializer.Deserialize(reader);
}
}
catch (Exception ex)
{
// Catch everything, so we don't bomb out JF.
logger.LogError(ex, "Exception occurred migrating settings.");
}

xmlSerializer.SerializeToFile(settings, destFile);
logger.LogDebug("Successfully migrated settings.");
}
}
}
}
@@ -103,16 +103,6 @@ public string BaseUrl
/// <value>The public mapped port.</value>
public int PublicPort { get; set; } = DefaultHttpPort;

/// <summary>
/// Gets or sets a value indicating whether the http port should be mapped as part of UPnP automatic port forwarding.
/// </summary>
public bool UPnPCreateHttpPortMap { get; set; }

/// <summary>
/// Gets or sets the UDPPortRange.
/// </summary>
public string UDPPortRange { get; set; } = string.Empty;

/// <summary>
/// Gets or sets a value indicating whether gets or sets IPV6 capability.
/// </summary>
@@ -123,29 +113,6 @@ public string BaseUrl
/// </summary>
public bool EnableIPV4 { get; set; } = true;

/// <summary>
/// Gets or sets a value indicating whether detailed SSDP logs are sent to the console/log.
/// "Emby.Dlna": "Debug" must be set in logging.default.json for this property to have any effect.
/// </summary>
public bool EnableSSDPTracing { get; set; }

/// <summary>
/// Gets or sets the SSDPTracingFilter
/// Gets or sets a value indicating whether an IP address is to be used to filter the detailed ssdp logs that are being sent to the console/log.
/// If the setting "Emby.Dlna": "Debug" msut be set in logging.default.json for this property to work.
/// </summary>
public string SSDPTracingFilter { get; set; } = string.Empty;

/// <summary>
/// Gets or sets the number of times SSDP UDP messages are sent.
/// </summary>
public int UDPSendCount { get; set; } = 2;

/// <summary>
/// Gets or sets the delay between each groups of SSDP messages (in ms).
/// </summary>
public int UDPSendDelay { get; set; } = 100;

/// <summary>
/// Gets or sets a value indicating whether address names that match <see cref="VirtualInterfaceNames"/> should be Ignore for the purposes of binding.
/// </summary>
@@ -156,43 +123,18 @@ public string BaseUrl
/// </summary>
public string VirtualInterfaceNames { get; set; } = "vEthernet*";

/// <summary>
/// Gets or sets the time (in seconds) between the pings of SSDP gateway monitor.
/// </summary>
public int GatewayMonitorPeriod { get; set; } = 60;

/// <summary>
/// Gets a value indicating whether multi-socket binding is available.
/// </summary>
public bool EnableMultiSocketBinding { get; } = true;

/// <summary>
/// Gets or sets a value indicating whether all IPv6 interfaces should be treated as on the internal network.
/// Depending on the address range implemented ULA ranges might not be used.
/// </summary>
public bool TrustAllIP6Interfaces { get; set; }

/// <summary>
/// Gets or sets the ports that HDHomerun uses.
/// </summary>
public string HDHomerunPortRange { get; set; } = string.Empty;

/// <summary>
/// Gets or sets the PublishedServerUriBySubnet
/// Gets or sets PublishedServerUri to advertise for specific subnets.
/// </summary>
public string[] PublishedServerUriBySubnet { get; set; } = Array.Empty<string>();

/// <summary>
/// Gets or sets a value indicating whether Autodiscovery tracing is enabled.
/// </summary>
public bool AutoDiscoveryTracing { get; set; }

/// <summary>
/// Gets or sets a value indicating whether Autodiscovery is enabled.
/// </summary>
public bool AutoDiscovery { get; set; } = true;

/// <summary>
/// Gets or sets the filter for remote IP connectivity. Used in conjuntion with <seealso cref="IsRemoteIPFilterBlacklist"/>.
/// </summary>
ProTip! Use n and p to navigate between commits in a pull request.