From a6dda70c0a5daa0a970d0caa32afc6d9010fd430 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 25 Oct 2023 15:11:41 +0300 Subject: [PATCH] New: Add Download Client validation for indexers (cherry picked from commit e53b7f8c945e3597ca1719961e82540f1f01f0e9) Closes #9338 --- .../DownloadClientExistsValidator.cs | 27 +++++++++++++++++++ .../Indexers/IndexerController.cs | 4 ++- 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 src/NzbDrone.Core/Validation/DownloadClientExistsValidator.cs diff --git a/src/NzbDrone.Core/Validation/DownloadClientExistsValidator.cs b/src/NzbDrone.Core/Validation/DownloadClientExistsValidator.cs new file mode 100644 index 0000000000..cf021f4649 --- /dev/null +++ b/src/NzbDrone.Core/Validation/DownloadClientExistsValidator.cs @@ -0,0 +1,27 @@ +using FluentValidation.Validators; +using NzbDrone.Core.Download; + +namespace NzbDrone.Core.Validation +{ + public class DownloadClientExistsValidator : PropertyValidator + { + private readonly IDownloadClientFactory _downloadClientFactory; + + public DownloadClientExistsValidator(IDownloadClientFactory downloadClientFactory) + { + _downloadClientFactory = downloadClientFactory; + } + + protected override string GetDefaultMessageTemplate() => "Download Client does not exist"; + + protected override bool IsValid(PropertyValidatorContext context) + { + if (context?.PropertyValue == null || (int)context.PropertyValue == 0) + { + return true; + } + + return _downloadClientFactory.Exists((int)context.PropertyValue); + } + } +} diff --git a/src/Radarr.Api.V3/Indexers/IndexerController.cs b/src/Radarr.Api.V3/Indexers/IndexerController.cs index c4670b34bd..8833021130 100644 --- a/src/Radarr.Api.V3/Indexers/IndexerController.cs +++ b/src/Radarr.Api.V3/Indexers/IndexerController.cs @@ -1,4 +1,5 @@ using NzbDrone.Core.Indexers; +using NzbDrone.Core.Validation; using Radarr.Http; namespace Radarr.Api.V3.Indexers @@ -9,9 +10,10 @@ public class IndexerController : ProviderControllerBase c.DownloadClientId).SetValidator(downloadClientExistsValidator); } } }