New: Add Validations for Recycle Bin Folder

[common]
This commit is contained in:
Qstick 2020-12-07 22:39:52 -05:00
parent 003686d68f
commit fd4fb88ce1
10 changed files with 124 additions and 8 deletions

View File

@ -8,11 +8,27 @@ namespace NzbDrone.Api.Config
{ {
public class MediaManagementConfigModule : NzbDroneConfigModule<MediaManagementConfigResource> public class MediaManagementConfigModule : NzbDroneConfigModule<MediaManagementConfigResource>
{ {
public MediaManagementConfigModule(IConfigService configService, PathExistsValidator pathExistsValidator, FolderChmodValidator folderChmodValidator) public MediaManagementConfigModule(IConfigService configService,
PathExistsValidator pathExistsValidator,
FolderChmodValidator folderChmodValidator,
FolderWritableValidator folderWritableValidator,
MoviePathValidator moviePathValidator,
StartupFolderValidator startupFolderValidator,
SystemFolderValidator systemFolderValidator,
RootFolderAncestorValidator rootFolderAncestorValidator,
RootFolderValidator rootFolderValidator)
: base(configService) : base(configService)
{ {
SharedValidator.RuleFor(c => c.ChmodFolder).SetValidator(folderChmodValidator).When(c => !string.IsNullOrEmpty(c.ChmodFolder) && PlatformInfo.IsMono); SharedValidator.RuleFor(c => c.ChmodFolder).SetValidator(folderChmodValidator).When(c => !string.IsNullOrEmpty(c.ChmodFolder) && PlatformInfo.IsMono);
SharedValidator.RuleFor(c => c.RecycleBin).IsValidPath().SetValidator(pathExistsValidator).When(c => !string.IsNullOrWhiteSpace(c.RecycleBin)); SharedValidator.RuleFor(c => c.RecycleBin).IsValidPath()
.SetValidator(folderWritableValidator)
.SetValidator(rootFolderValidator)
.SetValidator(pathExistsValidator)
.SetValidator(moviePathValidator)
.SetValidator(rootFolderAncestorValidator)
.SetValidator(startupFolderValidator)
.SetValidator(systemFolderValidator)
.When(c => !string.IsNullOrWhiteSpace(c.RecycleBin));
} }
protected override MediaManagementConfigResource ToResource(IConfigService model) protected override MediaManagementConfigResource ToResource(IConfigService model)

View File

@ -37,6 +37,7 @@ namespace NzbDrone.Api.Movies
IAddMovieService addMovieService, IAddMovieService addMovieService,
IMapCoversToLocal coverMapper, IMapCoversToLocal coverMapper,
RootFolderValidator rootFolderValidator, RootFolderValidator rootFolderValidator,
RecycleBinValidator recycleBinValidator,
MappedNetworkDriveValidator mappedNetworkDriveValidator, MappedNetworkDriveValidator mappedNetworkDriveValidator,
MoviePathValidator moviesPathValidator, MoviePathValidator moviesPathValidator,
MovieExistsValidator moviesExistsValidator, MovieExistsValidator moviesExistsValidator,
@ -66,6 +67,7 @@ namespace NzbDrone.Api.Movies
.SetValidator(mappedNetworkDriveValidator) .SetValidator(mappedNetworkDriveValidator)
.SetValidator(moviesPathValidator) .SetValidator(moviesPathValidator)
.SetValidator(moviesAncestorValidator) .SetValidator(moviesAncestorValidator)
.SetValidator(recycleBinValidator)
.SetValidator(systemFolderValidator) .SetValidator(systemFolderValidator)
.When(s => !s.Path.IsNullOrWhiteSpace()); .When(s => !s.Path.IsNullOrWhiteSpace());

View File

@ -16,6 +16,7 @@ namespace NzbDrone.Api.RootFolders
RootFolderValidator rootFolderValidator, RootFolderValidator rootFolderValidator,
PathExistsValidator pathExistsValidator, PathExistsValidator pathExistsValidator,
MappedNetworkDriveValidator mappedNetworkDriveValidator, MappedNetworkDriveValidator mappedNetworkDriveValidator,
RecycleBinValidator recycleBinValidator,
StartupFolderValidator startupFolderValidator, StartupFolderValidator startupFolderValidator,
SystemFolderValidator systemFolderValidator, SystemFolderValidator systemFolderValidator,
FolderWritableValidator folderWritableValidator) FolderWritableValidator folderWritableValidator)
@ -34,6 +35,7 @@ namespace NzbDrone.Api.RootFolders
.SetValidator(rootFolderValidator) .SetValidator(rootFolderValidator)
.SetValidator(mappedNetworkDriveValidator) .SetValidator(mappedNetworkDriveValidator)
.SetValidator(startupFolderValidator) .SetValidator(startupFolderValidator)
.SetValidator(recycleBinValidator)
.SetValidator(pathExistsValidator) .SetValidator(pathExistsValidator)
.SetValidator(systemFolderValidator) .SetValidator(systemFolderValidator)
.SetValidator(folderWritableValidator); .SetValidator(folderWritableValidator);

View File

@ -12,13 +12,15 @@ namespace NzbDrone.Core.Movies
public class AddMovieValidator : AbstractValidator<Movie>, IAddMovieValidator public class AddMovieValidator : AbstractValidator<Movie>, IAddMovieValidator
{ {
public AddMovieValidator(RootFolderValidator rootFolderValidator, public AddMovieValidator(RootFolderValidator rootFolderValidator,
MoviePathValidator moviePathValidator, RecycleBinValidator recycleBinValidator,
MovieAncestorValidator movieAncestorValidator, MoviePathValidator moviePathValidator,
MovieTitleSlugValidator movieTitleSlugValidator) MovieAncestorValidator movieAncestorValidator,
MovieTitleSlugValidator movieTitleSlugValidator)
{ {
RuleFor(c => c.Path).Cascade(CascadeMode.StopOnFirstFailure) RuleFor(c => c.Path).Cascade(CascadeMode.StopOnFirstFailure)
.IsValidPath() .IsValidPath()
.SetValidator(rootFolderValidator) .SetValidator(rootFolderValidator)
.SetValidator(recycleBinValidator)
.SetValidator(moviePathValidator) .SetValidator(moviePathValidator)
.SetValidator(movieAncestorValidator); .SetValidator(movieAncestorValidator);

View File

@ -10,7 +10,7 @@ namespace NzbDrone.Core.Validation.Paths
private readonly IMovieService _moviesService; private readonly IMovieService _moviesService;
public MoviePathValidator(IMovieService moviesService) public MoviePathValidator(IMovieService moviesService)
: base("Path is already configured for another movie: {moviePath}") : base("Path is already configured for an existing movie: {moviePath}")
{ {
_moviesService = moviesService; _moviesService = moviesService;
} }

View 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;
}
}
}

View File

@ -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));
}
}
}

