mirror of
https://github.com/Readarr/Readarr
synced 2025-12-29 03:34:35 +01:00
New: Add Validations for Recycle Bin Folder
This commit is contained in:
parent
cbdc2c51c4
commit
482fe04161
6 changed files with 96 additions and 2 deletions
|
|
@ -13,6 +13,7 @@ public interface IAddAuthorValidator
|
|||
public class AddAuthorValidator : AbstractValidator<Author>, IAddAuthorValidator
|
||||
{
|
||||
public AddAuthorValidator(RootFolderValidator rootFolderValidator,
|
||||
RecycleBinValidator recycleBinValidator,
|
||||
AuthorPathValidator authorPathValidator,
|
||||
AuthorAncestorValidator authorAncestorValidator,
|
||||
QualityProfileExistsValidator qualityProfileExistsValidator,
|
||||
|
|
@ -21,6 +22,7 @@ public AddAuthorValidator(RootFolderValidator rootFolderValidator,
|
|||
RuleFor(c => c.Path).Cascade(CascadeMode.StopOnFirstFailure)
|
||||
.IsValidPath()
|
||||
.SetValidator(rootFolderValidator)
|
||||
.SetValidator(recycleBinValidator)
|
||||
.SetValidator(authorPathValidator)
|
||||
.SetValidator(authorAncestorValidator);
|
||||
|
||||
|
|
|
|||
44
src/NzbDrone.Core/Validation/Paths/RecycleBinValidator.cs
Normal file
44
src/NzbDrone.Core/Validation/Paths/RecycleBinValidator.cs
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
using FluentValidation.Validators;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Configuration;
|
||||
|
||||
namespace NzbDrone.Core.Validation.Paths
|
||||
{
|
||||
public class RecycleBinValidator : PropertyValidator
|
||||
{
|
||||
private readonly IConfigService _configService;
|
||||
|
||||
public RecycleBinValidator(IConfigService configService)
|
||||
: base("Path is {relationship} configured recycle bin folder")
|
||||
{
|
||||
_configService = configService;
|
||||
}
|
||||
|
||||
protected override bool IsValid(PropertyValidatorContext context)
|
||||
{
|
||||
var recycleBin = _configService.RecycleBin;
|
||||
var folder = context.PropertyValue.ToString();
|
||||
|
||||
if (context.PropertyValue == null || recycleBin.IsNullOrWhiteSpace())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (recycleBin.PathEquals(folder))
|
||||
{
|
||||
context.MessageFormatter.AppendArgument("relationship", "set to");
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if (recycleBin.IsParentPath(folder))
|
||||
{
|
||||
context.MessageFormatter.AppendArgument("relationship", "child of");
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
using System.Linq;
|
||||
using FluentValidation.Validators;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.RootFolders;
|
||||
|
||||
namespace NzbDrone.Core.Validation.Paths
|
||||
{
|
||||
public class RootFolderAncestorValidator : PropertyValidator
|
||||
{
|
||||
private readonly IRootFolderService _rootFolderService;
|
||||
|
||||
public RootFolderAncestorValidator(IRootFolderService rootFolderService)
|
||||
: base("Path is an ancestor of an existing root folder")
|
||||
{
|
||||
_rootFolderService = rootFolderService;
|
||||
}
|
||||
|
||||
protected override bool IsValid(PropertyValidatorContext context)
|
||||
{
|
||||
if (context.PropertyValue == null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return !_rootFolderService.All().Any(s => context.PropertyValue.ToString().IsParentPath(s.Path));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -51,6 +51,7 @@ public AuthorController(IBroadcastSignalRMessage signalRBroadcaster,
|
|||
IMapCoversToLocal coverMapper,
|
||||
IManageCommandQueue commandQueueManager,
|
||||
IRootFolderService rootFolderService,
|
||||
RecycleBinValidator recycleBinValidator,
|
||||
RootFolderValidator rootFolderValidator,
|
||||
MappedNetworkDriveValidator mappedNetworkDriveValidator,
|
||||
AuthorPathValidator authorPathValidator,
|
||||
|
|
@ -80,6 +81,7 @@ public AuthorController(IBroadcastSignalRMessage signalRBroadcaster,
|
|||
.SetValidator(mappedNetworkDriveValidator)
|
||||
.SetValidator(authorPathValidator)
|
||||
.SetValidator(authorAncestorValidator)
|
||||
.SetValidator(recycleBinValidator)
|
||||
.SetValidator(systemFolderValidator)
|
||||
.When(s => !s.Path.IsNullOrWhiteSpace());
|
||||
|
||||
|
|
|
|||
|
|
@ -10,12 +10,28 @@ namespace Readarr.Api.V1.Config
|
|||
[V1ApiController("config/mediamanagement")]
|
||||
public class MediaManagementConfigController : ConfigController<MediaManagementConfigResource>
|
||||
{
|
||||
public MediaManagementConfigController(IConfigService configService, PathExistsValidator pathExistsValidator, FolderChmodValidator folderChmodValidator)
|
||||
public MediaManagementConfigController(IConfigService configService,
|
||||
PathExistsValidator pathExistsValidator,
|
||||
FolderChmodValidator folderChmodValidator,
|
||||
FolderWritableValidator folderWritableValidator,
|
||||
AuthorPathValidator authorPathValidator,
|
||||
StartupFolderValidator startupFolderValidator,
|
||||
SystemFolderValidator systemFolderValidator,
|
||||
RootFolderAncestorValidator rootFolderAncestorValidator,
|
||||
RootFolderValidator rootFolderValidator)
|
||||
: base(configService)
|
||||
{
|
||||
SharedValidator.RuleFor(c => c.RecycleBin).IsValidPath()
|
||||
.SetValidator(folderWritableValidator)
|
||||
.SetValidator(rootFolderValidator)
|
||||
.SetValidator(pathExistsValidator)
|
||||
.SetValidator(authorPathValidator)
|
||||
.SetValidator(rootFolderAncestorValidator)
|
||||
.SetValidator(startupFolderValidator)
|
||||
.SetValidator(systemFolderValidator)
|
||||
.When(c => !string.IsNullOrWhiteSpace(c.RecycleBin));
|
||||
SharedValidator.RuleFor(c => c.RecycleBinCleanupDays).GreaterThanOrEqualTo(0);
|
||||
SharedValidator.RuleFor(c => c.ChmodFolder).SetValidator(folderChmodValidator).When(c => !string.IsNullOrEmpty(c.ChmodFolder) && (OsInfo.IsLinux || OsInfo.IsOsx));
|
||||
SharedValidator.RuleFor(c => c.RecycleBin).IsValidPath().SetValidator(pathExistsValidator).When(c => !string.IsNullOrWhiteSpace(c.RecycleBin));
|
||||
SharedValidator.RuleFor(c => c.MinimumFreeSpaceWhenImporting).GreaterThanOrEqualTo(100);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ public class RootFolderController : RestControllerWithSignalR<RootFolderResource
|
|||
public RootFolderController(IRootFolderService rootFolderService,
|
||||
ICalibreProxy calibreProxy,
|
||||
IBroadcastSignalRMessage signalRBroadcaster,
|
||||
RecycleBinValidator recycleBinValidator,
|
||||
RootFolderValidator rootFolderValidator,
|
||||
PathExistsValidator pathExistsValidator,
|
||||
MappedNetworkDriveValidator mappedNetworkDriveValidator,
|
||||
|
|
@ -43,6 +44,7 @@ public RootFolderController(IRootFolderService rootFolderService,
|
|||
.IsValidPath()
|
||||
.SetValidator(mappedNetworkDriveValidator)
|
||||
.SetValidator(startupFolderValidator)
|
||||
.SetValidator(recycleBinValidator)
|
||||
.SetValidator(pathExistsValidator)
|
||||
.SetValidator(systemFolderValidator)
|
||||
.SetValidator(folderWritableValidator);
|
||||
|
|
|
|||
Loading…
Reference in a new issue