From 2d06095447b972c8c7239277428e2c67c8b7ca86 Mon Sep 17 00:00:00 2001 From: LukePulverenti Date: Mon, 25 Feb 2013 22:43:04 -0500 Subject: plugin security fixes and other abstractions --- .../MediaBrowser.Controller.csproj | 4 - MediaBrowser.Controller/Persistence/TypeMapper.cs | 47 ----- .../Plugins/PluginSecurityManager.cs | 22 +-- .../ScheduledTasks/ChapterImagesTask.cs | 111 ----------- .../ScheduledTasks/ImageCleanupTask.cs | 210 --------------------- .../ScheduledTasks/PeopleValidationTask.cs | 22 +-- .../ScheduledTasks/PluginUpdateTask.cs | 121 ------------ .../ScheduledTasks/RefreshMediaLibraryTask.cs | 25 +-- .../Updates/InstallationManager.cs | 13 +- 9 files changed, 47 insertions(+), 528 deletions(-) delete mode 100644 MediaBrowser.Controller/Persistence/TypeMapper.cs delete mode 100644 MediaBrowser.Controller/ScheduledTasks/ChapterImagesTask.cs delete mode 100644 MediaBrowser.Controller/ScheduledTasks/ImageCleanupTask.cs delete mode 100644 MediaBrowser.Controller/ScheduledTasks/PluginUpdateTask.cs (limited to 'MediaBrowser.Controller') diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 1e901055ef..ff2bcb213f 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -132,7 +132,6 @@ - @@ -179,10 +178,7 @@ - - - diff --git a/MediaBrowser.Controller/Persistence/TypeMapper.cs b/MediaBrowser.Controller/Persistence/TypeMapper.cs deleted file mode 100644 index 2b9ec9e5ec..0000000000 --- a/MediaBrowser.Controller/Persistence/TypeMapper.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using System.Collections.Concurrent; -using System.Linq; - -namespace MediaBrowser.Controller.Persistence -{ - /// - /// Class TypeMapper - /// - public class TypeMapper - { - /// - /// This holds all the types in the running assemblies so that we can de-serialize properly when we don't have strong types - /// - private readonly ConcurrentDictionary _typeMap = new ConcurrentDictionary(); - - /// - /// Gets the type. - /// - /// Name of the type. - /// Type. - /// - public Type GetType(string typeName) - { - if (string.IsNullOrEmpty(typeName)) - { - throw new ArgumentNullException(); - } - - return _typeMap.GetOrAdd(typeName, LookupType); - } - - /// - /// Lookups the type. - /// - /// Name of the type. - /// Type. - private Type LookupType(string typeName) - { - return AppDomain - .CurrentDomain - .GetAssemblies() - .Select(a => a.GetType(typeName, false)) - .FirstOrDefault(t => t != null); - } - } -} diff --git a/MediaBrowser.Controller/Plugins/PluginSecurityManager.cs b/MediaBrowser.Controller/Plugins/PluginSecurityManager.cs index a08eb457d4..db3f20ee3f 100644 --- a/MediaBrowser.Controller/Plugins/PluginSecurityManager.cs +++ b/MediaBrowser.Controller/Plugins/PluginSecurityManager.cs @@ -1,4 +1,5 @@ -using Mediabrowser.Model.Entities; +using MediaBrowser.Model.Serialization; +using Mediabrowser.Model.Entities; using Mediabrowser.PluginSecurity; using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Net; @@ -39,10 +40,8 @@ namespace MediaBrowser.Controller.Plugins } } - /// - /// The _network manager - /// - private INetworkManager _networkManager; + private IHttpClient _httpClient; + private IJsonSerializer _jsonSerializer; /// /// The _kernel @@ -53,21 +52,22 @@ namespace MediaBrowser.Controller.Plugins /// Initializes a new instance of the class. /// /// The kernel. - /// The network manager. - public PluginSecurityManager(IKernel kernel, INetworkManager networkManager) + public PluginSecurityManager(IKernel kernel, IHttpClient httpClient, IJsonSerializer jsonSerializer, IApplicationPaths appPaths) { if (kernel == null) { throw new ArgumentNullException("kernel"); } - if (networkManager == null) + if (httpClient == null) { - throw new ArgumentNullException("networkManager"); + throw new ArgumentNullException("httpClient"); } _kernel = kernel; - _networkManager = networkManager; + _httpClient = httpClient; + _jsonSerializer = jsonSerializer; + MBRegistration.Init(appPaths); } /// @@ -78,7 +78,7 @@ namespace MediaBrowser.Controller.Plugins /// Task{MBRegistrationRecord}. public async Task GetRegistrationStatus(string feature, string mb2Equivalent = null) { - return await MBRegistration.GetRegistrationStatus(feature, mb2Equivalent).ConfigureAwait(false); + return await MBRegistration.GetRegistrationStatus(_httpClient, _jsonSerializer, feature, mb2Equivalent).ConfigureAwait(false); } /// diff --git a/MediaBrowser.Controller/ScheduledTasks/ChapterImagesTask.cs b/MediaBrowser.Controller/ScheduledTasks/ChapterImagesTask.cs deleted file mode 100644 index 5360337199..0000000000 --- a/MediaBrowser.Controller/ScheduledTasks/ChapterImagesTask.cs +++ /dev/null @@ -1,111 +0,0 @@ -using MediaBrowser.Common.ScheduledTasks; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Model.Logging; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; - -namespace MediaBrowser.Controller.ScheduledTasks -{ - /// - /// Class ChapterImagesTask - /// - class ChapterImagesTask : BaseScheduledTask - { - /// - /// Initializes a new instance of the class. - /// - /// The kernel. - /// - public ChapterImagesTask(Kernel kernel, ITaskManager taskManager, ILogger logger) - : base(kernel, taskManager, logger) - { - } - - /// - /// Creates the triggers that define when the task will run - /// - /// IEnumerable{BaseTaskTrigger}. - public override IEnumerable GetDefaultTriggers() - { - return new ITaskTrigger[] - { - new DailyTrigger { TimeOfDay = TimeSpan.FromHours(4) } - }; - } - - /// - /// Returns the task to be executed - /// - /// The cancellation token. - /// The progress. - /// Task. - protected override Task ExecuteInternal(CancellationToken cancellationToken, IProgress progress) - { - var videos = Kernel.RootFolder.RecursiveChildren.OfType /// The description. - public override string Description + public string Description { get { return "Updates metadata for actors, artists and directors in your media library."; } } @@ -69,7 +69,7 @@ namespace MediaBrowser.Controller.ScheduledTasks /// Gets the category. /// /// The category. - public override string Category + public string Category { get { diff --git a/MediaBrowser.Controller/ScheduledTasks/PluginUpdateTask.cs b/MediaBrowser.Controller/ScheduledTasks/PluginUpdateTask.cs deleted file mode 100644 index 7a1007f1bb..0000000000 --- a/MediaBrowser.Controller/ScheduledTasks/PluginUpdateTask.cs +++ /dev/null @@ -1,121 +0,0 @@ -using MediaBrowser.Common.ScheduledTasks; -using MediaBrowser.Model.Logging; -using MediaBrowser.Model.Net; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; - -namespace MediaBrowser.Controller.ScheduledTasks -{ - /// - /// Plugin Update Task - /// - public class PluginUpdateTask : BaseScheduledTask - { - /// - /// Initializes a new instance of the class. - /// - /// The kernel. - /// - public PluginUpdateTask(Kernel kernel, ITaskManager taskManager, ILogger logger) - : base(kernel, taskManager, logger) - { - } - - /// - /// Creates the triggers that define when the task will run - /// - /// IEnumerable{BaseTaskTrigger}. - public override IEnumerable GetDefaultTriggers() - { - return new ITaskTrigger[] { - - // 1:30am - new DailyTrigger { TimeOfDay = TimeSpan.FromHours(1.5) }, - - new IntervalTrigger { Interval = TimeSpan.FromHours(2)} - }; - } - - /// - /// Update installed plugins - /// - /// The cancellation token. - /// The progress. - /// Task. - protected override async Task ExecuteInternal(CancellationToken cancellationToken, IProgress progress) - { - progress.Report(0); - - var packagesToInstall = (await Kernel.InstallationManager.GetAvailablePluginUpdates(true, cancellationToken).ConfigureAwait(false)).ToList(); - - progress.Report(10); - - var numComplete = 0; - - // Create tasks for each one - var tasks = packagesToInstall.Select(i => Task.Run(async () => - { - cancellationToken.ThrowIfCancellationRequested(); - - try - { - await Kernel.InstallationManager.InstallPackage(i, new Progress { }, cancellationToken).ConfigureAwait(false); - } - catch (OperationCanceledException) - { - // InstallPackage has it's own inner cancellation token, so only throw this if it's ours - if (cancellationToken.IsCancellationRequested) - { - throw; - } - } - catch (HttpException ex) - { - Logger.ErrorException("Error downloading {0}", ex, i.name); - } - catch (IOException ex) - { - Logger.ErrorException("Error updating {0}", ex, i.name); - } - - // Update progress - lock (progress) - { - numComplete++; - double percent = numComplete; - percent /= packagesToInstall.Count; - - progress.Report((90 * percent) + 10); - } - })); - - cancellationToken.ThrowIfCancellationRequested(); - - await Task.WhenAll(tasks).ConfigureAwait(false); - - progress.Report(100); - } - - /// - /// Gets the name of the task - /// - /// The name. - public override string Name - { - get { return "Check for plugin updates"; } - } - - /// - /// Gets the description. - /// - /// The description. - public override string Description - { - get { return "Downloads and installs updates for plugins that are configured to update automatically."; } - } - } -} \ No newline at end of file diff --git a/MediaBrowser.Controller/ScheduledTasks/RefreshMediaLibraryTask.cs b/MediaBrowser.Controller/ScheduledTasks/RefreshMediaLibraryTask.cs index 104b432f4c..c5e36afb8f 100644 --- a/MediaBrowser.Controller/ScheduledTasks/RefreshMediaLibraryTask.cs +++ b/MediaBrowser.Controller/ScheduledTasks/RefreshMediaLibraryTask.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.ScheduledTasks; -using MediaBrowser.Model.Logging; using MediaBrowser.Model.Tasks; using System; using System.Collections.Generic; @@ -11,23 +10,27 @@ namespace MediaBrowser.Controller.ScheduledTasks /// /// Class RefreshMediaLibraryTask /// - public class RefreshMediaLibraryTask : BaseScheduledTask + public class RefreshMediaLibraryTask : IScheduledTask { + /// + /// The _kernel + /// + private readonly Kernel _kernel; + /// /// Initializes a new instance of the class. /// /// The kernel. - /// - public RefreshMediaLibraryTask(Kernel kernel, ITaskManager taskManager, ILogger logger) - : base(kernel, taskManager, logger) + public RefreshMediaLibraryTask(Kernel kernel) { + _kernel = kernel; } /// /// Gets the default triggers. /// /// IEnumerable{BaseTaskTrigger}. - public override IEnumerable GetDefaultTriggers() + public IEnumerable GetDefaultTriggers() { return new ITaskTrigger[] { @@ -45,20 +48,20 @@ namespace MediaBrowser.Controller.ScheduledTasks /// The cancellation token. /// The progress. /// Task. - protected override Task ExecuteInternal(CancellationToken cancellationToken, IProgress progress) + public Task Execute(CancellationToken cancellationToken, IProgress progress) { cancellationToken.ThrowIfCancellationRequested(); progress.Report(0); - return Kernel.LibraryManager.ValidateMediaLibrary(progress, cancellationToken); + return _kernel.LibraryManager.ValidateMediaLibrary(progress, cancellationToken); } /// /// Gets the name. /// /// The name. - public override string Name + public string Name { get { return "Scan media library"; } } @@ -67,7 +70,7 @@ namespace MediaBrowser.Controller.ScheduledTasks /// Gets the description. /// /// The description. - public override string Description + public string Description { get { return "Scans your media library and refreshes metatata based on configuration."; } } @@ -76,7 +79,7 @@ namespace MediaBrowser.Controller.ScheduledTasks /// Gets the category. /// /// The category. - public override string Category + public string Category { get { diff --git a/MediaBrowser.Controller/Updates/InstallationManager.cs b/MediaBrowser.Controller/Updates/InstallationManager.cs index 15d626b2fc..8751bd4274 100644 --- a/MediaBrowser.Controller/Updates/InstallationManager.cs +++ b/MediaBrowser.Controller/Updates/InstallationManager.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.Events; +using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Net; using MediaBrowser.Common.Plugins; using MediaBrowser.Common.Progress; @@ -119,6 +120,12 @@ namespace MediaBrowser.Controller.Updates /// The HTTP client. protected IHttpClient HttpClient { get; private set; } + /// + /// Gets the application host. + /// + /// The application host. + protected IApplicationHost ApplicationHost { get; private set; } + /// /// Initializes a new instance of the class. /// @@ -128,8 +135,9 @@ namespace MediaBrowser.Controller.Updates /// The network manager. /// The json serializer. /// The logger. + /// The app host. /// zipClient - public InstallationManager(Kernel kernel, IHttpClient httpClient, IZipClient zipClient, INetworkManager networkManager, IJsonSerializer jsonSerializer, ILogger logger) + public InstallationManager(Kernel kernel, IHttpClient httpClient, IZipClient zipClient, INetworkManager networkManager, IJsonSerializer jsonSerializer, ILogger logger, IApplicationHost appHost) : base(kernel) { if (zipClient == null) @@ -155,6 +163,7 @@ namespace MediaBrowser.Controller.Updates JsonSerializer = jsonSerializer; HttpClient = httpClient; + ApplicationHost = appHost; _networkManager = networkManager; _logger = logger; ZipClient = zipClient; @@ -276,7 +285,7 @@ namespace MediaBrowser.Controller.Updates return package.versions .OrderByDescending(v => v.version) - .FirstOrDefault(v => v.classification <= classification && IsPackageVersionUpToDate(v, Kernel.ApplicationVersion)); + .FirstOrDefault(v => v.classification <= classification && IsPackageVersionUpToDate(v, ApplicationHost.ApplicationVersion)); } /// -- cgit v1.2.3