From c20400fa40d88329b1187aed84ead66e8cae4dde Mon Sep 17 00:00:00 2001 From: Neil Burrows Date: Mon, 22 Jun 2020 10:13:28 +0100 Subject: [PATCH 1/4] Prevent system plugins from being uninstalled --- .../Updates/InstallationManager.cs | 6 ++++++ MediaBrowser.Common/Plugins/BasePlugin.cs | 9 ++++++++- MediaBrowser.Common/Plugins/IPlugin.cs | 5 +++++ MediaBrowser.Model/Plugins/PluginInfo.cs | 6 ++++++ 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/Emby.Server.Implementations/Updates/InstallationManager.cs b/Emby.Server.Implementations/Updates/InstallationManager.cs index 80326fddf2..0e912dfe9c 100644 --- a/Emby.Server.Implementations/Updates/InstallationManager.cs +++ b/Emby.Server.Implementations/Updates/InstallationManager.cs @@ -402,6 +402,12 @@ namespace Emby.Server.Implementations.Updates /// The plugin. public void UninstallPlugin(IPlugin plugin) { + if (!plugin.CanUninstall) + { + _logger.LogInformation("Attempt to delete non removable plugin {0}", plugin.Name); + return; + } + plugin.OnUninstalling(); // Remove it the quick way for now diff --git a/MediaBrowser.Common/Plugins/BasePlugin.cs b/MediaBrowser.Common/Plugins/BasePlugin.cs index 9e4a360c38..aab07c1fb6 100644 --- a/MediaBrowser.Common/Plugins/BasePlugin.cs +++ b/MediaBrowser.Common/Plugins/BasePlugin.cs @@ -2,6 +2,7 @@ using System; using System.IO; +using System.Reflection; using MediaBrowser.Common.Configuration; using MediaBrowser.Model.Plugins; using MediaBrowser.Model.Serialization; @@ -49,6 +50,11 @@ namespace MediaBrowser.Common.Plugins /// The data folder path. public string DataFolderPath { get; private set; } + /// + /// Gets a value indicating whether the plugin can be uninstalled. + /// + public bool CanUninstall => !Path.GetDirectoryName(AssemblyFilePath).Equals(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), StringComparison.InvariantCulture); + /// /// Gets the plugin info. /// @@ -60,7 +66,8 @@ namespace MediaBrowser.Common.Plugins Name = Name, Version = Version.ToString(), Description = Description, - Id = Id.ToString() + Id = Id.ToString(), + CanUninstall = CanUninstall }; return info; diff --git a/MediaBrowser.Common/Plugins/IPlugin.cs b/MediaBrowser.Common/Plugins/IPlugin.cs index d348209613..7bd37d2106 100644 --- a/MediaBrowser.Common/Plugins/IPlugin.cs +++ b/MediaBrowser.Common/Plugins/IPlugin.cs @@ -40,6 +40,11 @@ namespace MediaBrowser.Common.Plugins /// The assembly file path. string AssemblyFilePath { get; } + /// + /// Gets a value indicating whether the plugin can be uninstalled. + /// + bool CanUninstall { get; } + /// /// Gets the full path to the data folder, where the plugin can store any miscellaneous files needed. /// diff --git a/MediaBrowser.Model/Plugins/PluginInfo.cs b/MediaBrowser.Model/Plugins/PluginInfo.cs index c13f1a89f1..dd215192f9 100644 --- a/MediaBrowser.Model/Plugins/PluginInfo.cs +++ b/MediaBrowser.Model/Plugins/PluginInfo.cs @@ -35,6 +35,12 @@ namespace MediaBrowser.Model.Plugins /// /// The unique id. public string Id { get; set; } + + /// + /// Gets or sets a value indicating whether the plugin can be uninstalled. + /// + public bool CanUninstall { get; set; } + /// /// Gets or sets the image URL. /// From a20fd341618499fe151e623e0c40e975ea708ad1 Mon Sep 17 00:00:00 2001 From: Neil Burrows Date: Mon, 22 Jun 2020 11:04:20 +0100 Subject: [PATCH 2/4] Update Emby.Server.Implementations/Updates/InstallationManager.cs Co-authored-by: Vasily --- Emby.Server.Implementations/Updates/InstallationManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Emby.Server.Implementations/Updates/InstallationManager.cs b/Emby.Server.Implementations/Updates/InstallationManager.cs index 0e912dfe9c..fbbc97029c 100644 --- a/Emby.Server.Implementations/Updates/InstallationManager.cs +++ b/Emby.Server.Implementations/Updates/InstallationManager.cs @@ -404,7 +404,7 @@ namespace Emby.Server.Implementations.Updates { if (!plugin.CanUninstall) { - _logger.LogInformation("Attempt to delete non removable plugin {0}", plugin.Name); + _logger.LogWarning("Attempt to delete non removable plugin {0}, ignoring request", plugin.Name); return; } From 966ebfaf68c218eb46b90b18d699be985e91ca47 Mon Sep 17 00:00:00 2001 From: Neil Burrows Date: Mon, 22 Jun 2020 11:53:15 +0100 Subject: [PATCH 3/4] Wrapping long line on function parameters --- MediaBrowser.Common/Plugins/BasePlugin.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/MediaBrowser.Common/Plugins/BasePlugin.cs b/MediaBrowser.Common/Plugins/BasePlugin.cs index aab07c1fb6..d538a37724 100644 --- a/MediaBrowser.Common/Plugins/BasePlugin.cs +++ b/MediaBrowser.Common/Plugins/BasePlugin.cs @@ -53,7 +53,9 @@ namespace MediaBrowser.Common.Plugins /// /// Gets a value indicating whether the plugin can be uninstalled. /// - public bool CanUninstall => !Path.GetDirectoryName(AssemblyFilePath).Equals(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), StringComparison.InvariantCulture); + public bool CanUninstall => !Path.GetDirectoryName(AssemblyFilePath).Equals( + Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), + StringComparison.InvariantCulture); /// /// Gets the plugin info. From 0bab57ebbcbd39d5479e3df6b37bd41b340640e5 Mon Sep 17 00:00:00 2001 From: Neil Burrows Date: Mon, 22 Jun 2020 11:56:18 +0100 Subject: [PATCH 4/4] Wrapping long line on function parameters (take 2) --- MediaBrowser.Common/Plugins/BasePlugin.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/MediaBrowser.Common/Plugins/BasePlugin.cs b/MediaBrowser.Common/Plugins/BasePlugin.cs index d538a37724..f10a1918f7 100644 --- a/MediaBrowser.Common/Plugins/BasePlugin.cs +++ b/MediaBrowser.Common/Plugins/BasePlugin.cs @@ -53,9 +53,8 @@ namespace MediaBrowser.Common.Plugins /// /// Gets a value indicating whether the plugin can be uninstalled. /// - public bool CanUninstall => !Path.GetDirectoryName(AssemblyFilePath).Equals( - Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), - StringComparison.InvariantCulture); + public bool CanUninstall => !Path.GetDirectoryName(AssemblyFilePath) + .Equals(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), StringComparison.InvariantCulture); /// /// Gets the plugin info.