Skip to content

Commit

Permalink
New: Add Validations for Recycle Bin Folder
Browse files Browse the repository at this point in the history
  • Loading branch information
Qstick committed Mar 24, 2022
1 parent cbdc2c5 commit 482fe04
Show file tree
Hide file tree
Showing 6 changed files with 96 additions and 2 deletions.
2 changes: 2 additions & 0 deletions src/NzbDrone.Core/Books/Utilities/AddAuthorValidator.cs
Expand Up @@ -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,
Expand All @@ -21,6 +22,7 @@ public class AddAuthorValidator : AbstractValidator<Author>, IAddAuthorValidator
RuleFor(c => c.Path).Cascade(CascadeMode.StopOnFirstFailure)
.IsValidPath()
.SetValidator(rootFolderValidator)
.SetValidator(recycleBinValidator)
.SetValidator(authorPathValidator)
.SetValidator(authorAncestorValidator);

Expand Down
44 changes: 44 additions & 0 deletions src/NzbDrone.Core/Validation/Paths/RecycleBinValidator.cs
@@ -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;
}
}
}
28 changes: 28 additions & 0 deletions src/NzbDrone.Core/Validation/Paths/RootFolderAncestorValidator.cs
@@ -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));
}
}
}
2 changes: 2 additions & 0 deletions src/Readarr.Api.V1/Author/AuthorController.cs
Expand Up @@ -51,6 +51,7 @@ public class AuthorController : RestControllerWithSignalR<AuthorResource, NzbDro
IMapCoversToLocal coverMapper,
IManageCommandQueue commandQueueManager,
IRootFolderService rootFolderService,
RecycleBinValidator recycleBinValidator,
RootFolderValidator rootFolderValidator,
MappedNetworkDriveValidator mappedNetworkDriveValidator,
AuthorPathValidator authorPathValidator,
Expand Down Expand Up @@ -80,6 +81,7 @@ public class AuthorController : RestControllerWithSignalR<AuthorResource, NzbDro
.SetValidator(mappedNetworkDriveValidator)
.SetValidator(authorPathValidator)
.SetValidator(authorAncestorValidator)
.SetValidator(recycleBinValidator)
.SetValidator(systemFolderValidator)
.When(s => !s.Path.IsNullOrWhiteSpace());

Expand Down
20 changes: 18 additions & 2 deletions src/Readarr.Api.V1/Config/MediaManagementConfigController.cs
Expand Up @@ -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);
}

Expand Down
2 changes: 2 additions & 0 deletions src/Readarr.Api.V1/RootFolders/RootFolderController.cs
Expand Up @@ -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,
Expand All @@ -43,6 +44,7 @@ public class RootFolderController : RestControllerWithSignalR<RootFolderResource
.IsValidPath()
.SetValidator(mappedNetworkDriveValidator)
.SetValidator(startupFolderValidator)
.SetValidator(recycleBinValidator)
.SetValidator(pathExistsValidator)
.SetValidator(systemFolderValidator)
.SetValidator(folderWritableValidator);
Expand Down

0 comments on commit 482fe04

Please sign in to comment.