View File

@ -8,12 +8,30 @@ namespace Radarr.Api.V3.Config
{ {
public class MediaManagementConfigModule : RadarrConfigModule<MediaManagementConfigResource> public class MediaManagementConfigModule : RadarrConfigModule<MediaManagementConfigResource>
{ {
public MediaManagementConfigModule(IConfigService configService, PathExistsValidator pathExistsValidator, FolderChmodValidator folderChmodValidator) public MediaManagementConfigModule(IConfigService configService,
PathExistsValidator pathExistsValidator,
FolderChmodValidator folderChmodValidator,
FolderWritableValidator folderWritableValidator,
MoviePathValidator moviePathValidator,
StartupFolderValidator startupFolderValidator,
SystemFolderValidator systemFolderValidator,
RootFolderAncestorValidator rootFolderAncestorValidator,
RootFolderValidator rootFolderValidator)
: base(configService) : base(configService)
{ {
SharedValidator.RuleFor(c => c.RecycleBinCleanupDays).GreaterThanOrEqualTo(0); 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.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.RecycleBin).IsValidPath()
.SetValidator(folderWritableValidator)
.SetValidator(rootFolderValidator)
.SetValidator(pathExistsValidator)
.SetValidator(rootFolderAncestorValidator)
.SetValidator(startupFolderValidator)
.SetValidator(systemFolderValidator)
.SetValidator(moviePathValidator)
.When(c => !string.IsNullOrWhiteSpace(c.RecycleBin));
SharedValidator.RuleFor(c => c.MinimumFreeSpaceWhenImporting).GreaterThanOrEqualTo(100); SharedValidator.RuleFor(c => c.MinimumFreeSpaceWhenImporting).GreaterThanOrEqualTo(100);
} }

View File

@ -56,6 +56,7 @@ namespace Radarr.Api.V3.Movies
MoviePathValidator moviesPathValidator, MoviePathValidator moviesPathValidator,
MovieExistsValidator moviesExistsValidator, MovieExistsValidator moviesExistsValidator,
MovieAncestorValidator moviesAncestorValidator, MovieAncestorValidator moviesAncestorValidator,
RecycleBinValidator recycleBinValidator,
SystemFolderValidator systemFolderValidator, SystemFolderValidator systemFolderValidator,
ProfileExistsValidator profileExistsValidator, ProfileExistsValidator profileExistsValidator,
MovieFolderAsRootFolderValidator movieFolderAsRootFolderValidator) MovieFolderAsRootFolderValidator movieFolderAsRootFolderValidator)
@ -84,6 +85,7 @@ namespace Radarr.Api.V3.Movies
.SetValidator(mappedNetworkDriveValidator) .SetValidator(mappedNetworkDriveValidator)
.SetValidator(moviesPathValidator) .SetValidator(moviesPathValidator)
.SetValidator(moviesAncestorValidator) .SetValidator(moviesAncestorValidator)
.SetValidator(recycleBinValidator)
.SetValidator(systemFolderValidator) .SetValidator(systemFolderValidator)
.When(s => !s.Path.IsNullOrWhiteSpace()); .When(s => !s.Path.IsNullOrWhiteSpace());

View File

@ -17,6 +17,7 @@ namespace Radarr.Api.V3.RootFolders
RootFolderValidator rootFolderValidator, RootFolderValidator rootFolderValidator,
PathExistsValidator pathExistsValidator, PathExistsValidator pathExistsValidator,
MappedNetworkDriveValidator mappedNetworkDriveValidator, MappedNetworkDriveValidator mappedNetworkDriveValidator,
RecycleBinValidator recycleBinValidator,
StartupFolderValidator startupFolderValidator, StartupFolderValidator startupFolderValidator,
SystemFolderValidator systemFolderValidator, SystemFolderValidator systemFolderValidator,
FolderWritableValidator folderWritableValidator) FolderWritableValidator folderWritableValidator)
@ -35,6 +36,7 @@ namespace Radarr.Api.V3.RootFolders
.SetValidator(rootFolderValidator) .SetValidator(rootFolderValidator)
.SetValidator(mappedNetworkDriveValidator) .SetValidator(mappedNetworkDriveValidator)
.SetValidator(startupFolderValidator) .SetValidator(startupFolderValidator)
.SetValidator(recycleBinValidator)
.SetValidator(pathExistsValidator) .SetValidator(pathExistsValidator)
.SetValidator(systemFolderValidator) .SetValidator(systemFolderValidator)
.SetValidator(folderWritableValidator); .SetValidator(folderWritableValidator);