mirror of
https://github.com/Sonarr/Sonarr.git
synced 2025-01-04 06:38:28 +02:00
Mapped Network Drive Validator
New: Prevent adding Mapped Network Drives when Running as a Windows Services
This commit is contained in:
parent
c43296ffe9
commit
c12f16b6d3
@ -7,16 +7,19 @@ namespace NzbDrone.Api.Config
|
|||||||
{
|
{
|
||||||
public class DownloadClientConfigModule : NzbDroneConfigModule<DownloadClientConfigResource>
|
public class DownloadClientConfigModule : NzbDroneConfigModule<DownloadClientConfigResource>
|
||||||
{
|
{
|
||||||
public DownloadClientConfigModule(IConfigService configService, RootFolderValidator rootFolderValidator, PathExistsValidator pathExistsValidator)
|
public DownloadClientConfigModule(IConfigService configService,
|
||||||
|
RootFolderValidator rootFolderValidator,
|
||||||
|
PathExistsValidator pathExistsValidator,
|
||||||
|
MappedNetworkDriveValidator mappedNetworkDriveValidator)
|
||||||
: base(configService)
|
: base(configService)
|
||||||
{
|
{
|
||||||
SharedValidator.RuleFor(c => c.DownloadedEpisodesFolder)
|
SharedValidator.RuleFor(c => c.DownloadedEpisodesFolder)
|
||||||
.Cascade(CascadeMode.StopOnFirstFailure)
|
.Cascade(CascadeMode.StopOnFirstFailure)
|
||||||
.IsValidPath()
|
.IsValidPath()
|
||||||
.SetValidator(rootFolderValidator)
|
.SetValidator(rootFolderValidator)
|
||||||
|
.SetValidator(mappedNetworkDriveValidator)
|
||||||
.SetValidator(pathExistsValidator)
|
.SetValidator(pathExistsValidator)
|
||||||
.When(c => !String.IsNullOrWhiteSpace(c.DownloadedEpisodesFolder));
|
.When(c => !String.IsNullOrWhiteSpace(c.DownloadedEpisodesFolder));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -11,7 +11,9 @@ public class RemotePathMappingModule : NzbDroneRestModule<RemotePathMappingResou
|
|||||||
{
|
{
|
||||||
private readonly IRemotePathMappingService _remotePathMappingService;
|
private readonly IRemotePathMappingService _remotePathMappingService;
|
||||||
|
|
||||||
public RemotePathMappingModule(IRemotePathMappingService remotePathMappingService, PathExistsValidator pathExistsValidator)
|
public RemotePathMappingModule(IRemotePathMappingService remotePathMappingService,
|
||||||
|
PathExistsValidator pathExistsValidator,
|
||||||
|
MappedNetworkDriveValidator mappedNetworkDriveValidator)
|
||||||
{
|
{
|
||||||
_remotePathMappingService = remotePathMappingService;
|
_remotePathMappingService = remotePathMappingService;
|
||||||
|
|
||||||
@ -31,6 +33,7 @@ public RemotePathMappingModule(IRemotePathMappingService remotePathMappingServic
|
|||||||
SharedValidator.RuleFor(c => c.LocalPath)
|
SharedValidator.RuleFor(c => c.LocalPath)
|
||||||
.Cascade(CascadeMode.StopOnFirstFailure)
|
.Cascade(CascadeMode.StopOnFirstFailure)
|
||||||
.IsValidPath()
|
.IsValidPath()
|
||||||
|
.SetValidator(mappedNetworkDriveValidator)
|
||||||
.SetValidator(pathExistsValidator);
|
.SetValidator(pathExistsValidator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,7 +15,8 @@ public RootFolderModule(IRootFolderService rootFolderService,
|
|||||||
IBroadcastSignalRMessage signalRBroadcaster,
|
IBroadcastSignalRMessage signalRBroadcaster,
|
||||||
RootFolderValidator rootFolderValidator,
|
RootFolderValidator rootFolderValidator,
|
||||||
PathExistsValidator pathExistsValidator,
|
PathExistsValidator pathExistsValidator,
|
||||||
DroneFactoryValidator droneFactoryValidator)
|
DroneFactoryValidator droneFactoryValidator,
|
||||||
|
MappedNetworkDriveValidator mappedNetworkDriveValidator)
|
||||||
: base(signalRBroadcaster)
|
: base(signalRBroadcaster)
|
||||||
{
|
{
|
||||||
_rootFolderService = rootFolderService;
|
_rootFolderService = rootFolderService;
|
||||||
@ -29,8 +30,9 @@ public RootFolderModule(IRootFolderService rootFolderService,
|
|||||||
.Cascade(CascadeMode.StopOnFirstFailure)
|
.Cascade(CascadeMode.StopOnFirstFailure)
|
||||||
.IsValidPath()
|
.IsValidPath()
|
||||||
.SetValidator(rootFolderValidator)
|
.SetValidator(rootFolderValidator)
|
||||||
.SetValidator(pathExistsValidator)
|
.SetValidator(droneFactoryValidator)
|
||||||
.SetValidator(droneFactoryValidator);
|
.SetValidator(mappedNetworkDriveValidator)
|
||||||
|
.SetValidator(pathExistsValidator);
|
||||||
}
|
}
|
||||||
|
|
||||||
private RootFolderResource GetRootFolder(int id)
|
private RootFolderResource GetRootFolder(int id)
|
||||||
|
@ -896,6 +896,7 @@
|
|||||||
<Compile Include="Validation\NzbDroneValidationFailure.cs" />
|
<Compile Include="Validation\NzbDroneValidationFailure.cs" />
|
||||||
<Compile Include="Validation\NzbDroneValidationResult.cs" />
|
<Compile Include="Validation\NzbDroneValidationResult.cs" />
|
||||||
<Compile Include="Validation\NzbDroneValidationState.cs" />
|
<Compile Include="Validation\NzbDroneValidationState.cs" />
|
||||||
|
<Compile Include="Validation\Paths\MappedNetworkDriveValidator.cs" />
|
||||||
<Compile Include="Validation\Paths\DroneFactoryValidator.cs" />
|
<Compile Include="Validation\Paths\DroneFactoryValidator.cs" />
|
||||||
<Compile Include="Validation\Paths\PathExistsValidator.cs" />
|
<Compile Include="Validation\Paths\PathExistsValidator.cs" />
|
||||||
<Compile Include="Validation\Paths\PathValidator.cs" />
|
<Compile Include="Validation\Paths\PathValidator.cs" />
|
||||||
|
@ -0,0 +1,50 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using FluentValidation.Validators;
|
||||||
|
using NzbDrone.Common.Disk;
|
||||||
|
using NzbDrone.Common.EnvironmentInfo;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Validation.Paths
|
||||||
|
{
|
||||||
|
public class MappedNetworkDriveValidator : PropertyValidator
|
||||||
|
{
|
||||||
|
private readonly IRuntimeInfo _runtimeInfo;
|
||||||
|
private readonly IDiskProvider _diskProvider;
|
||||||
|
|
||||||
|
private static readonly Regex DriveRegex = new Regex(@"[a-z]\:\\", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||||
|
|
||||||
|
public MappedNetworkDriveValidator(IRuntimeInfo runtimeInfo, IDiskProvider diskProvider)
|
||||||
|
: base("Mapped Network Drive and Windows Service")
|
||||||
|
{
|
||||||
|
_runtimeInfo = runtimeInfo;
|
||||||
|
_diskProvider = diskProvider;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool IsValid(PropertyValidatorContext context)
|
||||||
|
{
|
||||||
|
if (context.PropertyValue == null) return false;
|
||||||
|
if (OsInfo.IsNotWindows) return true;
|
||||||
|
if (!_runtimeInfo.IsWindowsService) return true;
|
||||||
|
|
||||||
|
var path = context.PropertyValue.ToString();
|
||||||
|
|
||||||
|
if (!DriveRegex.IsMatch(path)) return true;
|
||||||
|
|
||||||
|
var drives = _diskProvider.GetDrives();
|
||||||
|
|
||||||
|
foreach (var drive in drives)
|
||||||
|
{
|
||||||
|
if (path.StartsWith(drive.Name, StringComparison.InvariantCultureIgnoreCase))
|
||||||
|
{
|
||||||
|
if (drive.DriveType == DriveType.Network)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user