From d73eb1b5f903ea0e29e22c5fd800ac875be5329d Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sat, 29 Jul 2023 04:35:27 +0300 Subject: [PATCH] Validation for Custom Format specifications Co-authored-by: Qstick (cherry picked from commit 3d6cf24d7c91f8ff697c34264c249f7450894106) Closes #2726 --- .../CustomFormats/CustomFormatController.cs | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/Readarr.Api.V1/CustomFormats/CustomFormatController.cs b/src/Readarr.Api.V1/CustomFormats/CustomFormatController.cs index 3828caba1..ad7bf86d3 100644 --- a/src/Readarr.Api.V1/CustomFormats/CustomFormatController.cs +++ b/src/Readarr.Api.V1/CustomFormats/CustomFormatController.cs @@ -1,9 +1,11 @@ using System.Collections.Generic; using System.Linq; using FluentValidation; +using FluentValidation.Results; using Microsoft.AspNetCore.Mvc; using NzbDrone.Common.Extensions; using NzbDrone.Core.CustomFormats; +using NzbDrone.Core.Validation; using NzbDrone.Http.REST.Attributes; using Readarr.Http; using Readarr.Http.REST; @@ -50,6 +52,9 @@ namespace Readarr.Api.V1.CustomFormats public ActionResult Create(CustomFormatResource customFormatResource) { var model = customFormatResource.ToModel(_specifications); + + Validate(model); + return Created(_formatService.Insert(model).Id); } @@ -58,6 +63,9 @@ namespace Readarr.Api.V1.CustomFormats public ActionResult Update(CustomFormatResource resource) { var model = resource.ToModel(_specifications); + + Validate(model); + _formatService.Update(model); return Accepted(model.Id); @@ -91,6 +99,24 @@ namespace Readarr.Api.V1.CustomFormats return schema; } + private void Validate(CustomFormat definition) + { + foreach (var validationResult in definition.Specifications.Select(spec => spec.Validate())) + { + VerifyValidationResult(validationResult); + } + } + + private void VerifyValidationResult(ValidationResult validationResult) + { + var result = new NzbDroneValidationResult(validationResult.Errors); + + if (!result.IsValid) + { + throw new ValidationException(result.Errors); + } + } + private IEnumerable GetPresets() { yield return new ReleaseTitleSpecification