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

Prevent system plugins from being uninstalled

Neil Burrows 5 жил өмнө
parent
commit
c20400fa40

+ 6 - 0
Emby.Server.Implementations/Updates/InstallationManager.cs

@@ -402,6 +402,12 @@ namespace Emby.Server.Implementations.Updates
         /// <param name="plugin">The plugin.</param>
         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

+ 8 - 1
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
         /// <value>The data folder path.</value>
         public string DataFolderPath { get; private set; }
 
+        /// <summary>
+        /// Gets a value indicating whether the plugin can be uninstalled.
+        /// </summary>
+        public bool CanUninstall => !Path.GetDirectoryName(AssemblyFilePath).Equals(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), StringComparison.InvariantCulture);
+
         /// <summary>
         /// Gets the plugin info.
         /// </summary>
@@ -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;

+ 5 - 0
MediaBrowser.Common/Plugins/IPlugin.cs

@@ -40,6 +40,11 @@ namespace MediaBrowser.Common.Plugins
         /// <value>The assembly file path.</value>
         string AssemblyFilePath { get; }
 
+        /// <summary>
+        /// Gets a value indicating whether the plugin can be uninstalled.
+        /// </summary>
+        bool CanUninstall { get; }
+
         /// <summary>
         /// Gets the full path to the data folder, where the plugin can store any miscellaneous files needed.
         /// </summary>

+ 6 - 0
MediaBrowser.Model/Plugins/PluginInfo.cs

@@ -35,6 +35,12 @@ namespace MediaBrowser.Model.Plugins
         /// </summary>
         /// <value>The unique id.</value>
         public string Id { get; set; }
+
+        /// <summary>
+        /// Gets or sets a value indicating whether the plugin can be uninstalled.
+        /// </summary>
+        public bool CanUninstall { get; set; }
+
         /// <summary>
         /// Gets or sets the image URL.
         /// </summary>