From 077b041d3f49cc286f843cd65c7690b323c146e5 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 14 May 2024 18:05:42 +0300 Subject: [PATCH] Fixed: Revert "Validate that folders in paths don't start or end with a space" This reverts commit 0d0575f3a9eb753fe5a9a5e3f46eb7e17dc2ef84. --- .../PathExtensionFixture.cs | 28 +--------------- .../Extensions/PathExtensions.cs | 32 ++----------------- src/Radarr.Api.V3/Movies/MovieController.cs | 2 ++ 3 files changed, 5 insertions(+), 57 deletions(-) diff --git a/src/NzbDrone.Common.Test/PathExtensionFixture.cs b/src/NzbDrone.Common.Test/PathExtensionFixture.cs index d01a5999d..163f3f566 100644 --- a/src/NzbDrone.Common.Test/PathExtensionFixture.cs +++ b/src/NzbDrone.Common.Test/PathExtensionFixture.cs @@ -3,7 +3,6 @@ using FluentAssertions; using Moq; using NUnit.Framework; -using NzbDrone.Common.Disk; using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Extensions; using NzbDrone.Test.Common; @@ -35,7 +34,7 @@ private IAppFolderInfo GetIAppDirectoryInfo() [TestCase(@"\\Testserver\\Test\", @"\\Testserver\Test")] [TestCase(@"\\Testserver\Test\file.ext", @"\\Testserver\Test\file.ext")] [TestCase(@"\\Testserver\Test\file.ext\\", @"\\Testserver\Test\file.ext")] - [TestCase(@"\\Testserver\Test\file.ext ", @"\\Testserver\Test\file.ext")] + [TestCase(@"\\Testserver\Test\file.ext \\", @"\\Testserver\Test\file.ext")] [TestCase(@"//CAPITAL//lower// ", @"\\CAPITAL\lower")] public void Clean_Path_Windows(string dirty, string clean) { @@ -335,30 +334,5 @@ public void GetAncestorFolders_should_return_all_ancestors_in_path_Linux() result[2].Should().Be(@"TV"); result[3].Should().Be(@"Series Title"); } - - [TestCase(@"C:\Test\")] - [TestCase(@"C:\Test")] - [TestCase(@"C:\Test\TV\")] - [TestCase(@"C:\Test\TV")] - public void IsPathValid_should_be_true(string path) - { - path.AsOsAgnostic().IsPathValid(PathValidationType.CurrentOs).Should().BeTrue(); - } - - [TestCase(@"C:\Test \")] - [TestCase(@"C:\Test ")] - [TestCase(@"C:\ Test\")] - [TestCase(@"C:\ Test")] - [TestCase(@"C:\Test \TV")] - [TestCase(@"C:\ Test\TV")] - [TestCase(@"C:\Test \TV\")] - [TestCase(@"C:\ Test\TV\")] - [TestCase(@" C:\Test\TV\")] - [TestCase(@" C:\Test\TV")] - - public void IsPathValid_should_be_false(string path) - { - path.AsOsAgnostic().IsPathValid(PathValidationType.CurrentOs).Should().BeFalse(); - } } } diff --git a/src/NzbDrone.Common/Extensions/PathExtensions.cs b/src/NzbDrone.Common/Extensions/PathExtensions.cs index 1bdab0115..579770b7f 100644 --- a/src/NzbDrone.Common/Extensions/PathExtensions.cs +++ b/src/NzbDrone.Common/Extensions/PathExtensions.cs @@ -30,12 +30,6 @@ public static class PathExtensions public static string CleanFilePath(this string path) { - if (path.IsNotNullOrWhiteSpace()) - { - // Trim trailing spaces before checking if the path is valid so validation doesn't fail for something we can fix. - path = path.TrimEnd(' '); - } - Ensure.That(path, () => path).IsNotNullOrWhiteSpace(); Ensure.That(path, () => path).IsValidPath(PathValidationType.AnyOs); @@ -44,10 +38,10 @@ public static string CleanFilePath(this string path) // UNC if (!info.FullName.Contains('/') && info.FullName.StartsWith(@"\\")) { - return info.FullName.TrimEnd('/', '\\'); + return info.FullName.TrimEnd('/', '\\', ' '); } - return info.FullName.TrimEnd('/').Trim('\\'); + return info.FullName.TrimEnd('/').Trim('\\', ' '); } public static bool PathNotEquals(this string firstPath, string secondPath, StringComparison? comparison = null) @@ -161,23 +155,6 @@ public static bool IsPathValid(this string path, PathValidationType validationTy return false; } - if (path.Trim() != path) - { - return false; - } - - var directoryInfo = new DirectoryInfo(path); - - while (directoryInfo != null) - { - if (directoryInfo.Name.Trim() != directoryInfo.Name) - { - return false; - } - - directoryInfo = directoryInfo.Parent; - } - if (validationType == PathValidationType.AnyOs) { return IsPathValidForWindows(path) || IsPathValidForNonWindows(path); @@ -315,11 +292,6 @@ public static string ProcessNameToExe(this string processName) return processName; } - public static string CleanPath(this string path) - { - return Path.Join(path.Split(Path.DirectorySeparatorChar).Select(s => s.Trim()).ToArray()); - } - public static string GetAppDataPath(this IAppFolderInfo appFolderInfo) { return appFolderInfo.AppDataFolder; diff --git a/src/Radarr.Api.V3/Movies/MovieController.cs b/src/Radarr.Api.V3/Movies/MovieController.cs index 0bd19f6e1..7159a68d0 100644 --- a/src/Radarr.Api.V3/Movies/MovieController.cs +++ b/src/Radarr.Api.V3/Movies/MovieController.cs @@ -107,6 +107,8 @@ public MovieController(IBroadcastSignalRMessage signalRBroadcaster, .When(s => s.Path.IsNullOrWhiteSpace()); PostValidator.RuleFor(s => s.Title).NotEmpty().When(s => s.TmdbId <= 0); PostValidator.RuleFor(s => s.TmdbId).NotNull().NotEmpty().SetValidator(moviesExistsValidator); + + PutValidator.RuleFor(s => s.Path).IsValidPath(); } [HttpGet]