From 6169fc2fa3c063887679857ab1b4b5d038771a9d 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 --- .../DownloadClientExistsValidator.cs | 22 +++++++++++++++++++ .../Indexers/IndexerController.cs | 8 ++++++- 2 files changed, 29 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 000000000..28f571483 --- /dev/null +++ b/src/NzbDrone.Core/Validation/DownloadClientExistsValidator.cs @@ -0,0 +1,22 @@ +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) + { + return context?.PropertyValue == null || _downloadClientFactory.Exists((int)context.PropertyValue); + } + } +} diff --git a/src/Prowlarr.Api.V1/Indexers/IndexerController.cs b/src/Prowlarr.Api.V1/Indexers/IndexerController.cs index bb2ffc782..f64cf535f 100644 --- a/src/Prowlarr.Api.V1/Indexers/IndexerController.cs +++ b/src/Prowlarr.Api.V1/Indexers/IndexerController.cs @@ -7,12 +7,18 @@ namespace Prowlarr.Api.V1.Indexers [V1ApiController] public class IndexerController : ProviderControllerBase { - public IndexerController(IndexerFactory indexerFactory, IndexerResourceMapper resourceMapper, IndexerBulkResourceMapper bulkResourceMapper, AppProfileExistsValidator appProfileExistsValidator) + public IndexerController(IndexerFactory indexerFactory, + IndexerResourceMapper resourceMapper, + IndexerBulkResourceMapper bulkResourceMapper, + AppProfileExistsValidator appProfileExistsValidator, + DownloadClientExistsValidator downloadClientExistsValidator) : base(indexerFactory, "indexer", resourceMapper, bulkResourceMapper) { Http.Validation.RuleBuilderExtensions.ValidId(SharedValidator.RuleFor(s => s.AppProfileId)); + Http.Validation.RuleBuilderExtensions.ValidId(SharedValidator.RuleFor(s => s.DownloadClientId)); SharedValidator.RuleFor(c => c.AppProfileId).SetValidator(appProfileExistsValidator); + SharedValidator.RuleFor(c => c.DownloadClientId).SetValidator(downloadClientExistsValidator); } } }