From 993903b4e7a81c838a40d83a6cd9d241a1d9269f Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Sat, 4 Oct 2025 13:52:37 +0200 Subject: [PATCH 01/17] Add MoveFile it IFileSystem and implement on file systems. --- src/Umbraco.Core/IO/IFileSystem.cs | 36 ++++++++++++- src/Umbraco.Core/IO/PhysicalFileSystem.cs | 39 +++++++++++--- src/Umbraco.Core/IO/ShadowFileSystem.cs | 54 +++++++++++++++++++ src/Umbraco.Core/IO/ShadowWrapper.cs | 2 + .../Umbraco.Core/IO/ShadowFileSystemTests.cs | 46 +++++++++++++++- .../IO/PhysicalFileSystemTests.cs | 19 ++++++- 6 files changed, 184 insertions(+), 12 deletions(-) diff --git a/src/Umbraco.Core/IO/IFileSystem.cs b/src/Umbraco.Core/IO/IFileSystem.cs index da9dd0b9bba4..390556f74e59 100644 --- a/src/Umbraco.Core/IO/IFileSystem.cs +++ b/src/Umbraco.Core/IO/IFileSystem.cs @@ -168,10 +168,42 @@ public interface IFileSystem /// A value indicating whether to move (default) or copy. void AddFile(string path, string physicalPath, bool overrideIfExists = true, bool copy = false); + /// + /// Moves a file from the specified source path to the specified target path. + /// + /// The path of the file or directory to move. + /// The destination path where the file or directory will be moved. + /// A value indicating what to do if the file already exists. + void MoveFile(string source, string target, bool overrideIfExists = true) + { + // Provide a default implementation for implementations of IFileSystem that do not implement this method. + if (FileExists(source) is false) + { + throw new FileNotFoundException($"File at path '{source}' could not be found."); + } + + if (FileExists(target)) + { + if (overrideIfExists) + { + DeleteFile(target); + } + else + { + throw new IOException($"A file at path '{target}' already exists."); + } + } + + using (Stream sourceStream = OpenFile(source)) + { + AddFile(target, sourceStream); + } + + DeleteFile(source); + } + // TODO: implement these // // void CreateDirectory(string path); // - //// move or rename, directory or file - // void Move(string source, string target); } diff --git a/src/Umbraco.Core/IO/PhysicalFileSystem.cs b/src/Umbraco.Core/IO/PhysicalFileSystem.cs index 32f0d0fdabcc..9c21d056db04 100644 --- a/src/Umbraco.Core/IO/PhysicalFileSystem.cs +++ b/src/Umbraco.Core/IO/PhysicalFileSystem.cs @@ -428,13 +428,9 @@ public void AddFile(string path, string physicalPath, bool overrideIfExists = tr WithRetry(() => File.Delete(fullPath)); } - var directory = Path.GetDirectoryName(fullPath); - if (directory == null) - { - throw new InvalidOperationException("Could not get directory."); - } - - Directory.CreateDirectory(directory); // ensure it exists + // Ensure the directory exists. + var directory = Path.GetDirectoryName(fullPath) ?? throw new InvalidOperationException("Could not get directory."); + Directory.CreateDirectory(directory); if (copy) { @@ -446,6 +442,35 @@ public void AddFile(string path, string physicalPath, bool overrideIfExists = tr } } + /// + public void MoveFile(string source, string target, bool overrideIfExists = true) + { + var fullSourcePath = GetFullPath(source); + if (File.Exists(fullSourcePath) is false) + { + throw new FileNotFoundException($"File at path '{source}' could not be found."); + } + + var fullTargetPath = GetFullPath(target); + if (File.Exists(fullTargetPath)) + { + if (overrideIfExists) + { + DeleteFile(target); + } + else + { + throw new IOException($"A file at path '{target}' already exists."); + } + } + + // Ensure the directory exists. + var directory = Path.GetDirectoryName(fullTargetPath) ?? throw new InvalidOperationException("Could not get directory."); + Directory.CreateDirectory(directory); + + WithRetry(() => File.Move(fullSourcePath, fullTargetPath)); + } + #region Helper Methods protected virtual void EnsureDirectory(string path) diff --git a/src/Umbraco.Core/IO/ShadowFileSystem.cs b/src/Umbraco.Core/IO/ShadowFileSystem.cs index 31e884454f7b..cc4de4cb60b2 100644 --- a/src/Umbraco.Core/IO/ShadowFileSystem.cs +++ b/src/Umbraco.Core/IO/ShadowFileSystem.cs @@ -167,6 +167,60 @@ public void DeleteFile(string path) Nodes[NormPath(path)] = new ShadowNode(true, false); } + public void MoveFile(string source, string target, bool overrideIfExists = true) + { + var normSource = NormPath(source); + var normTarget = NormPath(target); + if (Nodes.TryGetValue(normSource, out ShadowNode? sf) == false || sf.IsDir || sf.IsDelete) + { + if (Inner.FileExists(source) == false) + { + throw new FileNotFoundException("Source file does not exist."); + } + } + + if (Nodes.TryGetValue(normTarget, out ShadowNode? tf) && tf.IsExist && (tf.IsDir || overrideIfExists == false)) + { + throw new IOException(string.Format("A file at path '{0}' already exists", target)); + } + + var parts = normTarget.Split(Constants.CharArrays.ForwardSlash); + for (var i = 0; i < parts.Length - 1; i++) + { + var dirPath = string.Join("/", parts.Take(i + 1)); + if (Nodes.TryGetValue(dirPath, out ShadowNode? sd)) + { + if (sd.IsFile) + { + throw new InvalidOperationException("Invalid path."); + } + + if (sd.IsDelete) + { + Nodes[dirPath] = new ShadowNode(false, true); + } + } + else + { + if (Inner.DirectoryExists(dirPath)) + { + continue; + } + + if (Inner.FileExists(dirPath)) + { + throw new InvalidOperationException("Invalid path."); + } + + Nodes[dirPath] = new ShadowNode(false, true); + } + } + + _sfs.MoveFile(normSource, normTarget, overrideIfExists); + Nodes[normSource] = new ShadowNode(true, false); + Nodes[normTarget] = new ShadowNode(false, false); + } + public bool FileExists(string path) { if (Nodes.TryGetValue(NormPath(path), out ShadowNode? sf)) diff --git a/src/Umbraco.Core/IO/ShadowWrapper.cs b/src/Umbraco.Core/IO/ShadowWrapper.cs index aa3d7c9b971e..9f4abc916085 100644 --- a/src/Umbraco.Core/IO/ShadowWrapper.cs +++ b/src/Umbraco.Core/IO/ShadowWrapper.cs @@ -81,6 +81,8 @@ private IFileSystem FileSystem public void DeleteFile(string path) => FileSystem.DeleteFile(path); + public void MoveFile(string source, string target) => FileSystem.MoveFile(source, target); + public bool FileExists(string path) => FileSystem.FileExists(path); public string GetRelativePath(string fullPathOrUrl) => FileSystem.GetRelativePath(fullPathOrUrl); diff --git a/tests/Umbraco.Tests.Integration/Umbraco.Core/IO/ShadowFileSystemTests.cs b/tests/Umbraco.Tests.Integration/Umbraco.Core/IO/ShadowFileSystemTests.cs index e994e888662d..c3932fabb390 100644 --- a/tests/Umbraco.Tests.Integration/Umbraco.Core/IO/ShadowFileSystemTests.cs +++ b/tests/Umbraco.Tests.Integration/Umbraco.Core/IO/ShadowFileSystemTests.cs @@ -38,8 +38,7 @@ private void ClearFiles(IHostingEnvironment hostingEnvironment) { TestHelper.DeleteDirectory(hostingEnvironment.MapPathContentRoot("FileSysTests")); TestHelper.DeleteDirectory( - hostingEnvironment.MapPathContentRoot(Constants.SystemDirectories.TempData.EnsureEndsWith('/') + - "ShadowFs")); + hostingEnvironment.MapPathContentRoot(Constants.SystemDirectories.TempData.EnsureEndsWith('/') + "ShadowFs")); } private static string NormPath(string path) => path.Replace('\\', Path.AltDirectorySeparatorChar); @@ -166,6 +165,49 @@ public void ShadowDeleteFile() Assert.IsTrue(files.Contains("f2.txt")); } + [Test] + public void ShadowMoveFile() + { + var path = HostingEnvironment.MapPathContentRoot("FileSysTests"); + Directory.CreateDirectory(path); + Directory.CreateDirectory(path + "/ShadowTests"); + Directory.CreateDirectory(path + "/ShadowSystem"); + + var fs = new PhysicalFileSystem(IOHelper, HostingEnvironment, Logger, path + "/ShadowTests/", "ignore"); + var sfs = new PhysicalFileSystem(IOHelper, HostingEnvironment, Logger, path + "/ShadowSystem/", "ignore"); + var ss = new ShadowFileSystem(fs, sfs); + + File.WriteAllText(path + "/ShadowTests/f1.txt", "foo"); + using (var ms = new MemoryStream(Encoding.UTF8.GetBytes("foo"))) + { + ss.AddFile("f1.txt", ms); + } + + var files = fs.GetFiles(string.Empty); + Assert.AreEqual(1, files.Count()); + Assert.IsTrue(files.Contains("f1.txt")); + + files = ss.GetFiles(string.Empty); + Assert.AreEqual(1, files.Count()); + Assert.IsTrue(files.Contains("f1.txt")); + + var dirs = ss.GetDirectories(string.Empty); + Assert.AreEqual(0, dirs.Count()); + + ss.MoveFile("f1.txt", "f2.txt"); + + Assert.IsTrue(File.Exists(path + "/ShadowTests/f1.txt")); + Assert.IsFalse(File.Exists(path + "/ShadowTests/f2.txt")); + Assert.IsTrue(fs.FileExists("f1.txt")); + Assert.IsFalse(fs.FileExists("f2.txt")); + Assert.IsFalse(ss.FileExists("f1.txt")); + Assert.IsTrue(ss.FileExists("f2.txt")); + + files = ss.GetFiles(string.Empty); + Assert.AreEqual(1, files.Count()); + Assert.IsTrue(files.Contains("f2.txt")); + } + [Test] public void ShadowDeleteFileInDir() { diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/IO/PhysicalFileSystemTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/IO/PhysicalFileSystemTests.cs index 396ad944154c..fcd922a43824 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/IO/PhysicalFileSystemTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/IO/PhysicalFileSystemTests.cs @@ -1,7 +1,6 @@ // Copyright (c) Umbraco. // See LICENSE for more details. -using System.IO; using System.Text; using Microsoft.Extensions.Logging; using Moq; @@ -82,6 +81,24 @@ public void SaveFileTest() }); } + [Test] + public void MoveFileTest() + { + var basePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "FileSysTests"); + + using (var ms = new MemoryStream(Encoding.UTF8.GetBytes("foo"))) + { + _fileSystem.AddFile("sub/f3.txt", ms); + } + + Assert.IsTrue(File.Exists(Path.Combine(basePath, "sub/f3.txt"))); + + _fileSystem.MoveFile("sub/f3.txt", "sub2/f4.txt"); + + Assert.IsFalse(File.Exists(Path.Combine(basePath, "sub/f3.txt"))); + Assert.IsTrue(File.Exists(Path.Combine(basePath, "sub2/f4.txt"))); + } + [Test] public void GetFullPathTest() { From 81a59d1e129d12e2adec0c5c28cca678d142c3ad Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Sat, 4 Oct 2025 14:14:33 +0200 Subject: [PATCH 02/17] Rename media file on move to recycle bin. --- src/Umbraco.Core/IO/MediaFileManager.cs | 47 ++++++++++++++----- .../UmbracoBuilder.CoreServices.cs | 2 + .../ImageCropperPropertyEditor.cs | 20 +++++++- ...UploadContentDeletedNotificationHandler.cs | 16 ++++++- .../Umbraco.Core/IO/FileSystemsTests.cs | 19 ++++++++ 5 files changed, 90 insertions(+), 14 deletions(-) diff --git a/src/Umbraco.Core/IO/MediaFileManager.cs b/src/Umbraco.Core/IO/MediaFileManager.cs index fe9f829567b9..c2b7f41538d6 100644 --- a/src/Umbraco.Core/IO/MediaFileManager.cs +++ b/src/Umbraco.Core/IO/MediaFileManager.cs @@ -1,7 +1,5 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; -using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.PropertyEditors; using Umbraco.Cms.Core.Strings; @@ -40,7 +38,40 @@ public MediaFileManager( /// Delete media files. /// /// Files to delete (filesystem-relative paths). - public void DeleteMediaFiles(IEnumerable files) + public void DeleteMediaFiles(IEnumerable files) => + PerformMediaFileOperation( + files, + file => + { + FileSystem.DeleteFile(file); + + var directory = _mediaPathScheme.GetDeleteDirectory(this, file); + if (!directory.IsNullOrWhiteSpace()) + { + FileSystem.DeleteDirectory(directory!, true); + } + }, + "Failed to delete media file '{File}'."); + + /// + /// Adds a suffix to media files. + /// + /// Files to append a suffix to. + /// The suffix to append. + /// + /// The suffix will be added prior to the file extension, e.g. "image.jpg" with suffix ".deleted" will become "image.deleted.jpg". + /// + public void SuffixMediaFiles(IEnumerable files, string suffix) + => PerformMediaFileOperation( + files, + file => + { + var suffixedFile = Path.ChangeExtension(file, suffix + Path.GetExtension(file)); + FileSystem.MoveFile(file, suffixedFile); + }, + "Failed to rename media file '{File}'."); + + private void PerformMediaFileOperation(IEnumerable files, Action fileOperation, string errorMessage) { files = files.Distinct(); @@ -61,17 +92,11 @@ public void DeleteMediaFiles(IEnumerable files) return; } - FileSystem.DeleteFile(file); - - var directory = _mediaPathScheme.GetDeleteDirectory(this, file); - if (!directory.IsNullOrWhiteSpace()) - { - FileSystem.DeleteDirectory(directory!, true); - } + fileOperation(file); } catch (Exception e) { - _logger.LogError(e, "Failed to delete media file '{File}'.", file); + _logger.LogError(e, errorMessage, file); } }); } diff --git a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs index 39f0f132be41..209666b5ef47 100644 --- a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs +++ b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs @@ -367,12 +367,14 @@ public static IUmbracoBuilder AddCoreNotifications(this IUmbracoBuilder builder) .AddNotificationHandler() .AddNotificationHandler() .AddNotificationHandler() + .AddNotificationHandler() .AddNotificationHandler() .AddNotificationHandler() .AddNotificationHandler() .AddNotificationHandler() .AddNotificationHandler() .AddNotificationHandler() + .AddNotificationHandler() .AddNotificationHandler() .AddNotificationHandler() .AddNotificationHandler(); diff --git a/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs b/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs index fe978283c4fd..b6f565dab624 100644 --- a/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs +++ b/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs @@ -24,8 +24,11 @@ namespace Umbraco.Cms.Core.PropertyEditors; ValueType = ValueTypes.Json, ValueEditorIsReusable = true)] public class ImageCropperPropertyEditor : DataEditor, IMediaUrlGenerator, - INotificationHandler, INotificationHandler, - INotificationHandler, INotificationHandler, + INotificationHandler, + INotificationHandler, + INotificationHandler, + INotificationHandler, + INotificationHandler, INotificationHandler { private readonly UploadAutoFillProperties _autoFillProperties; @@ -119,10 +122,13 @@ public void Handle(ContentCopiedNotification notification) } } + /// public void Handle(ContentDeletedNotification notification) => DeleteContainedFiles(notification.DeletedEntities); + /// public void Handle(MediaDeletedNotification notification) => DeleteContainedFiles(notification.DeletedEntities); + /// public void Handle(MediaSavingNotification notification) { foreach (IMedia entity in notification.SavedEntities) @@ -131,6 +137,10 @@ public void Handle(MediaSavingNotification notification) } } + /// + public void Handle(MediaMovedToRecycleBinNotification notification) => RenameContainedFiles(notification.MoveInfoCollection.Select(x => x.Entity)); + + /// public void Handle(MemberDeletedNotification notification) => DeleteContainedFiles(notification.DeletedEntities); /// @@ -239,6 +249,12 @@ private void DeleteContainedFiles(IEnumerable deletedEntities) _mediaFileManager.DeleteMediaFiles(filePathsToDelete); } + private void RenameContainedFiles(IEnumerable trashedMedia) + { + IEnumerable filePathsToRename = ContainedFilePaths(trashedMedia); + _mediaFileManager.SuffixMediaFiles(filePathsToRename, ".deleted"); + } + /// /// Auto-fill properties (or clear). /// diff --git a/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs b/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs index 4203209b580a..37930e31d228 100644 --- a/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs +++ b/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs @@ -20,6 +20,7 @@ internal sealed class FileUploadContentDeletedNotificationHandler : FileUploadNo INotificationHandler, INotificationHandler, INotificationHandler, + INotificationHandler, INotificationHandler { private readonly BlockEditorValues _blockListEditorValues; @@ -48,19 +49,32 @@ public FileUploadContentDeletedNotificationHandler( /// public void Handle(MediaDeletedNotification notification) => DeleteContainedFiles(notification.DeletedEntities); + /// + public void Handle(MediaMovedToRecycleBinNotification notification) => RenameContainedFiles(notification.MoveInfoCollection.Select(x => x.Entity)); + /// public void Handle(MemberDeletedNotification notification) => DeleteContainedFiles(notification.DeletedEntities); /// /// Deletes all file upload property files contained within a collection of content entities. /// - /// + /// Delete media entities. private void DeleteContainedFiles(IEnumerable deletedEntities) { IReadOnlyList filePathsToDelete = ContainedFilePaths(deletedEntities); MediaFileManager.DeleteMediaFiles(filePathsToDelete); } + /// + /// Renames all file upload property files contained within a collection of media entities that have been moved to the recycle bin. + /// + /// Media entities that have been moved to the recycle bin. + private void RenameContainedFiles(IEnumerable trashedMedia) + { + IEnumerable filePathsToRename = ContainedFilePaths(trashedMedia); + MediaFileManager.SuffixMediaFiles(filePathsToRename, ".deleted"); + } + /// /// Gets the paths to all file upload property files contained within a collection of content entities. /// diff --git a/tests/Umbraco.Tests.Integration/Umbraco.Core/IO/FileSystemsTests.cs b/tests/Umbraco.Tests.Integration/Umbraco.Core/IO/FileSystemsTests.cs index 498e6b1f61da..2b7d74128a2d 100644 --- a/tests/Umbraco.Tests.Integration/Umbraco.Core/IO/FileSystemsTests.cs +++ b/tests/Umbraco.Tests.Integration/Umbraco.Core/IO/FileSystemsTests.cs @@ -69,6 +69,25 @@ public void Can_Delete_MediaFiles() Assert.IsTrue(Directory.Exists(physPath)); } + [Test] + public void Can_Suffix_Media_Files() + { + var mediaFileManager = GetRequiredService(); + var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes("test")); + var virtualPath = mediaFileManager.GetMediaPath("file.txt", Guid.NewGuid(), Guid.NewGuid()); + mediaFileManager.FileSystem.AddFile(virtualPath, memoryStream); + + var hostingEnvironment = GetRequiredService(); + var physPath = hostingEnvironment.MapPathWebRoot(Path.Combine("media", virtualPath)); + Assert.IsTrue(File.Exists(physPath)); + + mediaFileManager.SuffixMediaFiles([virtualPath], ".deleted"); + Assert.IsFalse(File.Exists(physPath)); + + physPath = hostingEnvironment.MapPathWebRoot(Path.Combine("media", virtualPath.Replace("file.txt", "file.deleted.txt"))); + Assert.IsTrue(File.Exists(physPath)); + } + // TODO: don't make sense anymore /* [Test] From b13c2ff02fc4fed84cfb233fac271427faa7d77f Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Sat, 4 Oct 2025 15:30:29 +0200 Subject: [PATCH 03/17] Rename file on restore from recycle bin. --- src/Umbraco.Core/Constants-Conventions.cs | 5 +++ src/Umbraco.Core/IO/MediaFileManager.cs | 18 ++++++++++ .../MediaMovedToRecycleBinNotification.cs | 1 + .../UmbracoBuilder.CoreServices.cs | 2 ++ .../ImageCropperPropertyEditor.cs | 34 +++++++++++++++++-- ...UploadContentDeletedNotificationHandler.cs | 26 ++++++++++++-- .../Umbraco.Core/IO/FileSystemsTests.cs | 15 +++++--- 7 files changed, 91 insertions(+), 10 deletions(-) diff --git a/src/Umbraco.Core/Constants-Conventions.cs b/src/Umbraco.Core/Constants-Conventions.cs index 2d21c544e50f..e117b42189ae 100644 --- a/src/Umbraco.Core/Constants-Conventions.cs +++ b/src/Umbraco.Core/Constants-Conventions.cs @@ -100,6 +100,11 @@ public static class Media /// The default height/width of an image file if the size can't be determined from the metadata /// public const int DefaultSize = 200; + + /// + /// Suffix added to media files when moved to the recycle bin when recycle bin media protection is enabled. + /// + public const string TrashedMediaSuffix = ".deleted"; } /// diff --git a/src/Umbraco.Core/IO/MediaFileManager.cs b/src/Umbraco.Core/IO/MediaFileManager.cs index c2b7f41538d6..6b100db532e1 100644 --- a/src/Umbraco.Core/IO/MediaFileManager.cs +++ b/src/Umbraco.Core/IO/MediaFileManager.cs @@ -71,6 +71,24 @@ public void SuffixMediaFiles(IEnumerable files, string suffix) }, "Failed to rename media file '{File}'."); + /// + /// Removes a suffix from media files. + /// + /// Files to remove a suffix from. + /// The suffix to remove. + /// + /// The suffix will be removed prior to the file extension, e.g. "image.deleted.jpg" with suffix ".deleted" will become "image.jpg". + /// + public void RemoveSuffixFromMediaFiles(IEnumerable files, string suffix) + => PerformMediaFileOperation( + files, + file => + { + var fileWithSuffixRemoved = file.Replace(suffix + Path.GetExtension(file), Path.GetExtension(file)); + FileSystem.MoveFile(file, fileWithSuffixRemoved); + }, + "Failed to rename media file '{File}'."); + private void PerformMediaFileOperation(IEnumerable files, Action fileOperation, string errorMessage) { files = files.Distinct(); diff --git a/src/Umbraco.Core/Notifications/MediaMovedToRecycleBinNotification.cs b/src/Umbraco.Core/Notifications/MediaMovedToRecycleBinNotification.cs index 57897587b882..c9e7a19b4424 100644 --- a/src/Umbraco.Core/Notifications/MediaMovedToRecycleBinNotification.cs +++ b/src/Umbraco.Core/Notifications/MediaMovedToRecycleBinNotification.cs @@ -5,6 +5,7 @@ using Umbraco.Cms.Core.Models; namespace Umbraco.Cms.Core.Notifications; + /// /// A notification that is used to trigger the IMediaService when the MoveToRecycleBin method is called in the API, after the media object has been moved to the RecycleBin. /// diff --git a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs index 209666b5ef47..2240018645c8 100644 --- a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs +++ b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs @@ -368,6 +368,7 @@ public static IUmbracoBuilder AddCoreNotifications(this IUmbracoBuilder builder) .AddNotificationHandler() .AddNotificationHandler() .AddNotificationHandler() + .AddNotificationHandler() .AddNotificationHandler() .AddNotificationHandler() .AddNotificationHandler() @@ -375,6 +376,7 @@ public static IUmbracoBuilder AddCoreNotifications(this IUmbracoBuilder builder) .AddNotificationHandler() .AddNotificationHandler() .AddNotificationHandler() + .AddNotificationHandler() .AddNotificationHandler() .AddNotificationHandler() .AddNotificationHandler(); diff --git a/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs b/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs index b6f565dab624..873b1dd45ea1 100644 --- a/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs +++ b/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs @@ -29,6 +29,7 @@ public class ImageCropperPropertyEditor : DataEditor, IMediaUrlGenerator, INotificationHandler, INotificationHandler, INotificationHandler, + INotificationHandler, INotificationHandler { private readonly UploadAutoFillProperties _autoFillProperties; @@ -138,7 +139,15 @@ public void Handle(MediaSavingNotification notification) } /// - public void Handle(MediaMovedToRecycleBinNotification notification) => RenameContainedFiles(notification.MoveInfoCollection.Select(x => x.Entity)); + public void Handle(MediaMovedToRecycleBinNotification notification) => SuffixContainedFiles( + notification.MoveInfoCollection + .Select(x => x.Entity)); + + /// + public void Handle(MediaMovedNotification notification) => RemoveSuffixFromContainedFiles( + notification.MoveInfoCollection + .Where(x => x.OriginalPath.StartsWith($"{Constants.System.RootString},{Constants.System.RecycleBinMediaString}")) + .Select(x => x.Entity)); /// public void Handle(MemberDeletedNotification notification) => DeleteContainedFiles(notification.DeletedEntities); @@ -243,16 +252,35 @@ private IEnumerable GetFilePathsFromPropertyValues(IProperty prop) return relative ? _mediaFileManager.FileSystem.GetRelativePath(source) : source; } + /// + /// Deletes all file upload property files contained within a collection of content entities. + /// + /// Delete media entities. private void DeleteContainedFiles(IEnumerable deletedEntities) { IEnumerable filePathsToDelete = ContainedFilePaths(deletedEntities); _mediaFileManager.DeleteMediaFiles(filePathsToDelete); } - private void RenameContainedFiles(IEnumerable trashedMedia) + /// + /// Renames all file upload property files contained within a collection of media entities that have been moved to the recycle bin. + /// + /// Media entities that have been moved to the recycle bin. + private void SuffixContainedFiles(IEnumerable trashedMedia) { IEnumerable filePathsToRename = ContainedFilePaths(trashedMedia); - _mediaFileManager.SuffixMediaFiles(filePathsToRename, ".deleted"); + _mediaFileManager.SuffixMediaFiles(filePathsToRename, Constants.Conventions.Media.TrashedMediaSuffix); + } + + /// + /// Renames all file upload property files contained within a collection of media entities that have been restore from the recycle bin. + /// + /// Media entities that have been restored from the recycle bin. + private void RemoveSuffixFromContainedFiles(IEnumerable restoredMedia) + { + IEnumerable filePathsToRename = ContainedFilePaths(restoredMedia) + .Select(x => Path.ChangeExtension(x, Constants.Conventions.Media.TrashedMediaSuffix + Path.GetExtension(x))); + _mediaFileManager.RemoveSuffixFromMediaFiles(filePathsToRename, Constants.Conventions.Media.TrashedMediaSuffix); } /// diff --git a/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs b/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs index 37930e31d228..234830fbaf27 100644 --- a/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs +++ b/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs @@ -21,6 +21,7 @@ internal sealed class FileUploadContentDeletedNotificationHandler : FileUploadNo INotificationHandler, INotificationHandler, INotificationHandler, + INotificationHandler, INotificationHandler { private readonly BlockEditorValues _blockListEditorValues; @@ -50,7 +51,15 @@ public FileUploadContentDeletedNotificationHandler( public void Handle(MediaDeletedNotification notification) => DeleteContainedFiles(notification.DeletedEntities); /// - public void Handle(MediaMovedToRecycleBinNotification notification) => RenameContainedFiles(notification.MoveInfoCollection.Select(x => x.Entity)); + public void Handle(MediaMovedToRecycleBinNotification notification) => SuffixContainedFiles( + notification.MoveInfoCollection + .Select(x => x.Entity)); + + /// + public void Handle(MediaMovedNotification notification) => RemoveSuffixFromContainedFiles( + notification.MoveInfoCollection + .Where(x => x.OriginalPath.StartsWith($"{Constants.System.RootString},{Constants.System.RecycleBinMediaString}")) + .Select(x => x.Entity)); /// public void Handle(MemberDeletedNotification notification) => DeleteContainedFiles(notification.DeletedEntities); @@ -69,10 +78,21 @@ private void DeleteContainedFiles(IEnumerable deletedEntities) /// Renames all file upload property files contained within a collection of media entities that have been moved to the recycle bin. /// /// Media entities that have been moved to the recycle bin. - private void RenameContainedFiles(IEnumerable trashedMedia) + private void SuffixContainedFiles(IEnumerable trashedMedia) { IEnumerable filePathsToRename = ContainedFilePaths(trashedMedia); - MediaFileManager.SuffixMediaFiles(filePathsToRename, ".deleted"); + MediaFileManager.SuffixMediaFiles(filePathsToRename, Constants.Conventions.Media.TrashedMediaSuffix); + } + + /// + /// Renames all file upload property files contained within a collection of media entities that have been restore from the recycle bin. + /// + /// Media entities that have been restored from the recycle bin. + private void RemoveSuffixFromContainedFiles(IEnumerable restoredMedia) + { + IEnumerable filePathsToRename = ContainedFilePaths(restoredMedia) + .Select(x => Path.ChangeExtension(x, Constants.Conventions.Media.TrashedMediaSuffix + Path.GetExtension(x))); + MediaFileManager.RemoveSuffixFromMediaFiles(filePathsToRename, Constants.Conventions.Media.TrashedMediaSuffix); } /// diff --git a/tests/Umbraco.Tests.Integration/Umbraco.Core/IO/FileSystemsTests.cs b/tests/Umbraco.Tests.Integration/Umbraco.Core/IO/FileSystemsTests.cs index 2b7d74128a2d..cf733087d9b7 100644 --- a/tests/Umbraco.Tests.Integration/Umbraco.Core/IO/FileSystemsTests.cs +++ b/tests/Umbraco.Tests.Integration/Umbraco.Core/IO/FileSystemsTests.cs @@ -1,7 +1,6 @@ // Copyright (c) Umbraco. // See LICENSE for more details. -using System.IO; using System.Text; using NUnit.Framework; using Umbraco.Cms.Core.Hosting; @@ -70,7 +69,7 @@ public void Can_Delete_MediaFiles() } [Test] - public void Can_Suffix_Media_Files() + public void Can_Add_And_Remove_Suffix_To_And_From_Media_Files() { var mediaFileManager = GetRequiredService(); var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes("test")); @@ -81,10 +80,18 @@ public void Can_Suffix_Media_Files() var physPath = hostingEnvironment.MapPathWebRoot(Path.Combine("media", virtualPath)); Assert.IsTrue(File.Exists(physPath)); - mediaFileManager.SuffixMediaFiles([virtualPath], ".deleted"); + // Add .deleted suffix. + mediaFileManager.SuffixMediaFiles([virtualPath], Cms.Core.Constants.Conventions.Media.TrashedMediaSuffix); Assert.IsFalse(File.Exists(physPath)); - physPath = hostingEnvironment.MapPathWebRoot(Path.Combine("media", virtualPath.Replace("file.txt", "file.deleted.txt"))); + var virtualPathWithSuffix = virtualPath.Replace("file.txt", $"file{Cms.Core.Constants.Conventions.Media.TrashedMediaSuffix}.txt"); + physPath = hostingEnvironment.MapPathWebRoot(Path.Combine("media", virtualPathWithSuffix)); + Assert.IsTrue(File.Exists(physPath)); + + // Remove .deleted suffix. + mediaFileManager.RemoveSuffixFromMediaFiles([virtualPathWithSuffix], Cms.Core.Constants.Conventions.Media.TrashedMediaSuffix); + Assert.IsFalse(File.Exists(physPath)); + physPath = hostingEnvironment.MapPathWebRoot(Path.Combine("media", virtualPath)); Assert.IsTrue(File.Exists(physPath)); } From d0dea01bb05e065172f0fa0dfd6a8cc225ed9769 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Sat, 4 Oct 2025 18:05:55 +0200 Subject: [PATCH 04/17] Add configuration to enabled recycle bin media protection. --- .../Configuration/Models/ImagingSettings.cs | 16 +++++ .../ImageCropperPropertyEditor.cs | 63 ++++++++++++++++--- ...UploadContentDeletedNotificationHandler.cs | 42 ++++++++++--- 3 files changed, 105 insertions(+), 16 deletions(-) diff --git a/src/Umbraco.Core/Configuration/Models/ImagingSettings.cs b/src/Umbraco.Core/Configuration/Models/ImagingSettings.cs index 32bfeedb51ed..a0db029f9d33 100644 --- a/src/Umbraco.Core/Configuration/Models/ImagingSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/ImagingSettings.cs @@ -1,6 +1,8 @@ // Copyright (c) Umbraco. // See LICENSE for more details. +using System.ComponentModel; + namespace Umbraco.Cms.Core.Configuration.Models; /// @@ -9,6 +11,8 @@ namespace Umbraco.Cms.Core.Configuration.Models; [UmbracoOptions(Constants.Configuration.ConfigImaging)] public class ImagingSettings { + private const bool StaticEnableMediaRecycleBinProtection = false; + /// /// Gets or sets a value for the Hash-based Message Authentication Code (HMAC) secret key for request authentication. /// @@ -27,4 +31,16 @@ public class ImagingSettings /// Gets or sets a value for imaging resize settings. /// public ImagingResizeSettings Resize { get; set; } = new(); + + /// + /// Gets or sets a value indicating whether to enable or disable the recycle bin protection for media. + /// + /// + /// When set to true, this will: + /// - Rename media moved to the recycle bin to have a .deleted suffice (e.g. image.jpg will be renamed to image.deleted.jpg). + /// - On restore, the media file will be renamed back to its original name. + /// - A middleware component will be enabled to prevent access to media files in the recycle bin unless the user is authenticated with access to the media section. + /// + [DefaultValue(StaticEnableMediaRecycleBinProtection)] + public bool EnableMediaRecycleBinProtection { get; set; } = StaticEnableMediaRecycleBinProtection; } diff --git a/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs b/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs index 873b1dd45ea1..5c3af60260ec 100644 --- a/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs +++ b/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs @@ -1,9 +1,11 @@ // Copyright (c) Umbraco. // See LICENSE for more details. +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.DependencyInjection; using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.IO; using Umbraco.Cms.Core.Media; @@ -39,10 +41,12 @@ public class ImageCropperPropertyEditor : DataEditor, IMediaUrlGenerator, private readonly MediaFileManager _mediaFileManager; private ContentSettings _contentSettings; private readonly IJsonSerializer _jsonSerializer; + private ImagingSettings _imagingSettings; /// /// Initializes a new instance of the class. /// + [Obsolete("Please use the constructor taking all parameters. Scheduled for removal in Umbraco 18.")] public ImageCropperPropertyEditor( IDataValueEditorFactory dataValueEditorFactory, ILoggerFactory loggerFactory, @@ -52,6 +56,32 @@ public ImageCropperPropertyEditor( UploadAutoFillProperties uploadAutoFillProperties, IContentService contentService, IJsonSerializer jsonSerializer) + : this( + dataValueEditorFactory, + loggerFactory, + mediaFileManager, + contentSettings, + ioHelper, + uploadAutoFillProperties, + contentService, + jsonSerializer, + StaticServiceProvider.Instance.GetRequiredService>()) + { + } + + /// + /// Initializes a new instance of the class. + /// + public ImageCropperPropertyEditor( + IDataValueEditorFactory dataValueEditorFactory, + ILoggerFactory loggerFactory, + MediaFileManager mediaFileManager, + IOptionsMonitor contentSettings, + IIOHelper ioHelper, + UploadAutoFillProperties uploadAutoFillProperties, + IContentService contentService, + IJsonSerializer jsonSerializer, + IOptionsMonitor imagingSettings) : base(dataValueEditorFactory) { _mediaFileManager = mediaFileManager ?? throw new ArgumentNullException(nameof(mediaFileManager)); @@ -62,8 +92,11 @@ public ImageCropperPropertyEditor( _contentService = contentService; _jsonSerializer = jsonSerializer; _logger = loggerFactory.CreateLogger(); + _imagingSettings = imagingSettings.CurrentValue; contentSettings.OnChange(x => _contentSettings = x); + imagingSettings.OnChange(x => _imagingSettings = x); + SupportsReadOnly = true; } @@ -139,15 +172,31 @@ public void Handle(MediaSavingNotification notification) } /// - public void Handle(MediaMovedToRecycleBinNotification notification) => SuffixContainedFiles( - notification.MoveInfoCollection - .Select(x => x.Entity)); + public void Handle(MediaMovedToRecycleBinNotification notification) + { + if (_imagingSettings.EnableMediaRecycleBinProtection is false) + { + return; + } + + SuffixContainedFiles( + notification.MoveInfoCollection + .Select(x => x.Entity)); + } /// - public void Handle(MediaMovedNotification notification) => RemoveSuffixFromContainedFiles( - notification.MoveInfoCollection - .Where(x => x.OriginalPath.StartsWith($"{Constants.System.RootString},{Constants.System.RecycleBinMediaString}")) - .Select(x => x.Entity)); + public void Handle(MediaMovedNotification notification) + { + if (_imagingSettings.EnableMediaRecycleBinProtection is false) + { + return; + } + + RemoveSuffixFromContainedFiles( + notification.MoveInfoCollection + .Where(x => x.OriginalPath.StartsWith($"{Constants.System.RootString},{Constants.System.RecycleBinMediaString}")) + .Select(x => x.Entity)); + } /// public void Handle(MemberDeletedNotification notification) => DeleteContainedFiles(notification.DeletedEntities); diff --git a/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs b/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs index 234830fbaf27..b8134a5dad81 100644 --- a/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs +++ b/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs @@ -1,6 +1,8 @@ using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Cache.PropertyEditors; +using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.IO; using Umbraco.Cms.Core.Models; @@ -14,7 +16,8 @@ namespace Umbraco.Cms.Infrastructure.PropertyEditors.NotificationHandlers; /// -/// Provides base class for notification handler that processes file uploads when a content entity is deleted, removing associated files. +/// Provides base class for notification handler that processes file uploads when a content entity is deleted or media +/// operations are carried out, processing the associated files. /// internal sealed class FileUploadContentDeletedNotificationHandler : FileUploadNotificationHandlerBase, INotificationHandler, @@ -26,6 +29,7 @@ internal sealed class FileUploadContentDeletedNotificationHandler : FileUploadNo { private readonly BlockEditorValues _blockListEditorValues; private readonly BlockEditorValues _blockGridEditorValues; + private ImagingSettings _imagingSettings; /// /// Initializes a new instance of the class. @@ -34,11 +38,15 @@ public FileUploadContentDeletedNotificationHandler( IJsonSerializer jsonSerializer, MediaFileManager mediaFileManager, IBlockEditorElementTypeCache elementTypeCache, - ILogger logger) + ILogger logger, + IOptionsMonitor imagingSettings) : base(jsonSerializer, mediaFileManager, elementTypeCache) { _blockListEditorValues = new(new BlockListEditorDataConverter(jsonSerializer), elementTypeCache, logger); _blockGridEditorValues = new(new BlockGridEditorDataConverter(jsonSerializer), elementTypeCache, logger); + + _imagingSettings = imagingSettings.CurrentValue; + imagingSettings.OnChange(x => _imagingSettings = x); } /// @@ -51,15 +59,31 @@ public FileUploadContentDeletedNotificationHandler( public void Handle(MediaDeletedNotification notification) => DeleteContainedFiles(notification.DeletedEntities); /// - public void Handle(MediaMovedToRecycleBinNotification notification) => SuffixContainedFiles( - notification.MoveInfoCollection - .Select(x => x.Entity)); + public void Handle(MediaMovedToRecycleBinNotification notification) + { + if (_imagingSettings.EnableMediaRecycleBinProtection is false) + { + return; + } + + SuffixContainedFiles( + notification.MoveInfoCollection + .Select(x => x.Entity)); + } /// - public void Handle(MediaMovedNotification notification) => RemoveSuffixFromContainedFiles( - notification.MoveInfoCollection - .Where(x => x.OriginalPath.StartsWith($"{Constants.System.RootString},{Constants.System.RecycleBinMediaString}")) - .Select(x => x.Entity)); + public void Handle(MediaMovedNotification notification) + { + if (_imagingSettings.EnableMediaRecycleBinProtection is false) + { + return; + } + + RemoveSuffixFromContainedFiles( + notification.MoveInfoCollection + .Where(x => x.OriginalPath.StartsWith($"{Constants.System.RootString},{Constants.System.RecycleBinMediaString}")) + .Select(x => x.Entity)); + } /// public void Handle(MemberDeletedNotification notification) => DeleteContainedFiles(notification.DeletedEntities); From 0c4b36c2a15744d01d5a58b204c34edcc8d78d54 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Sun, 5 Oct 2025 14:02:31 +0200 Subject: [PATCH 05/17] Expose backoffice authentication as cookie for non-backoffice usage. Protected requests for media in recycle bin. --- ...enticationOpenIddictServerEventsHandler.cs | 73 +++++++++++++++++++ .../BackOfficeAuthBuilderExtensions.cs | 30 +++++++- src/Umbraco.Core/Constants-Security.cs | 2 + .../UmbracoBuilderExtensions.cs | 1 + .../ApplicationBuilderExtensions.cs | 1 + .../Extensions/StringExtensions.cs | 35 +++++++++ .../ProtectRecycleBinMediaMiddleware.cs | 65 +++++++++++++++++ 7 files changed, 206 insertions(+), 1 deletion(-) create mode 100644 src/Umbraco.Cms.Api.Common/Security/ExposeBackOfficeAuthenticationOpenIddictServerEventsHandler.cs create mode 100644 src/Umbraco.Web.Common/Extensions/StringExtensions.cs create mode 100644 src/Umbraco.Web.Common/Middleware/ProtectRecycleBinMediaMiddleware.cs diff --git a/src/Umbraco.Cms.Api.Common/Security/ExposeBackOfficeAuthenticationOpenIddictServerEventsHandler.cs b/src/Umbraco.Cms.Api.Common/Security/ExposeBackOfficeAuthenticationOpenIddictServerEventsHandler.cs new file mode 100644 index 000000000000..afe41866361c --- /dev/null +++ b/src/Umbraco.Cms.Api.Common/Security/ExposeBackOfficeAuthenticationOpenIddictServerEventsHandler.cs @@ -0,0 +1,73 @@ +using System.Security.Claims; +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Options; +using OpenIddict.Server; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Security; +using Umbraco.Extensions; + +namespace Umbraco.Cms.Infrastructure.Security; + +public class ExposeBackOfficeAuthenticationOpenIddictServerEventsHandler : IOpenIddictServerHandler, + IOpenIddictServerHandler +{ + private readonly IHttpContextAccessor _httpContextAccessor; + private readonly string[] _claimTypes; + private readonly TimeSpan _timeOut; + + public ExposeBackOfficeAuthenticationOpenIddictServerEventsHandler( + IHttpContextAccessor httpContextAccessor, + IOptions globalSettings, + IOptions backOfficeIdentityOptions) + { + _httpContextAccessor = httpContextAccessor; + _timeOut = globalSettings.Value.TimeOut; + + // these are the type identifiers for the claims required by the principal + // for the custom authentication scheme + _claimTypes = + [ + backOfficeIdentityOptions.Value.ClaimsIdentity.UserIdClaimType, + backOfficeIdentityOptions.Value.ClaimsIdentity.UserNameClaimType, + Core.Constants.Security.AllowedApplicationsClaimType, + ]; + } + + // event handler for when access tokens are generated (created or refreshed) + public async ValueTask HandleAsync(OpenIddictServerEvents.GenerateTokenContext context) + { + // only proceed if this is a back-office sign-in + if (context.Principal.Identity?.AuthenticationType != Core.Constants.Security.BackOfficeAuthenticationType) + { + return; + } + + // create a new principal with the claims from the authenticated principal + var principal = new ClaimsPrincipal( + new ClaimsIdentity( + context.Principal.Claims.Where(claim => _claimTypes.Contains(claim.Type)), + Core.Constants.Security.BackOfficeExposedAuthenticationType + ) + ); + + // sign-in the new principal for the custom authentication scheme + await _httpContextAccessor + .GetRequiredHttpContext() + .SignInAsync(Core.Constants.Security.BackOfficeExposedAuthenticationType, principal, GetAuthenticationProperties()); + } + + // event handler for when access tokens are revoked + public async ValueTask HandleAsync(OpenIddictServerEvents.ApplyRevocationResponseContext context) + => await _httpContextAccessor + .GetRequiredHttpContext() + .SignOutAsync(Core.Constants.Security.BackOfficeExposedAuthenticationType, GetAuthenticationProperties()); + + private AuthenticationProperties GetAuthenticationProperties() + => new() + { + IsPersistent = true, + IssuedUtc = DateTimeOffset.UtcNow, + ExpiresUtc = DateTimeOffset.UtcNow.Add(_timeOut) + }; +} diff --git a/src/Umbraco.Cms.Api.Management/DependencyInjection/BackOfficeAuthBuilderExtensions.cs b/src/Umbraco.Cms.Api.Management/DependencyInjection/BackOfficeAuthBuilderExtensions.cs index b633f7bdd6ef..3811587e4bfd 100644 --- a/src/Umbraco.Cms.Api.Management/DependencyInjection/BackOfficeAuthBuilderExtensions.cs +++ b/src/Umbraco.Cms.Api.Management/DependencyInjection/BackOfficeAuthBuilderExtensions.cs @@ -1,5 +1,7 @@ -using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; +using OpenIddict.Server; using Umbraco.Cms.Api.Common.DependencyInjection; using Umbraco.Cms.Api.Management.Configuration; using Umbraco.Cms.Api.Management.Handlers; @@ -50,6 +52,7 @@ private static IUmbracoBuilder AddBackOfficeLogin(this IUmbracoBuilder builder) { builder.Services .AddAuthentication() + // Add our custom schemes which are cookie handlers .AddCookie(Constants.Security.BackOfficeAuthenticationType) .AddCookie(Constants.Security.BackOfficeExternalAuthenticationType, o => @@ -58,6 +61,15 @@ private static IUmbracoBuilder AddBackOfficeLogin(this IUmbracoBuilder builder) o.ExpireTimeSpan = TimeSpan.FromMinutes(5); }) + // Add a cookie scheme that can be used for authenticating backoffice users outside the scope of the backoffice. + .AddCookie(Constants.Security.BackOfficeExposedAuthenticationType, options => + { + options.Cookie.Name = Constants.Security.BackOfficeExposedCookieName; + options.Cookie.HttpOnly = true; + options.Cookie.SecurePolicy = CookieSecurePolicy.Always; + options.SlidingExpiration = true; + }) + // Although we don't natively support this, we add it anyways so that if end-users implement the required logic // they don't have to worry about manually adding this scheme or modifying the sign in manager .AddCookie(Constants.Security.BackOfficeTwoFactorAuthenticationType, options => @@ -71,6 +83,22 @@ private static IUmbracoBuilder AddBackOfficeLogin(this IUmbracoBuilder builder) o.ExpireTimeSpan = TimeSpan.FromMinutes(5); }); + // Add OpnIddict server event handler to refresh the cookie that exposes the backoffice authentication outside the scope of the backoffice. + builder.Services.AddSingleton(); + builder.Services.Configure(options => + { + options.Handlers.Add( + OpenIddictServerHandlerDescriptor + .CreateBuilder() + .UseSingletonHandler() + .Build()); + options.Handlers.Add( + OpenIddictServerHandlerDescriptor + .CreateBuilder() + .UseSingletonHandler() + .Build()); + }); + builder.Services.AddScoped(); builder.Services.ConfigureOptions(); builder.Services.ConfigureOptions(); diff --git a/src/Umbraco.Core/Constants-Security.cs b/src/Umbraco.Core/Constants-Security.cs index eb77642f1bb9..0f069a943029 100644 --- a/src/Umbraco.Core/Constants-Security.cs +++ b/src/Umbraco.Core/Constants-Security.cs @@ -69,6 +69,8 @@ public static class Security public const string BackOfficeAuthenticationType = "UmbracoBackOffice"; public const string BackOfficeExternalAuthenticationType = "UmbracoExternalCookie"; + public const string BackOfficeExposedAuthenticationType = "UmbracoBackOfficeExposed"; + public const string BackOfficeExposedCookieName = "UMB_UCONTEXT_EXPOSED"; public const string BackOfficeExternalCookieName = "UMB_EXTLOGIN"; public const string BackOfficeTokenAuthenticationType = "UmbracoBackOfficeToken"; public const string BackOfficeTwoFactorAuthenticationType = "UmbracoTwoFactorCookie"; diff --git a/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs b/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs index d0eec0039e89..b0c8ce27e392 100644 --- a/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs +++ b/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs @@ -304,6 +304,7 @@ public static IUmbracoBuilder AddWebComponents(this IUmbracoBuilder builder) builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); + builder.Services.AddSingleton(); builder.Services.AddUnique(); builder.Services.AddUnique(); diff --git a/src/Umbraco.Web.Common/Extensions/ApplicationBuilderExtensions.cs b/src/Umbraco.Web.Common/Extensions/ApplicationBuilderExtensions.cs index ada8f64fdfa4..76ef786fbf19 100644 --- a/src/Umbraco.Web.Common/Extensions/ApplicationBuilderExtensions.cs +++ b/src/Umbraco.Web.Common/Extensions/ApplicationBuilderExtensions.cs @@ -104,6 +104,7 @@ public static IApplicationBuilder UseUmbracoRouting(this IApplicationBuilder app app.UseMiddleware(); app.UseMiddleware(); app.UseMiddleware(); + app.UseMiddleware(); } return app; diff --git a/src/Umbraco.Web.Common/Extensions/StringExtensions.cs b/src/Umbraco.Web.Common/Extensions/StringExtensions.cs new file mode 100644 index 000000000000..f60d3f93381b --- /dev/null +++ b/src/Umbraco.Web.Common/Extensions/StringExtensions.cs @@ -0,0 +1,35 @@ +namespace Umbraco.Cms.Web.Common.Extensions; + +internal static class StringExtensions +{ + internal static bool StartsWithNormalizedPath(this string path, string other, StringComparison comparisonType = StringComparison.Ordinal) + { + // First check without normalizing + if (path.StartsWith(other, comparisonType)) + { + return true; + } + + // Normalize paths by splitting them into segments, removing multiple slashes + var otherSegments = other.Split(Core.Constants.CharArrays.ForwardSlash, StringSplitOptions.RemoveEmptyEntries); + var pathSegments = path.Split(Core.Constants.CharArrays.ForwardSlash, otherSegments.Length + 1, StringSplitOptions.RemoveEmptyEntries); + + // The path should have at least as many segments as the other path + if (otherSegments.Length > pathSegments.Length) + { + return false; + } + + // Check each segment + for (int i = otherSegments.Length - 1; i >= 0; i--) + { + if (!string.Equals(otherSegments[i], pathSegments[i], comparisonType)) + { + return false; + } + } + + // All segments match + return true; + } +} diff --git a/src/Umbraco.Web.Common/Middleware/ProtectRecycleBinMediaMiddleware.cs b/src/Umbraco.Web.Common/Middleware/ProtectRecycleBinMediaMiddleware.cs new file mode 100644 index 000000000000..c5a6770bb653 --- /dev/null +++ b/src/Umbraco.Web.Common/Middleware/ProtectRecycleBinMediaMiddleware.cs @@ -0,0 +1,65 @@ +using System.Security.Claims; +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Web.Common.Extensions; + +namespace Umbraco.Cms.Web.Common.Middleware; + +/// +/// Ensures that requests to the media in the recycle bin are authorized and only authenticated back-office users +/// with permissions for the media have access. +/// +public class ProtectRecycleBinMediaMiddleware : IMiddleware +{ + private ImagingSettings _imagingSettings; + + /// + /// Initializes a new instance of the class. + /// + public ProtectRecycleBinMediaMiddleware( + IOptionsMonitor imagingSettings) + { + _imagingSettings = imagingSettings.CurrentValue; + imagingSettings.OnChange(x => _imagingSettings = x); + } + + /// + public async Task InvokeAsync(HttpContext context, RequestDelegate next) + { + if (_imagingSettings.EnableMediaRecycleBinProtection is false) + { + await next(context); + return; + } + + string? requestPath = context.Request.Path.Value; + + if (string.IsNullOrEmpty(requestPath) || + requestPath.StartsWithNormalizedPath($"/media/", StringComparison.OrdinalIgnoreCase) is false || + requestPath.Contains(Core.Constants.Conventions.Media.TrashedMediaSuffix + ".") is false) + { + await next(context); + return; + } + + AuthenticateResult authenticateResult = await context.AuthenticateAsync(Core.Constants.Security.BackOfficeExposedAuthenticationType); + if (authenticateResult.Succeeded is false) + { + context.Response.StatusCode = StatusCodes.Status401Unauthorized; + return; + } + + Claim? mediaSectionClaim = authenticateResult.Principal.Claims + .FirstOrDefault(x => x.Type == Core.Constants.Security.AllowedApplicationsClaimType && x.Value == Core.Constants.Applications.Media); + + if (mediaSectionClaim is null) + { + context.Response.StatusCode = StatusCodes.Status403Forbidden; + return; + } + + await next(context); + } +} From 2a29f5771df4aeba6a4941ca979e77b0363df8f2 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Sun, 5 Oct 2025 18:28:17 +0200 Subject: [PATCH 06/17] Display protected image when viewing image cropper in the backoffice media recycle bin. --- .../Server/ConfigurationServerController.cs | 25 +- src/Umbraco.Cms.Api.Management/OpenApi.json | 603 +++++++++++++++++- .../ServerConfigurationResponseModel.cs | 4 +- .../src/packages/core/backend-api/sdk.gen.ts | 93 ++- .../packages/core/backend-api/types.gen.ts | 246 +++++++ .../packages/core/server/server-connection.ts | 4 + ...roperty-editor-ui-image-cropper.element.ts | 43 +- 7 files changed, 1005 insertions(+), 13 deletions(-) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Server/ConfigurationServerController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Server/ConfigurationServerController.cs index 48a5c7d28828..eb714892fe8c 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Server/ConfigurationServerController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Server/ConfigurationServerController.cs @@ -2,10 +2,12 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Umbraco.Cms.Api.Management.Security; using Umbraco.Cms.Api.Management.ViewModels.Server; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.DependencyInjection; namespace Umbraco.Cms.Api.Management.Controllers.Server; @@ -14,12 +16,32 @@ public class ConfigurationServerController : ServerControllerBase { private readonly SecuritySettings _securitySettings; private readonly GlobalSettings _globalSettings; + private readonly ImagingSettings _imagingSettings; private readonly IBackOfficeExternalLoginProviders _externalLoginProviders; - public ConfigurationServerController(IOptions securitySettings, IOptions globalSettings, IBackOfficeExternalLoginProviders externalLoginProviders) + [Obsolete("Please use the constructor with all parameters. Scheduled for removal in Umbraco 18.")] + public ConfigurationServerController( + IOptions securitySettings, + IOptions globalSettings, + IBackOfficeExternalLoginProviders externalLoginProviders) + : this( + securitySettings, + globalSettings, + StaticServiceProvider.Instance.GetRequiredService>(), + externalLoginProviders) + { + } + + [ActivatorUtilitiesConstructor] + public ConfigurationServerController( + IOptions securitySettings, + IOptions globalSettings, + IOptions imagingSettings, + IBackOfficeExternalLoginProviders externalLoginProviders) { _securitySettings = securitySettings.Value; _globalSettings = globalSettings.Value; + _imagingSettings = imagingSettings.Value; _externalLoginProviders = externalLoginProviders; } @@ -34,6 +56,7 @@ public Task Configuration(CancellationToken cancellationToken) AllowPasswordReset = _securitySettings.AllowPasswordReset, VersionCheckPeriod = _globalSettings.VersionCheckPeriod, AllowLocalLogin = _externalLoginProviders.HasDenyLocalLogin() is false, + EnableMediaRecycleBinProtection = _imagingSettings.EnableMediaRecycleBinProtection, }; return Task.FromResult(Ok(responseModel)); diff --git a/src/Umbraco.Cms.Api.Management/OpenApi.json b/src/Umbraco.Cms.Api.Management/OpenApi.json index e0dff28806ad..03cea429d08d 100644 --- a/src/Umbraco.Cms.Api.Management/OpenApi.json +++ b/src/Umbraco.Cms.Api.Management/OpenApi.json @@ -11098,6 +11098,75 @@ ] } }, + "/umbraco/management/api/v1/recycle-bin/document/siblings": { + "get": { + "tags": [ + "Document" + ], + "operationId": "GetRecycleBinDocumentSiblings", + "parameters": [ + { + "name": "target", + "in": "query", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "before", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "dataTypeId", + "in": "query", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/SubsetDocumentRecycleBinItemResponseModel" + } + ] + } + } + } + }, + "401": { + "description": "The resource is protected and requires an authentication token" + }, + "403": { + "description": "The authenticated user does not have access to this resource" + } + }, + "security": [ + { + "Backoffice-User": [ ] + } + ] + } + }, "/umbraco/management/api/v1/tree/document/ancestors": { "get": { "tags": [ @@ -18458,6 +18527,75 @@ ] } }, + "/umbraco/management/api/v1/recycle-bin/media/siblings": { + "get": { + "tags": [ + "Media" + ], + "operationId": "GetRecycleBinMediaSiblings", + "parameters": [ + { + "name": "target", + "in": "query", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "before", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "dataTypeId", + "in": "query", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/SubsetMediaRecycleBinItemResponseModel" + } + ] + } + } + } + }, + "401": { + "description": "The resource is protected and requires an authentication token" + }, + "403": { + "description": "The authenticated user does not have access to this resource" + } + }, + "security": [ + { + "Backoffice-User": [ ] + } + ] + } + }, "/umbraco/management/api/v1/tree/media/ancestors": { "get": { "tags": [ @@ -20207,6 +20345,67 @@ ] } }, + "/umbraco/management/api/v1/tree/member-type/siblings": { + "get": { + "tags": [ + "Member Type" + ], + "operationId": "GetTreeMemberTypeSiblings", + "parameters": [ + { + "name": "target", + "in": "query", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "before", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/SubsetMemberTypeTreeItemResponseModel" + } + ] + } + } + } + }, + "401": { + "description": "The resource is protected and requires an authentication token" + }, + "403": { + "description": "The authenticated user does not have access to this resource" + } + }, + "security": [ + { + "Backoffice-User": [ ] + } + ] + } + }, "/umbraco/management/api/v1/filter/member": { "get": { "tags": [ @@ -23625,6 +23824,66 @@ ] } }, + "/umbraco/management/api/v1/tree/partial-view/siblings": { + "get": { + "tags": [ + "Partial View" + ], + "operationId": "GetTreePartialViewSiblings", + "parameters": [ + { + "name": "path", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "before", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/SubsetFileSystemTreeItemPresentationModel" + } + ] + } + } + } + }, + "401": { + "description": "The resource is protected and requires an authentication token" + }, + "403": { + "description": "The authenticated user does not have access to this resource" + } + }, + "security": [ + { + "Backoffice-User": [ ] + } + ] + } + }, "/umbraco/management/api/v1/preview": { "delete": { "tags": [ @@ -25560,29 +25819,89 @@ ] } }, - "/umbraco/management/api/v1/tree/script/root": { + "/umbraco/management/api/v1/tree/script/root": { + "get": { + "tags": [ + "Script" + ], + "operationId": "GetTreeScriptRoot", + "parameters": [ + { + "name": "skip", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + }, + { + "name": "take", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 100 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/PagedFileSystemTreeItemPresentationModel" + } + ] + } + } + } + }, + "401": { + "description": "The resource is protected and requires an authentication token" + }, + "403": { + "description": "The authenticated user does not have access to this resource" + } + }, + "security": [ + { + "Backoffice-User": [ ] + } + ] + } + }, + "/umbraco/management/api/v1/tree/script/siblings": { "get": { "tags": [ "Script" ], - "operationId": "GetTreeScriptRoot", + "operationId": "GetTreeScriptSiblings", "parameters": [ { - "name": "skip", + "name": "path", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "before", "in": "query", "schema": { "type": "integer", - "format": "int32", - "default": 0 + "format": "int32" } }, { - "name": "take", + "name": "after", "in": "query", "schema": { "type": "integer", - "format": "int32", - "default": 100 + "format": "int32" } } ], @@ -25594,7 +25913,7 @@ "schema": { "oneOf": [ { - "$ref": "#/components/schemas/PagedFileSystemTreeItemPresentationModel" + "$ref": "#/components/schemas/SubsetFileSystemTreeItemPresentationModel" } ] } @@ -27701,6 +28020,66 @@ ] } }, + "/umbraco/management/api/v1/tree/stylesheet/siblings": { + "get": { + "tags": [ + "Stylesheet" + ], + "operationId": "GetTreeStylesheetSiblings", + "parameters": [ + { + "name": "path", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "before", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/SubsetFileSystemTreeItemPresentationModel" + } + ] + } + } + } + }, + "401": { + "description": "The resource is protected and requires an authentication token" + }, + "403": { + "description": "The authenticated user does not have access to this resource" + } + }, + "security": [ + { + "Backoffice-User": [ ] + } + ] + } + }, "/umbraco/management/api/v1/tag": { "get": { "tags": [ @@ -29711,6 +30090,92 @@ "Backoffice-User": [ ] } ] + }, + "delete": { + "tags": [ + "User Data" + ], + "operationId": "DeleteUserDataById", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Umb-Notifications": { + "description": "The list of notifications produced during the request.", + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NotificationHeaderModel" + }, + "nullable": true + } + } + } + }, + "400": { + "description": "Bad Request", + "headers": { + "Umb-Notifications": { + "description": "The list of notifications produced during the request.", + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NotificationHeaderModel" + }, + "nullable": true + } + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserDataOperationStatusModel" + } + } + } + }, + "404": { + "description": "Not Found", + "headers": { + "Umb-Notifications": { + "description": "The list of notifications produced during the request.", + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NotificationHeaderModel" + }, + "nullable": true + } + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserDataOperationStatusModel" + } + } + } + }, + "401": { + "description": "The resource is protected and requires an authentication token" + } + }, + "security": [ + { + "Backoffice-User": [ ] + } + ] } }, "/umbraco/management/api/v1/filter/user-group": { @@ -45084,6 +45549,7 @@ "required": [ "allowLocalLogin", "allowPasswordReset", + "enableMediaRecycleBinProtection", "versionCheckPeriod" ], "type": "object", @@ -45097,6 +45563,9 @@ }, "allowLocalLogin": { "type": "boolean" + }, + "enableMediaRecycleBinProtection": { + "type": "boolean" } }, "additionalProperties": false @@ -45374,6 +45843,35 @@ }, "additionalProperties": false }, + "SubsetDocumentRecycleBinItemResponseModel": { + "required": [ + "items", + "totalAfter", + "totalBefore" + ], + "type": "object", + "properties": { + "totalBefore": { + "type": "integer", + "format": "int64" + }, + "totalAfter": { + "type": "integer", + "format": "int64" + }, + "items": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/DocumentRecycleBinItemResponseModel" + } + ] + } + } + }, + "additionalProperties": false + }, "SubsetDocumentTreeItemResponseModel": { "required": [ "items", @@ -45432,6 +45930,64 @@ }, "additionalProperties": false }, + "SubsetFileSystemTreeItemPresentationModel": { + "required": [ + "items", + "totalAfter", + "totalBefore" + ], + "type": "object", + "properties": { + "totalBefore": { + "type": "integer", + "format": "int64" + }, + "totalAfter": { + "type": "integer", + "format": "int64" + }, + "items": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/FileSystemTreeItemPresentationModel" + } + ] + } + } + }, + "additionalProperties": false + }, + "SubsetMediaRecycleBinItemResponseModel": { + "required": [ + "items", + "totalAfter", + "totalBefore" + ], + "type": "object", + "properties": { + "totalBefore": { + "type": "integer", + "format": "int64" + }, + "totalAfter": { + "type": "integer", + "format": "int64" + }, + "items": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/MediaRecycleBinItemResponseModel" + } + ] + } + } + }, + "additionalProperties": false + }, "SubsetMediaTreeItemResponseModel": { "required": [ "items", @@ -45490,6 +46046,35 @@ }, "additionalProperties": false }, + "SubsetMemberTypeTreeItemResponseModel": { + "required": [ + "items", + "totalAfter", + "totalBefore" + ], + "type": "object", + "properties": { + "totalBefore": { + "type": "integer", + "format": "int64" + }, + "totalAfter": { + "type": "integer", + "format": "int64" + }, + "items": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/MemberTypeTreeItemResponseModel" + } + ] + } + } + }, + "additionalProperties": false + }, "SubsetNamedEntityTreeItemResponseModel": { "required": [ "items", diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Server/ServerConfigurationResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Server/ServerConfigurationResponseModel.cs index 9e8ef9fe7eac..5ab7023d584b 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Server/ServerConfigurationResponseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Server/ServerConfigurationResponseModel.cs @@ -1,4 +1,4 @@ -namespace Umbraco.Cms.Api.Management.ViewModels.Server; +namespace Umbraco.Cms.Api.Management.ViewModels.Server; public class ServerConfigurationResponseModel { @@ -7,4 +7,6 @@ public class ServerConfigurationResponseModel public int VersionCheckPeriod { get; set; } public bool AllowLocalLogin { get; set; } + + public bool EnableMediaRecycleBinProtection { get; set; } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/sdk.gen.ts b/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/sdk.gen.ts index f93ccb41dd3e..8f0563c96655 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/sdk.gen.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/sdk.gen.ts @@ -1,7 +1,7 @@ // This file is auto-generated by @hey-api/openapi-ts import { type Options as ClientOptions, type TDataShape, type Client, formDataBodySerializer } from './client'; -import type { GetCultureData, GetCultureResponses, GetCultureErrors, PostDataTypeData, PostDataTypeResponses, PostDataTypeErrors, DeleteDataTypeByIdData, DeleteDataTypeByIdResponses, DeleteDataTypeByIdErrors, GetDataTypeByIdData, GetDataTypeByIdResponses, GetDataTypeByIdErrors, PutDataTypeByIdData, PutDataTypeByIdResponses, PutDataTypeByIdErrors, PostDataTypeByIdCopyData, PostDataTypeByIdCopyResponses, PostDataTypeByIdCopyErrors, GetDataTypeByIdIsUsedData, GetDataTypeByIdIsUsedResponses, GetDataTypeByIdIsUsedErrors, PutDataTypeByIdMoveData, PutDataTypeByIdMoveResponses, PutDataTypeByIdMoveErrors, GetDataTypeByIdReferencedByData, GetDataTypeByIdReferencedByResponses, GetDataTypeByIdReferencedByErrors, GetDataTypeByIdReferencesData, GetDataTypeByIdReferencesResponses, GetDataTypeByIdReferencesErrors, GetDataTypeConfigurationData, GetDataTypeConfigurationResponses, GetDataTypeConfigurationErrors, PostDataTypeFolderData, PostDataTypeFolderResponses, PostDataTypeFolderErrors, DeleteDataTypeFolderByIdData, DeleteDataTypeFolderByIdResponses, DeleteDataTypeFolderByIdErrors, GetDataTypeFolderByIdData, GetDataTypeFolderByIdResponses, GetDataTypeFolderByIdErrors, PutDataTypeFolderByIdData, PutDataTypeFolderByIdResponses, PutDataTypeFolderByIdErrors, GetFilterDataTypeData, GetFilterDataTypeResponses, GetFilterDataTypeErrors, GetItemDataTypeData, GetItemDataTypeResponses, GetItemDataTypeErrors, GetItemDataTypeSearchData, GetItemDataTypeSearchResponses, GetItemDataTypeSearchErrors, GetTreeDataTypeAncestorsData, GetTreeDataTypeAncestorsResponses, GetTreeDataTypeAncestorsErrors, GetTreeDataTypeChildrenData, GetTreeDataTypeChildrenResponses, GetTreeDataTypeChildrenErrors, GetTreeDataTypeRootData, GetTreeDataTypeRootResponses, GetTreeDataTypeRootErrors, GetTreeDataTypeSiblingsData, GetTreeDataTypeSiblingsResponses, GetTreeDataTypeSiblingsErrors, GetDictionaryData, GetDictionaryResponses, GetDictionaryErrors, PostDictionaryData, PostDictionaryResponses, PostDictionaryErrors, DeleteDictionaryByIdData, DeleteDictionaryByIdResponses, DeleteDictionaryByIdErrors, GetDictionaryByIdData, GetDictionaryByIdResponses, GetDictionaryByIdErrors, PutDictionaryByIdData, PutDictionaryByIdResponses, PutDictionaryByIdErrors, GetDictionaryByIdExportData, GetDictionaryByIdExportResponses, GetDictionaryByIdExportErrors, PutDictionaryByIdMoveData, PutDictionaryByIdMoveResponses, PutDictionaryByIdMoveErrors, PostDictionaryImportData, PostDictionaryImportResponses, PostDictionaryImportErrors, GetItemDictionaryData, GetItemDictionaryResponses, GetItemDictionaryErrors, GetTreeDictionaryAncestorsData, GetTreeDictionaryAncestorsResponses, GetTreeDictionaryAncestorsErrors, GetTreeDictionaryChildrenData, GetTreeDictionaryChildrenResponses, GetTreeDictionaryChildrenErrors, GetTreeDictionaryRootData, GetTreeDictionaryRootResponses, GetTreeDictionaryRootErrors, PostDocumentBlueprintData, PostDocumentBlueprintResponses, PostDocumentBlueprintErrors, DeleteDocumentBlueprintByIdData, DeleteDocumentBlueprintByIdResponses, DeleteDocumentBlueprintByIdErrors, GetDocumentBlueprintByIdData, GetDocumentBlueprintByIdResponses, GetDocumentBlueprintByIdErrors, PutDocumentBlueprintByIdData, PutDocumentBlueprintByIdResponses, PutDocumentBlueprintByIdErrors, PutDocumentBlueprintByIdMoveData, PutDocumentBlueprintByIdMoveResponses, PutDocumentBlueprintByIdMoveErrors, GetDocumentBlueprintByIdScaffoldData, GetDocumentBlueprintByIdScaffoldResponses, GetDocumentBlueprintByIdScaffoldErrors, PostDocumentBlueprintFolderData, PostDocumentBlueprintFolderResponses, PostDocumentBlueprintFolderErrors, DeleteDocumentBlueprintFolderByIdData, DeleteDocumentBlueprintFolderByIdResponses, DeleteDocumentBlueprintFolderByIdErrors, GetDocumentBlueprintFolderByIdData, GetDocumentBlueprintFolderByIdResponses, GetDocumentBlueprintFolderByIdErrors, PutDocumentBlueprintFolderByIdData, PutDocumentBlueprintFolderByIdResponses, PutDocumentBlueprintFolderByIdErrors, PostDocumentBlueprintFromDocumentData, PostDocumentBlueprintFromDocumentResponses, PostDocumentBlueprintFromDocumentErrors, GetItemDocumentBlueprintData, GetItemDocumentBlueprintResponses, GetItemDocumentBlueprintErrors, GetTreeDocumentBlueprintAncestorsData, GetTreeDocumentBlueprintAncestorsResponses, GetTreeDocumentBlueprintAncestorsErrors, GetTreeDocumentBlueprintChildrenData, GetTreeDocumentBlueprintChildrenResponses, GetTreeDocumentBlueprintChildrenErrors, GetTreeDocumentBlueprintRootData, GetTreeDocumentBlueprintRootResponses, GetTreeDocumentBlueprintRootErrors, GetTreeDocumentBlueprintSiblingsData, GetTreeDocumentBlueprintSiblingsResponses, GetTreeDocumentBlueprintSiblingsErrors, PostDocumentTypeData, PostDocumentTypeResponses, PostDocumentTypeErrors, DeleteDocumentTypeByIdData, DeleteDocumentTypeByIdResponses, DeleteDocumentTypeByIdErrors, GetDocumentTypeByIdData, GetDocumentTypeByIdResponses, GetDocumentTypeByIdErrors, PutDocumentTypeByIdData, PutDocumentTypeByIdResponses, PutDocumentTypeByIdErrors, GetDocumentTypeByIdAllowedChildrenData, GetDocumentTypeByIdAllowedChildrenResponses, GetDocumentTypeByIdAllowedChildrenErrors, GetDocumentTypeByIdBlueprintData, GetDocumentTypeByIdBlueprintResponses, GetDocumentTypeByIdBlueprintErrors, GetDocumentTypeByIdCompositionReferencesData, GetDocumentTypeByIdCompositionReferencesResponses, GetDocumentTypeByIdCompositionReferencesErrors, PostDocumentTypeByIdCopyData, PostDocumentTypeByIdCopyResponses, PostDocumentTypeByIdCopyErrors, GetDocumentTypeByIdExportData, GetDocumentTypeByIdExportResponses, GetDocumentTypeByIdExportErrors, PutDocumentTypeByIdImportData, PutDocumentTypeByIdImportResponses, PutDocumentTypeByIdImportErrors, PutDocumentTypeByIdMoveData, PutDocumentTypeByIdMoveResponses, PutDocumentTypeByIdMoveErrors, GetDocumentTypeAllowedAtRootData, GetDocumentTypeAllowedAtRootResponses, GetDocumentTypeAllowedAtRootErrors, PostDocumentTypeAvailableCompositionsData, PostDocumentTypeAvailableCompositionsResponses, PostDocumentTypeAvailableCompositionsErrors, GetDocumentTypeConfigurationData, GetDocumentTypeConfigurationResponses, GetDocumentTypeConfigurationErrors, PostDocumentTypeFolderData, PostDocumentTypeFolderResponses, PostDocumentTypeFolderErrors, DeleteDocumentTypeFolderByIdData, DeleteDocumentTypeFolderByIdResponses, DeleteDocumentTypeFolderByIdErrors, GetDocumentTypeFolderByIdData, GetDocumentTypeFolderByIdResponses, GetDocumentTypeFolderByIdErrors, PutDocumentTypeFolderByIdData, PutDocumentTypeFolderByIdResponses, PutDocumentTypeFolderByIdErrors, PostDocumentTypeImportData, PostDocumentTypeImportResponses, PostDocumentTypeImportErrors, GetItemDocumentTypeData, GetItemDocumentTypeResponses, GetItemDocumentTypeErrors, GetItemDocumentTypeSearchData, GetItemDocumentTypeSearchResponses, GetItemDocumentTypeSearchErrors, GetTreeDocumentTypeAncestorsData, GetTreeDocumentTypeAncestorsResponses, GetTreeDocumentTypeAncestorsErrors, GetTreeDocumentTypeChildrenData, GetTreeDocumentTypeChildrenResponses, GetTreeDocumentTypeChildrenErrors, GetTreeDocumentTypeRootData, GetTreeDocumentTypeRootResponses, GetTreeDocumentTypeRootErrors, GetTreeDocumentTypeSiblingsData, GetTreeDocumentTypeSiblingsResponses, GetTreeDocumentTypeSiblingsErrors, GetDocumentVersionData, GetDocumentVersionResponses, GetDocumentVersionErrors, GetDocumentVersionByIdData, GetDocumentVersionByIdResponses, GetDocumentVersionByIdErrors, PutDocumentVersionByIdPreventCleanupData, PutDocumentVersionByIdPreventCleanupResponses, PutDocumentVersionByIdPreventCleanupErrors, PostDocumentVersionByIdRollbackData, PostDocumentVersionByIdRollbackResponses, PostDocumentVersionByIdRollbackErrors, GetCollectionDocumentByIdData, GetCollectionDocumentByIdResponses, GetCollectionDocumentByIdErrors, PostDocumentData, PostDocumentResponses, PostDocumentErrors, DeleteDocumentByIdData, DeleteDocumentByIdResponses, DeleteDocumentByIdErrors, GetDocumentByIdData, GetDocumentByIdResponses, GetDocumentByIdErrors, PutDocumentByIdData, PutDocumentByIdResponses, PutDocumentByIdErrors, GetDocumentByIdAuditLogData, GetDocumentByIdAuditLogResponses, GetDocumentByIdAuditLogErrors, GetDocumentByIdAvailableSegmentOptionsData, GetDocumentByIdAvailableSegmentOptionsResponses, GetDocumentByIdAvailableSegmentOptionsErrors, PostDocumentByIdCopyData, PostDocumentByIdCopyResponses, PostDocumentByIdCopyErrors, GetDocumentByIdDomainsData, GetDocumentByIdDomainsResponses, GetDocumentByIdDomainsErrors, PutDocumentByIdDomainsData, PutDocumentByIdDomainsResponses, PutDocumentByIdDomainsErrors, PutDocumentByIdMoveData, PutDocumentByIdMoveResponses, PutDocumentByIdMoveErrors, PutDocumentByIdMoveToRecycleBinData, PutDocumentByIdMoveToRecycleBinResponses, PutDocumentByIdMoveToRecycleBinErrors, GetDocumentByIdNotificationsData, GetDocumentByIdNotificationsResponses, GetDocumentByIdNotificationsErrors, PutDocumentByIdNotificationsData, PutDocumentByIdNotificationsResponses, PutDocumentByIdNotificationsErrors, DeleteDocumentByIdPublicAccessData, DeleteDocumentByIdPublicAccessResponses, DeleteDocumentByIdPublicAccessErrors, GetDocumentByIdPublicAccessData, GetDocumentByIdPublicAccessResponses, GetDocumentByIdPublicAccessErrors, PostDocumentByIdPublicAccessData, PostDocumentByIdPublicAccessResponses, PostDocumentByIdPublicAccessErrors, PutDocumentByIdPublicAccessData, PutDocumentByIdPublicAccessResponses, PutDocumentByIdPublicAccessErrors, PutDocumentByIdPublishData, PutDocumentByIdPublishResponses, PutDocumentByIdPublishErrors, PutDocumentByIdPublishWithDescendantsData, PutDocumentByIdPublishWithDescendantsResponses, PutDocumentByIdPublishWithDescendantsErrors, GetDocumentByIdPublishWithDescendantsResultByTaskIdData, GetDocumentByIdPublishWithDescendantsResultByTaskIdResponses, GetDocumentByIdPublishWithDescendantsResultByTaskIdErrors, GetDocumentByIdPublishedData, GetDocumentByIdPublishedResponses, GetDocumentByIdPublishedErrors, GetDocumentByIdReferencedByData, GetDocumentByIdReferencedByResponses, GetDocumentByIdReferencedByErrors, GetDocumentByIdReferencedDescendantsData, GetDocumentByIdReferencedDescendantsResponses, GetDocumentByIdReferencedDescendantsErrors, PutDocumentByIdUnpublishData, PutDocumentByIdUnpublishResponses, PutDocumentByIdUnpublishErrors, PutUmbracoManagementApiV11DocumentByIdValidate11Data, PutUmbracoManagementApiV11DocumentByIdValidate11Responses, PutUmbracoManagementApiV11DocumentByIdValidate11Errors, GetDocumentAreReferencedData, GetDocumentAreReferencedResponses, GetDocumentAreReferencedErrors, GetDocumentConfigurationData, GetDocumentConfigurationResponses, GetDocumentConfigurationErrors, PutDocumentSortData, PutDocumentSortResponses, PutDocumentSortErrors, GetDocumentUrlsData, GetDocumentUrlsResponses, GetDocumentUrlsErrors, PostDocumentValidateData, PostDocumentValidateResponses, PostDocumentValidateErrors, GetItemDocumentData, GetItemDocumentResponses, GetItemDocumentErrors, GetItemDocumentSearchData, GetItemDocumentSearchResponses, GetItemDocumentSearchErrors, DeleteRecycleBinDocumentData, DeleteRecycleBinDocumentResponses, DeleteRecycleBinDocumentErrors, DeleteRecycleBinDocumentByIdData, DeleteRecycleBinDocumentByIdResponses, DeleteRecycleBinDocumentByIdErrors, GetRecycleBinDocumentByIdOriginalParentData, GetRecycleBinDocumentByIdOriginalParentResponses, GetRecycleBinDocumentByIdOriginalParentErrors, PutRecycleBinDocumentByIdRestoreData, PutRecycleBinDocumentByIdRestoreResponses, PutRecycleBinDocumentByIdRestoreErrors, GetRecycleBinDocumentChildrenData, GetRecycleBinDocumentChildrenResponses, GetRecycleBinDocumentChildrenErrors, GetRecycleBinDocumentReferencedByData, GetRecycleBinDocumentReferencedByResponses, GetRecycleBinDocumentReferencedByErrors, GetRecycleBinDocumentRootData, GetRecycleBinDocumentRootResponses, GetRecycleBinDocumentRootErrors, GetTreeDocumentAncestorsData, GetTreeDocumentAncestorsResponses, GetTreeDocumentAncestorsErrors, GetTreeDocumentChildrenData, GetTreeDocumentChildrenResponses, GetTreeDocumentChildrenErrors, GetTreeDocumentRootData, GetTreeDocumentRootResponses, GetTreeDocumentRootErrors, GetTreeDocumentSiblingsData, GetTreeDocumentSiblingsResponses, GetTreeDocumentSiblingsErrors, PostDynamicRootQueryData, PostDynamicRootQueryResponses, PostDynamicRootQueryErrors, GetDynamicRootStepsData, GetDynamicRootStepsResponses, GetDynamicRootStepsErrors, GetHealthCheckGroupData, GetHealthCheckGroupResponses, GetHealthCheckGroupErrors, GetHealthCheckGroupByNameData, GetHealthCheckGroupByNameResponses, GetHealthCheckGroupByNameErrors, PostHealthCheckGroupByNameCheckData, PostHealthCheckGroupByNameCheckResponses, PostHealthCheckGroupByNameCheckErrors, PostHealthCheckExecuteActionData, PostHealthCheckExecuteActionResponses, PostHealthCheckExecuteActionErrors, GetHelpData, GetHelpResponses, GetHelpErrors, GetImagingResizeUrlsData, GetImagingResizeUrlsResponses, GetImagingResizeUrlsErrors, GetImportAnalyzeData, GetImportAnalyzeResponses, GetImportAnalyzeErrors, GetIndexerData, GetIndexerResponses, GetIndexerErrors, GetIndexerByIndexNameData, GetIndexerByIndexNameResponses, GetIndexerByIndexNameErrors, PostIndexerByIndexNameRebuildData, PostIndexerByIndexNameRebuildResponses, PostIndexerByIndexNameRebuildErrors, GetInstallSettingsData, GetInstallSettingsResponses, GetInstallSettingsErrors, PostInstallSetupData, PostInstallSetupResponses, PostInstallSetupErrors, PostInstallValidateDatabaseData, PostInstallValidateDatabaseResponses, PostInstallValidateDatabaseErrors, GetItemLanguageData, GetItemLanguageResponses, GetItemLanguageErrors, GetItemLanguageDefaultData, GetItemLanguageDefaultResponses, GetItemLanguageDefaultErrors, GetLanguageData, GetLanguageResponses, GetLanguageErrors, PostLanguageData, PostLanguageResponses, PostLanguageErrors, DeleteLanguageByIsoCodeData, DeleteLanguageByIsoCodeResponses, DeleteLanguageByIsoCodeErrors, GetLanguageByIsoCodeData, GetLanguageByIsoCodeResponses, GetLanguageByIsoCodeErrors, PutLanguageByIsoCodeData, PutLanguageByIsoCodeResponses, PutLanguageByIsoCodeErrors, GetLogViewerLevelData, GetLogViewerLevelResponses, GetLogViewerLevelErrors, GetLogViewerLevelCountData, GetLogViewerLevelCountResponses, GetLogViewerLevelCountErrors, GetLogViewerLogData, GetLogViewerLogResponses, GetLogViewerLogErrors, GetLogViewerMessageTemplateData, GetLogViewerMessageTemplateResponses, GetLogViewerMessageTemplateErrors, GetLogViewerSavedSearchData, GetLogViewerSavedSearchResponses, GetLogViewerSavedSearchErrors, PostLogViewerSavedSearchData, PostLogViewerSavedSearchResponses, PostLogViewerSavedSearchErrors, DeleteLogViewerSavedSearchByNameData, DeleteLogViewerSavedSearchByNameResponses, DeleteLogViewerSavedSearchByNameErrors, GetLogViewerSavedSearchByNameData, GetLogViewerSavedSearchByNameResponses, GetLogViewerSavedSearchByNameErrors, GetLogViewerValidateLogsSizeData, GetLogViewerValidateLogsSizeResponses, GetLogViewerValidateLogsSizeErrors, GetManifestManifestData, GetManifestManifestResponses, GetManifestManifestErrors, GetManifestManifestPrivateData, GetManifestManifestPrivateResponses, GetManifestManifestPrivateErrors, GetManifestManifestPublicData, GetManifestManifestPublicResponses, GetItemMediaTypeData, GetItemMediaTypeResponses, GetItemMediaTypeErrors, GetItemMediaTypeAllowedData, GetItemMediaTypeAllowedResponses, GetItemMediaTypeAllowedErrors, GetItemMediaTypeFoldersData, GetItemMediaTypeFoldersResponses, GetItemMediaTypeFoldersErrors, GetItemMediaTypeSearchData, GetItemMediaTypeSearchResponses, GetItemMediaTypeSearchErrors, PostMediaTypeData, PostMediaTypeResponses, PostMediaTypeErrors, DeleteMediaTypeByIdData, DeleteMediaTypeByIdResponses, DeleteMediaTypeByIdErrors, GetMediaTypeByIdData, GetMediaTypeByIdResponses, GetMediaTypeByIdErrors, PutMediaTypeByIdData, PutMediaTypeByIdResponses, PutMediaTypeByIdErrors, GetMediaTypeByIdAllowedChildrenData, GetMediaTypeByIdAllowedChildrenResponses, GetMediaTypeByIdAllowedChildrenErrors, GetMediaTypeByIdCompositionReferencesData, GetMediaTypeByIdCompositionReferencesResponses, GetMediaTypeByIdCompositionReferencesErrors, PostMediaTypeByIdCopyData, PostMediaTypeByIdCopyResponses, PostMediaTypeByIdCopyErrors, GetMediaTypeByIdExportData, GetMediaTypeByIdExportResponses, GetMediaTypeByIdExportErrors, PutMediaTypeByIdImportData, PutMediaTypeByIdImportResponses, PutMediaTypeByIdImportErrors, PutMediaTypeByIdMoveData, PutMediaTypeByIdMoveResponses, PutMediaTypeByIdMoveErrors, GetMediaTypeAllowedAtRootData, GetMediaTypeAllowedAtRootResponses, GetMediaTypeAllowedAtRootErrors, PostMediaTypeAvailableCompositionsData, PostMediaTypeAvailableCompositionsResponses, PostMediaTypeAvailableCompositionsErrors, GetMediaTypeConfigurationData, GetMediaTypeConfigurationResponses, GetMediaTypeConfigurationErrors, PostMediaTypeFolderData, PostMediaTypeFolderResponses, PostMediaTypeFolderErrors, DeleteMediaTypeFolderByIdData, DeleteMediaTypeFolderByIdResponses, DeleteMediaTypeFolderByIdErrors, GetMediaTypeFolderByIdData, GetMediaTypeFolderByIdResponses, GetMediaTypeFolderByIdErrors, PutMediaTypeFolderByIdData, PutMediaTypeFolderByIdResponses, PutMediaTypeFolderByIdErrors, PostMediaTypeImportData, PostMediaTypeImportResponses, PostMediaTypeImportErrors, GetTreeMediaTypeAncestorsData, GetTreeMediaTypeAncestorsResponses, GetTreeMediaTypeAncestorsErrors, GetTreeMediaTypeChildrenData, GetTreeMediaTypeChildrenResponses, GetTreeMediaTypeChildrenErrors, GetTreeMediaTypeRootData, GetTreeMediaTypeRootResponses, GetTreeMediaTypeRootErrors, GetTreeMediaTypeSiblingsData, GetTreeMediaTypeSiblingsResponses, GetTreeMediaTypeSiblingsErrors, GetCollectionMediaData, GetCollectionMediaResponses, GetCollectionMediaErrors, GetItemMediaData, GetItemMediaResponses, GetItemMediaErrors, GetItemMediaSearchData, GetItemMediaSearchResponses, GetItemMediaSearchErrors, PostMediaData, PostMediaResponses, PostMediaErrors, DeleteMediaByIdData, DeleteMediaByIdResponses, DeleteMediaByIdErrors, GetMediaByIdData, GetMediaByIdResponses, GetMediaByIdErrors, PutMediaByIdData, PutMediaByIdResponses, PutMediaByIdErrors, GetMediaByIdAuditLogData, GetMediaByIdAuditLogResponses, GetMediaByIdAuditLogErrors, PutMediaByIdMoveData, PutMediaByIdMoveResponses, PutMediaByIdMoveErrors, PutMediaByIdMoveToRecycleBinData, PutMediaByIdMoveToRecycleBinResponses, PutMediaByIdMoveToRecycleBinErrors, GetMediaByIdReferencedByData, GetMediaByIdReferencedByResponses, GetMediaByIdReferencedByErrors, GetMediaByIdReferencedDescendantsData, GetMediaByIdReferencedDescendantsResponses, GetMediaByIdReferencedDescendantsErrors, PutMediaByIdValidateData, PutMediaByIdValidateResponses, PutMediaByIdValidateErrors, GetMediaAreReferencedData, GetMediaAreReferencedResponses, GetMediaAreReferencedErrors, GetMediaConfigurationData, GetMediaConfigurationResponses, GetMediaConfigurationErrors, PutMediaSortData, PutMediaSortResponses, PutMediaSortErrors, GetMediaUrlsData, GetMediaUrlsResponses, GetMediaUrlsErrors, PostMediaValidateData, PostMediaValidateResponses, PostMediaValidateErrors, DeleteRecycleBinMediaData, DeleteRecycleBinMediaResponses, DeleteRecycleBinMediaErrors, DeleteRecycleBinMediaByIdData, DeleteRecycleBinMediaByIdResponses, DeleteRecycleBinMediaByIdErrors, GetRecycleBinMediaByIdOriginalParentData, GetRecycleBinMediaByIdOriginalParentResponses, GetRecycleBinMediaByIdOriginalParentErrors, PutRecycleBinMediaByIdRestoreData, PutRecycleBinMediaByIdRestoreResponses, PutRecycleBinMediaByIdRestoreErrors, GetRecycleBinMediaChildrenData, GetRecycleBinMediaChildrenResponses, GetRecycleBinMediaChildrenErrors, GetRecycleBinMediaReferencedByData, GetRecycleBinMediaReferencedByResponses, GetRecycleBinMediaReferencedByErrors, GetRecycleBinMediaRootData, GetRecycleBinMediaRootResponses, GetRecycleBinMediaRootErrors, GetTreeMediaAncestorsData, GetTreeMediaAncestorsResponses, GetTreeMediaAncestorsErrors, GetTreeMediaChildrenData, GetTreeMediaChildrenResponses, GetTreeMediaChildrenErrors, GetTreeMediaRootData, GetTreeMediaRootResponses, GetTreeMediaRootErrors, GetTreeMediaSiblingsData, GetTreeMediaSiblingsResponses, GetTreeMediaSiblingsErrors, GetItemMemberGroupData, GetItemMemberGroupResponses, GetItemMemberGroupErrors, GetMemberGroupData, GetMemberGroupResponses, GetMemberGroupErrors, PostMemberGroupData, PostMemberGroupResponses, PostMemberGroupErrors, DeleteMemberGroupByIdData, DeleteMemberGroupByIdResponses, DeleteMemberGroupByIdErrors, GetMemberGroupByIdData, GetMemberGroupByIdResponses, GetMemberGroupByIdErrors, PutMemberGroupByIdData, PutMemberGroupByIdResponses, PutMemberGroupByIdErrors, GetTreeMemberGroupRootData, GetTreeMemberGroupRootResponses, GetTreeMemberGroupRootErrors, GetItemMemberTypeData, GetItemMemberTypeResponses, GetItemMemberTypeErrors, GetItemMemberTypeSearchData, GetItemMemberTypeSearchResponses, GetItemMemberTypeSearchErrors, PostMemberTypeData, PostMemberTypeResponses, PostMemberTypeErrors, DeleteMemberTypeByIdData, DeleteMemberTypeByIdResponses, DeleteMemberTypeByIdErrors, GetMemberTypeByIdData, GetMemberTypeByIdResponses, GetMemberTypeByIdErrors, PutMemberTypeByIdData, PutMemberTypeByIdResponses, PutMemberTypeByIdErrors, GetMemberTypeByIdCompositionReferencesData, GetMemberTypeByIdCompositionReferencesResponses, GetMemberTypeByIdCompositionReferencesErrors, PostMemberTypeByIdCopyData, PostMemberTypeByIdCopyResponses, PostMemberTypeByIdCopyErrors, PostMemberTypeAvailableCompositionsData, PostMemberTypeAvailableCompositionsResponses, PostMemberTypeAvailableCompositionsErrors, GetMemberTypeConfigurationData, GetMemberTypeConfigurationResponses, GetMemberTypeConfigurationErrors, GetTreeMemberTypeRootData, GetTreeMemberTypeRootResponses, GetTreeMemberTypeRootErrors, GetFilterMemberData, GetFilterMemberResponses, GetFilterMemberErrors, GetItemMemberData, GetItemMemberResponses, GetItemMemberErrors, GetItemMemberSearchData, GetItemMemberSearchResponses, GetItemMemberSearchErrors, PostMemberData, PostMemberResponses, PostMemberErrors, DeleteMemberByIdData, DeleteMemberByIdResponses, DeleteMemberByIdErrors, GetMemberByIdData, GetMemberByIdResponses, GetMemberByIdErrors, PutMemberByIdData, PutMemberByIdResponses, PutMemberByIdErrors, GetMemberByIdReferencedByData, GetMemberByIdReferencedByResponses, GetMemberByIdReferencedByErrors, GetMemberByIdReferencedDescendantsData, GetMemberByIdReferencedDescendantsResponses, GetMemberByIdReferencedDescendantsErrors, PutMemberByIdValidateData, PutMemberByIdValidateResponses, PutMemberByIdValidateErrors, GetMemberAreReferencedData, GetMemberAreReferencedResponses, GetMemberAreReferencedErrors, GetMemberConfigurationData, GetMemberConfigurationResponses, GetMemberConfigurationErrors, PostMemberValidateData, PostMemberValidateResponses, PostMemberValidateErrors, PostModelsBuilderBuildData, PostModelsBuilderBuildResponses, PostModelsBuilderBuildErrors, GetModelsBuilderDashboardData, GetModelsBuilderDashboardResponses, GetModelsBuilderDashboardErrors, GetModelsBuilderStatusData, GetModelsBuilderStatusResponses, GetModelsBuilderStatusErrors, GetObjectTypesData, GetObjectTypesResponses, GetObjectTypesErrors, GetOembedQueryData, GetOembedQueryResponses, GetOembedQueryErrors, PostPackageByNameRunMigrationData, PostPackageByNameRunMigrationResponses, PostPackageByNameRunMigrationErrors, GetPackageConfigurationData, GetPackageConfigurationResponses, GetPackageConfigurationErrors, GetPackageCreatedData, GetPackageCreatedResponses, GetPackageCreatedErrors, PostPackageCreatedData, PostPackageCreatedResponses, PostPackageCreatedErrors, DeletePackageCreatedByIdData, DeletePackageCreatedByIdResponses, DeletePackageCreatedByIdErrors, GetPackageCreatedByIdData, GetPackageCreatedByIdResponses, GetPackageCreatedByIdErrors, PutPackageCreatedByIdData, PutPackageCreatedByIdResponses, PutPackageCreatedByIdErrors, GetPackageCreatedByIdDownloadData, GetPackageCreatedByIdDownloadResponses, GetPackageCreatedByIdDownloadErrors, GetPackageMigrationStatusData, GetPackageMigrationStatusResponses, GetPackageMigrationStatusErrors, GetItemPartialViewData, GetItemPartialViewResponses, GetItemPartialViewErrors, PostPartialViewData, PostPartialViewResponses, PostPartialViewErrors, DeletePartialViewByPathData, DeletePartialViewByPathResponses, DeletePartialViewByPathErrors, GetPartialViewByPathData, GetPartialViewByPathResponses, GetPartialViewByPathErrors, PutPartialViewByPathData, PutPartialViewByPathResponses, PutPartialViewByPathErrors, PutPartialViewByPathRenameData, PutPartialViewByPathRenameResponses, PutPartialViewByPathRenameErrors, PostPartialViewFolderData, PostPartialViewFolderResponses, PostPartialViewFolderErrors, DeletePartialViewFolderByPathData, DeletePartialViewFolderByPathResponses, DeletePartialViewFolderByPathErrors, GetPartialViewFolderByPathData, GetPartialViewFolderByPathResponses, GetPartialViewFolderByPathErrors, GetPartialViewSnippetData, GetPartialViewSnippetResponses, GetPartialViewSnippetErrors, GetPartialViewSnippetByIdData, GetPartialViewSnippetByIdResponses, GetPartialViewSnippetByIdErrors, GetTreePartialViewAncestorsData, GetTreePartialViewAncestorsResponses, GetTreePartialViewAncestorsErrors, GetTreePartialViewChildrenData, GetTreePartialViewChildrenResponses, GetTreePartialViewChildrenErrors, GetTreePartialViewRootData, GetTreePartialViewRootResponses, GetTreePartialViewRootErrors, DeletePreviewData, DeletePreviewResponses, PostPreviewData, PostPreviewResponses, PostPreviewErrors, GetProfilingStatusData, GetProfilingStatusResponses, GetProfilingStatusErrors, PutProfilingStatusData, PutProfilingStatusResponses, PutProfilingStatusErrors, GetPropertyTypeIsUsedData, GetPropertyTypeIsUsedResponses, GetPropertyTypeIsUsedErrors, PostPublishedCacheRebuildData, PostPublishedCacheRebuildResponses, PostPublishedCacheRebuildErrors, GetPublishedCacheRebuildStatusData, GetPublishedCacheRebuildStatusResponses, GetPublishedCacheRebuildStatusErrors, PostPublishedCacheReloadData, PostPublishedCacheReloadResponses, PostPublishedCacheReloadErrors, GetRedirectManagementData, GetRedirectManagementResponses, GetRedirectManagementErrors, DeleteRedirectManagementByIdData, DeleteRedirectManagementByIdResponses, DeleteRedirectManagementByIdErrors, GetRedirectManagementByIdData, GetRedirectManagementByIdResponses, GetRedirectManagementByIdErrors, GetRedirectManagementStatusData, GetRedirectManagementStatusResponses, GetRedirectManagementStatusErrors, PostRedirectManagementStatusData, PostRedirectManagementStatusResponses, PostRedirectManagementStatusErrors, GetItemRelationTypeData, GetItemRelationTypeResponses, GetItemRelationTypeErrors, GetRelationTypeData, GetRelationTypeResponses, GetRelationTypeErrors, GetRelationTypeByIdData, GetRelationTypeByIdResponses, GetRelationTypeByIdErrors, GetRelationByRelationTypeIdData, GetRelationByRelationTypeIdResponses, GetRelationByRelationTypeIdErrors, GetItemScriptData, GetItemScriptResponses, GetItemScriptErrors, PostScriptData, PostScriptResponses, PostScriptErrors, DeleteScriptByPathData, DeleteScriptByPathResponses, DeleteScriptByPathErrors, GetScriptByPathData, GetScriptByPathResponses, GetScriptByPathErrors, PutScriptByPathData, PutScriptByPathResponses, PutScriptByPathErrors, PutScriptByPathRenameData, PutScriptByPathRenameResponses, PutScriptByPathRenameErrors, PostScriptFolderData, PostScriptFolderResponses, PostScriptFolderErrors, DeleteScriptFolderByPathData, DeleteScriptFolderByPathResponses, DeleteScriptFolderByPathErrors, GetScriptFolderByPathData, GetScriptFolderByPathResponses, GetScriptFolderByPathErrors, GetTreeScriptAncestorsData, GetTreeScriptAncestorsResponses, GetTreeScriptAncestorsErrors, GetTreeScriptChildrenData, GetTreeScriptChildrenResponses, GetTreeScriptChildrenErrors, GetTreeScriptRootData, GetTreeScriptRootResponses, GetTreeScriptRootErrors, GetSearcherData, GetSearcherResponses, GetSearcherErrors, GetSearcherBySearcherNameQueryData, GetSearcherBySearcherNameQueryResponses, GetSearcherBySearcherNameQueryErrors, GetSecurityConfigurationData, GetSecurityConfigurationResponses, GetSecurityConfigurationErrors, PostSecurityForgotPasswordData, PostSecurityForgotPasswordResponses, PostSecurityForgotPasswordErrors, PostSecurityForgotPasswordResetData, PostSecurityForgotPasswordResetResponses, PostSecurityForgotPasswordResetErrors, PostSecurityForgotPasswordVerifyData, PostSecurityForgotPasswordVerifyResponses, PostSecurityForgotPasswordVerifyErrors, GetSegmentData, GetSegmentResponses, GetSegmentErrors, GetServerConfigurationData, GetServerConfigurationResponses, GetServerInformationData, GetServerInformationResponses, GetServerInformationErrors, GetServerStatusData, GetServerStatusResponses, GetServerStatusErrors, GetServerTroubleshootingData, GetServerTroubleshootingResponses, GetServerTroubleshootingErrors, GetServerUpgradeCheckData, GetServerUpgradeCheckResponses, GetServerUpgradeCheckErrors, GetItemStaticFileData, GetItemStaticFileResponses, GetItemStaticFileErrors, GetTreeStaticFileAncestorsData, GetTreeStaticFileAncestorsResponses, GetTreeStaticFileAncestorsErrors, GetTreeStaticFileChildrenData, GetTreeStaticFileChildrenResponses, GetTreeStaticFileChildrenErrors, GetTreeStaticFileRootData, GetTreeStaticFileRootResponses, GetTreeStaticFileRootErrors, GetItemStylesheetData, GetItemStylesheetResponses, GetItemStylesheetErrors, PostStylesheetData, PostStylesheetResponses, PostStylesheetErrors, DeleteStylesheetByPathData, DeleteStylesheetByPathResponses, DeleteStylesheetByPathErrors, GetStylesheetByPathData, GetStylesheetByPathResponses, GetStylesheetByPathErrors, PutStylesheetByPathData, PutStylesheetByPathResponses, PutStylesheetByPathErrors, PutStylesheetByPathRenameData, PutStylesheetByPathRenameResponses, PutStylesheetByPathRenameErrors, PostStylesheetFolderData, PostStylesheetFolderResponses, PostStylesheetFolderErrors, DeleteStylesheetFolderByPathData, DeleteStylesheetFolderByPathResponses, DeleteStylesheetFolderByPathErrors, GetStylesheetFolderByPathData, GetStylesheetFolderByPathResponses, GetStylesheetFolderByPathErrors, GetTreeStylesheetAncestorsData, GetTreeStylesheetAncestorsResponses, GetTreeStylesheetAncestorsErrors, GetTreeStylesheetChildrenData, GetTreeStylesheetChildrenResponses, GetTreeStylesheetChildrenErrors, GetTreeStylesheetRootData, GetTreeStylesheetRootResponses, GetTreeStylesheetRootErrors, GetTagData, GetTagResponses, GetTagErrors, GetTelemetryData, GetTelemetryResponses, GetTelemetryErrors, GetTelemetryLevelData, GetTelemetryLevelResponses, GetTelemetryLevelErrors, PostTelemetryLevelData, PostTelemetryLevelResponses, PostTelemetryLevelErrors, GetItemTemplateData, GetItemTemplateResponses, GetItemTemplateErrors, GetItemTemplateSearchData, GetItemTemplateSearchResponses, GetItemTemplateSearchErrors, PostTemplateData, PostTemplateResponses, PostTemplateErrors, DeleteTemplateByIdData, DeleteTemplateByIdResponses, DeleteTemplateByIdErrors, GetTemplateByIdData, GetTemplateByIdResponses, GetTemplateByIdErrors, PutTemplateByIdData, PutTemplateByIdResponses, PutTemplateByIdErrors, GetTemplateConfigurationData, GetTemplateConfigurationResponses, GetTemplateConfigurationErrors, PostTemplateQueryExecuteData, PostTemplateQueryExecuteResponses, PostTemplateQueryExecuteErrors, GetTemplateQuerySettingsData, GetTemplateQuerySettingsResponses, GetTemplateQuerySettingsErrors, GetTreeTemplateAncestorsData, GetTreeTemplateAncestorsResponses, GetTreeTemplateAncestorsErrors, GetTreeTemplateChildrenData, GetTreeTemplateChildrenResponses, GetTreeTemplateChildrenErrors, GetTreeTemplateRootData, GetTreeTemplateRootResponses, GetTreeTemplateRootErrors, GetTreeTemplateSiblingsData, GetTreeTemplateSiblingsResponses, GetTreeTemplateSiblingsErrors, PostTemporaryFileData, PostTemporaryFileResponses, PostTemporaryFileErrors, DeleteTemporaryFileByIdData, DeleteTemporaryFileByIdResponses, DeleteTemporaryFileByIdErrors, GetTemporaryFileByIdData, GetTemporaryFileByIdResponses, GetTemporaryFileByIdErrors, GetTemporaryFileConfigurationData, GetTemporaryFileConfigurationResponses, GetTemporaryFileConfigurationErrors, PostUpgradeAuthorizeData, PostUpgradeAuthorizeResponses, PostUpgradeAuthorizeErrors, GetUpgradeSettingsData, GetUpgradeSettingsResponses, GetUpgradeSettingsErrors, GetUserDataData, GetUserDataResponses, GetUserDataErrors, PostUserDataData, PostUserDataResponses, PostUserDataErrors, PutUserDataData, PutUserDataResponses, PutUserDataErrors, GetUserDataByIdData, GetUserDataByIdResponses, GetUserDataByIdErrors, GetFilterUserGroupData, GetFilterUserGroupResponses, GetFilterUserGroupErrors, GetItemUserGroupData, GetItemUserGroupResponses, GetItemUserGroupErrors, DeleteUserGroupData, DeleteUserGroupResponses, DeleteUserGroupErrors, GetUserGroupData, GetUserGroupResponses, GetUserGroupErrors, PostUserGroupData, PostUserGroupResponses, PostUserGroupErrors, DeleteUserGroupByIdData, DeleteUserGroupByIdResponses, DeleteUserGroupByIdErrors, GetUserGroupByIdData, GetUserGroupByIdResponses, GetUserGroupByIdErrors, PutUserGroupByIdData, PutUserGroupByIdResponses, PutUserGroupByIdErrors, DeleteUserGroupByIdUsersData, DeleteUserGroupByIdUsersResponses, DeleteUserGroupByIdUsersErrors, PostUserGroupByIdUsersData, PostUserGroupByIdUsersResponses, PostUserGroupByIdUsersErrors, GetFilterUserData, GetFilterUserResponses, GetFilterUserErrors, GetItemUserData, GetItemUserResponses, GetItemUserErrors, DeleteUserData, DeleteUserResponses, DeleteUserErrors, GetUserData, GetUserResponses, GetUserErrors, PostUserData, PostUserResponses, PostUserErrors, DeleteUserByIdData, DeleteUserByIdResponses, DeleteUserByIdErrors, GetUserByIdData, GetUserByIdResponses, GetUserByIdErrors, PutUserByIdData, PutUserByIdResponses, PutUserByIdErrors, GetUserById2FaData, GetUserById2FaResponses, GetUserById2FaErrors, DeleteUserById2FaByProviderNameData, DeleteUserById2FaByProviderNameResponses, DeleteUserById2FaByProviderNameErrors, GetUserByIdCalculateStartNodesData, GetUserByIdCalculateStartNodesResponses, GetUserByIdCalculateStartNodesErrors, PostUserByIdChangePasswordData, PostUserByIdChangePasswordResponses, PostUserByIdChangePasswordErrors, GetUserByIdClientCredentialsData, GetUserByIdClientCredentialsResponses, GetUserByIdClientCredentialsErrors, PostUserByIdClientCredentialsData, PostUserByIdClientCredentialsResponses, PostUserByIdClientCredentialsErrors, DeleteUserByIdClientCredentialsByClientIdData, DeleteUserByIdClientCredentialsByClientIdResponses, DeleteUserByIdClientCredentialsByClientIdErrors, PostUserByIdResetPasswordData, PostUserByIdResetPasswordResponses, PostUserByIdResetPasswordErrors, DeleteUserAvatarByIdData, DeleteUserAvatarByIdResponses, DeleteUserAvatarByIdErrors, PostUserAvatarByIdData, PostUserAvatarByIdResponses, PostUserAvatarByIdErrors, GetUserConfigurationData, GetUserConfigurationResponses, GetUserConfigurationErrors, GetUserCurrentData, GetUserCurrentResponses, GetUserCurrentErrors, GetUserCurrent2FaData, GetUserCurrent2FaResponses, GetUserCurrent2FaErrors, DeleteUserCurrent2FaByProviderNameData, DeleteUserCurrent2FaByProviderNameResponses, DeleteUserCurrent2FaByProviderNameErrors, GetUserCurrent2FaByProviderNameData, GetUserCurrent2FaByProviderNameResponses, GetUserCurrent2FaByProviderNameErrors, PostUserCurrent2FaByProviderNameData, PostUserCurrent2FaByProviderNameResponses, PostUserCurrent2FaByProviderNameErrors, PostUserCurrentAvatarData, PostUserCurrentAvatarResponses, PostUserCurrentAvatarErrors, PostUserCurrentChangePasswordData, PostUserCurrentChangePasswordResponses, PostUserCurrentChangePasswordErrors, GetUserCurrentConfigurationData, GetUserCurrentConfigurationResponses, GetUserCurrentConfigurationErrors, GetUserCurrentLoginProvidersData, GetUserCurrentLoginProvidersResponses, GetUserCurrentLoginProvidersErrors, GetUserCurrentPermissionsData, GetUserCurrentPermissionsResponses, GetUserCurrentPermissionsErrors, GetUserCurrentPermissionsDocumentData, GetUserCurrentPermissionsDocumentResponses, GetUserCurrentPermissionsDocumentErrors, GetUserCurrentPermissionsMediaData, GetUserCurrentPermissionsMediaResponses, GetUserCurrentPermissionsMediaErrors, PostUserDisableData, PostUserDisableResponses, PostUserDisableErrors, PostUserEnableData, PostUserEnableResponses, PostUserEnableErrors, PostUserInviteData, PostUserInviteResponses, PostUserInviteErrors, PostUserInviteCreatePasswordData, PostUserInviteCreatePasswordResponses, PostUserInviteCreatePasswordErrors, PostUserInviteResendData, PostUserInviteResendResponses, PostUserInviteResendErrors, PostUserInviteVerifyData, PostUserInviteVerifyResponses, PostUserInviteVerifyErrors, PostUserSetUserGroupsData, PostUserSetUserGroupsResponses, PostUserSetUserGroupsErrors, PostUserUnlockData, PostUserUnlockResponses, PostUserUnlockErrors, GetItemWebhookData, GetItemWebhookResponses, GetItemWebhookErrors, GetWebhookData, GetWebhookResponses, GetWebhookErrors, PostWebhookData, PostWebhookResponses, PostWebhookErrors, DeleteWebhookByIdData, DeleteWebhookByIdResponses, DeleteWebhookByIdErrors, GetWebhookByIdData, GetWebhookByIdResponses, GetWebhookByIdErrors, PutWebhookByIdData, PutWebhookByIdResponses, PutWebhookByIdErrors, GetWebhookByIdLogsData, GetWebhookByIdLogsResponses, GetWebhookByIdLogsErrors, GetWebhookEventsData, GetWebhookEventsResponses, GetWebhookEventsErrors, GetWebhookLogsData, GetWebhookLogsResponses, GetWebhookLogsErrors } from './types.gen'; +import type { GetCultureData, GetCultureResponses, GetCultureErrors, PostDataTypeData, PostDataTypeResponses, PostDataTypeErrors, DeleteDataTypeByIdData, DeleteDataTypeByIdResponses, DeleteDataTypeByIdErrors, GetDataTypeByIdData, GetDataTypeByIdResponses, GetDataTypeByIdErrors, PutDataTypeByIdData, PutDataTypeByIdResponses, PutDataTypeByIdErrors, PostDataTypeByIdCopyData, PostDataTypeByIdCopyResponses, PostDataTypeByIdCopyErrors, GetDataTypeByIdIsUsedData, GetDataTypeByIdIsUsedResponses, GetDataTypeByIdIsUsedErrors, PutDataTypeByIdMoveData, PutDataTypeByIdMoveResponses, PutDataTypeByIdMoveErrors, GetDataTypeByIdReferencedByData, GetDataTypeByIdReferencedByResponses, GetDataTypeByIdReferencedByErrors, GetDataTypeByIdReferencesData, GetDataTypeByIdReferencesResponses, GetDataTypeByIdReferencesErrors, GetDataTypeConfigurationData, GetDataTypeConfigurationResponses, GetDataTypeConfigurationErrors, PostDataTypeFolderData, PostDataTypeFolderResponses, PostDataTypeFolderErrors, DeleteDataTypeFolderByIdData, DeleteDataTypeFolderByIdResponses, DeleteDataTypeFolderByIdErrors, GetDataTypeFolderByIdData, GetDataTypeFolderByIdResponses, GetDataTypeFolderByIdErrors, PutDataTypeFolderByIdData, PutDataTypeFolderByIdResponses, PutDataTypeFolderByIdErrors, GetFilterDataTypeData, GetFilterDataTypeResponses, GetFilterDataTypeErrors, GetItemDataTypeData, GetItemDataTypeResponses, GetItemDataTypeErrors, GetItemDataTypeSearchData, GetItemDataTypeSearchResponses, GetItemDataTypeSearchErrors, GetTreeDataTypeAncestorsData, GetTreeDataTypeAncestorsResponses, GetTreeDataTypeAncestorsErrors, GetTreeDataTypeChildrenData, GetTreeDataTypeChildrenResponses, GetTreeDataTypeChildrenErrors, GetTreeDataTypeRootData, GetTreeDataTypeRootResponses, GetTreeDataTypeRootErrors, GetTreeDataTypeSiblingsData, GetTreeDataTypeSiblingsResponses, GetTreeDataTypeSiblingsErrors, GetDictionaryData, GetDictionaryResponses, GetDictionaryErrors, PostDictionaryData, PostDictionaryResponses, PostDictionaryErrors, DeleteDictionaryByIdData, DeleteDictionaryByIdResponses, DeleteDictionaryByIdErrors, GetDictionaryByIdData, GetDictionaryByIdResponses, GetDictionaryByIdErrors, PutDictionaryByIdData, PutDictionaryByIdResponses, PutDictionaryByIdErrors, GetDictionaryByIdExportData, GetDictionaryByIdExportResponses, GetDictionaryByIdExportErrors, PutDictionaryByIdMoveData, PutDictionaryByIdMoveResponses, PutDictionaryByIdMoveErrors, PostDictionaryImportData, PostDictionaryImportResponses, PostDictionaryImportErrors, GetItemDictionaryData, GetItemDictionaryResponses, GetItemDictionaryErrors, GetTreeDictionaryAncestorsData, GetTreeDictionaryAncestorsResponses, GetTreeDictionaryAncestorsErrors, GetTreeDictionaryChildrenData, GetTreeDictionaryChildrenResponses, GetTreeDictionaryChildrenErrors, GetTreeDictionaryRootData, GetTreeDictionaryRootResponses, GetTreeDictionaryRootErrors, PostDocumentBlueprintData, PostDocumentBlueprintResponses, PostDocumentBlueprintErrors, DeleteDocumentBlueprintByIdData, DeleteDocumentBlueprintByIdResponses, DeleteDocumentBlueprintByIdErrors, GetDocumentBlueprintByIdData, GetDocumentBlueprintByIdResponses, GetDocumentBlueprintByIdErrors, PutDocumentBlueprintByIdData, PutDocumentBlueprintByIdResponses, PutDocumentBlueprintByIdErrors, PutDocumentBlueprintByIdMoveData, PutDocumentBlueprintByIdMoveResponses, PutDocumentBlueprintByIdMoveErrors, GetDocumentBlueprintByIdScaffoldData, GetDocumentBlueprintByIdScaffoldResponses, GetDocumentBlueprintByIdScaffoldErrors, PostDocumentBlueprintFolderData, PostDocumentBlueprintFolderResponses, PostDocumentBlueprintFolderErrors, DeleteDocumentBlueprintFolderByIdData, DeleteDocumentBlueprintFolderByIdResponses, DeleteDocumentBlueprintFolderByIdErrors, GetDocumentBlueprintFolderByIdData, GetDocumentBlueprintFolderByIdResponses, GetDocumentBlueprintFolderByIdErrors, PutDocumentBlueprintFolderByIdData, PutDocumentBlueprintFolderByIdResponses, PutDocumentBlueprintFolderByIdErrors, PostDocumentBlueprintFromDocumentData, PostDocumentBlueprintFromDocumentResponses, PostDocumentBlueprintFromDocumentErrors, GetItemDocumentBlueprintData, GetItemDocumentBlueprintResponses, GetItemDocumentBlueprintErrors, GetTreeDocumentBlueprintAncestorsData, GetTreeDocumentBlueprintAncestorsResponses, GetTreeDocumentBlueprintAncestorsErrors, GetTreeDocumentBlueprintChildrenData, GetTreeDocumentBlueprintChildrenResponses, GetTreeDocumentBlueprintChildrenErrors, GetTreeDocumentBlueprintRootData, GetTreeDocumentBlueprintRootResponses, GetTreeDocumentBlueprintRootErrors, GetTreeDocumentBlueprintSiblingsData, GetTreeDocumentBlueprintSiblingsResponses, GetTreeDocumentBlueprintSiblingsErrors, PostDocumentTypeData, PostDocumentTypeResponses, PostDocumentTypeErrors, DeleteDocumentTypeByIdData, DeleteDocumentTypeByIdResponses, DeleteDocumentTypeByIdErrors, GetDocumentTypeByIdData, GetDocumentTypeByIdResponses, GetDocumentTypeByIdErrors, PutDocumentTypeByIdData, PutDocumentTypeByIdResponses, PutDocumentTypeByIdErrors, GetDocumentTypeByIdAllowedChildrenData, GetDocumentTypeByIdAllowedChildrenResponses, GetDocumentTypeByIdAllowedChildrenErrors, GetDocumentTypeByIdBlueprintData, GetDocumentTypeByIdBlueprintResponses, GetDocumentTypeByIdBlueprintErrors, GetDocumentTypeByIdCompositionReferencesData, GetDocumentTypeByIdCompositionReferencesResponses, GetDocumentTypeByIdCompositionReferencesErrors, PostDocumentTypeByIdCopyData, PostDocumentTypeByIdCopyResponses, PostDocumentTypeByIdCopyErrors, GetDocumentTypeByIdExportData, GetDocumentTypeByIdExportResponses, GetDocumentTypeByIdExportErrors, PutDocumentTypeByIdImportData, PutDocumentTypeByIdImportResponses, PutDocumentTypeByIdImportErrors, PutDocumentTypeByIdMoveData, PutDocumentTypeByIdMoveResponses, PutDocumentTypeByIdMoveErrors, GetDocumentTypeAllowedAtRootData, GetDocumentTypeAllowedAtRootResponses, GetDocumentTypeAllowedAtRootErrors, PostDocumentTypeAvailableCompositionsData, PostDocumentTypeAvailableCompositionsResponses, PostDocumentTypeAvailableCompositionsErrors, GetDocumentTypeConfigurationData, GetDocumentTypeConfigurationResponses, GetDocumentTypeConfigurationErrors, PostDocumentTypeFolderData, PostDocumentTypeFolderResponses, PostDocumentTypeFolderErrors, DeleteDocumentTypeFolderByIdData, DeleteDocumentTypeFolderByIdResponses, DeleteDocumentTypeFolderByIdErrors, GetDocumentTypeFolderByIdData, GetDocumentTypeFolderByIdResponses, GetDocumentTypeFolderByIdErrors, PutDocumentTypeFolderByIdData, PutDocumentTypeFolderByIdResponses, PutDocumentTypeFolderByIdErrors, PostDocumentTypeImportData, PostDocumentTypeImportResponses, PostDocumentTypeImportErrors, GetItemDocumentTypeData, GetItemDocumentTypeResponses, GetItemDocumentTypeErrors, GetItemDocumentTypeSearchData, GetItemDocumentTypeSearchResponses, GetItemDocumentTypeSearchErrors, GetTreeDocumentTypeAncestorsData, GetTreeDocumentTypeAncestorsResponses, GetTreeDocumentTypeAncestorsErrors, GetTreeDocumentTypeChildrenData, GetTreeDocumentTypeChildrenResponses, GetTreeDocumentTypeChildrenErrors, GetTreeDocumentTypeRootData, GetTreeDocumentTypeRootResponses, GetTreeDocumentTypeRootErrors, GetTreeDocumentTypeSiblingsData, GetTreeDocumentTypeSiblingsResponses, GetTreeDocumentTypeSiblingsErrors, GetDocumentVersionData, GetDocumentVersionResponses, GetDocumentVersionErrors, GetDocumentVersionByIdData, GetDocumentVersionByIdResponses, GetDocumentVersionByIdErrors, PutDocumentVersionByIdPreventCleanupData, PutDocumentVersionByIdPreventCleanupResponses, PutDocumentVersionByIdPreventCleanupErrors, PostDocumentVersionByIdRollbackData, PostDocumentVersionByIdRollbackResponses, PostDocumentVersionByIdRollbackErrors, GetCollectionDocumentByIdData, GetCollectionDocumentByIdResponses, GetCollectionDocumentByIdErrors, PostDocumentData, PostDocumentResponses, PostDocumentErrors, DeleteDocumentByIdData, DeleteDocumentByIdResponses, DeleteDocumentByIdErrors, GetDocumentByIdData, GetDocumentByIdResponses, GetDocumentByIdErrors, PutDocumentByIdData, PutDocumentByIdResponses, PutDocumentByIdErrors, GetDocumentByIdAuditLogData, GetDocumentByIdAuditLogResponses, GetDocumentByIdAuditLogErrors, GetDocumentByIdAvailableSegmentOptionsData, GetDocumentByIdAvailableSegmentOptionsResponses, GetDocumentByIdAvailableSegmentOptionsErrors, PostDocumentByIdCopyData, PostDocumentByIdCopyResponses, PostDocumentByIdCopyErrors, GetDocumentByIdDomainsData, GetDocumentByIdDomainsResponses, GetDocumentByIdDomainsErrors, PutDocumentByIdDomainsData, PutDocumentByIdDomainsResponses, PutDocumentByIdDomainsErrors, PutDocumentByIdMoveData, PutDocumentByIdMoveResponses, PutDocumentByIdMoveErrors, PutDocumentByIdMoveToRecycleBinData, PutDocumentByIdMoveToRecycleBinResponses, PutDocumentByIdMoveToRecycleBinErrors, GetDocumentByIdNotificationsData, GetDocumentByIdNotificationsResponses, GetDocumentByIdNotificationsErrors, PutDocumentByIdNotificationsData, PutDocumentByIdNotificationsResponses, PutDocumentByIdNotificationsErrors, DeleteDocumentByIdPublicAccessData, DeleteDocumentByIdPublicAccessResponses, DeleteDocumentByIdPublicAccessErrors, GetDocumentByIdPublicAccessData, GetDocumentByIdPublicAccessResponses, GetDocumentByIdPublicAccessErrors, PostDocumentByIdPublicAccessData, PostDocumentByIdPublicAccessResponses, PostDocumentByIdPublicAccessErrors, PutDocumentByIdPublicAccessData, PutDocumentByIdPublicAccessResponses, PutDocumentByIdPublicAccessErrors, PutDocumentByIdPublishData, PutDocumentByIdPublishResponses, PutDocumentByIdPublishErrors, PutDocumentByIdPublishWithDescendantsData, PutDocumentByIdPublishWithDescendantsResponses, PutDocumentByIdPublishWithDescendantsErrors, GetDocumentByIdPublishWithDescendantsResultByTaskIdData, GetDocumentByIdPublishWithDescendantsResultByTaskIdResponses, GetDocumentByIdPublishWithDescendantsResultByTaskIdErrors, GetDocumentByIdPublishedData, GetDocumentByIdPublishedResponses, GetDocumentByIdPublishedErrors, GetDocumentByIdReferencedByData, GetDocumentByIdReferencedByResponses, GetDocumentByIdReferencedByErrors, GetDocumentByIdReferencedDescendantsData, GetDocumentByIdReferencedDescendantsResponses, GetDocumentByIdReferencedDescendantsErrors, PutDocumentByIdUnpublishData, PutDocumentByIdUnpublishResponses, PutDocumentByIdUnpublishErrors, PutUmbracoManagementApiV11DocumentByIdValidate11Data, PutUmbracoManagementApiV11DocumentByIdValidate11Responses, PutUmbracoManagementApiV11DocumentByIdValidate11Errors, GetDocumentAreReferencedData, GetDocumentAreReferencedResponses, GetDocumentAreReferencedErrors, GetDocumentConfigurationData, GetDocumentConfigurationResponses, GetDocumentConfigurationErrors, PutDocumentSortData, PutDocumentSortResponses, PutDocumentSortErrors, GetDocumentUrlsData, GetDocumentUrlsResponses, GetDocumentUrlsErrors, PostDocumentValidateData, PostDocumentValidateResponses, PostDocumentValidateErrors, GetItemDocumentData, GetItemDocumentResponses, GetItemDocumentErrors, GetItemDocumentSearchData, GetItemDocumentSearchResponses, GetItemDocumentSearchErrors, DeleteRecycleBinDocumentData, DeleteRecycleBinDocumentResponses, DeleteRecycleBinDocumentErrors, DeleteRecycleBinDocumentByIdData, DeleteRecycleBinDocumentByIdResponses, DeleteRecycleBinDocumentByIdErrors, GetRecycleBinDocumentByIdOriginalParentData, GetRecycleBinDocumentByIdOriginalParentResponses, GetRecycleBinDocumentByIdOriginalParentErrors, PutRecycleBinDocumentByIdRestoreData, PutRecycleBinDocumentByIdRestoreResponses, PutRecycleBinDocumentByIdRestoreErrors, GetRecycleBinDocumentChildrenData, GetRecycleBinDocumentChildrenResponses, GetRecycleBinDocumentChildrenErrors, GetRecycleBinDocumentReferencedByData, GetRecycleBinDocumentReferencedByResponses, GetRecycleBinDocumentReferencedByErrors, GetRecycleBinDocumentRootData, GetRecycleBinDocumentRootResponses, GetRecycleBinDocumentRootErrors, GetRecycleBinDocumentSiblingsData, GetRecycleBinDocumentSiblingsResponses, GetRecycleBinDocumentSiblingsErrors, GetTreeDocumentAncestorsData, GetTreeDocumentAncestorsResponses, GetTreeDocumentAncestorsErrors, GetTreeDocumentChildrenData, GetTreeDocumentChildrenResponses, GetTreeDocumentChildrenErrors, GetTreeDocumentRootData, GetTreeDocumentRootResponses, GetTreeDocumentRootErrors, GetTreeDocumentSiblingsData, GetTreeDocumentSiblingsResponses, GetTreeDocumentSiblingsErrors, PostDynamicRootQueryData, PostDynamicRootQueryResponses, PostDynamicRootQueryErrors, GetDynamicRootStepsData, GetDynamicRootStepsResponses, GetDynamicRootStepsErrors, GetHealthCheckGroupData, GetHealthCheckGroupResponses, GetHealthCheckGroupErrors, GetHealthCheckGroupByNameData, GetHealthCheckGroupByNameResponses, GetHealthCheckGroupByNameErrors, PostHealthCheckGroupByNameCheckData, PostHealthCheckGroupByNameCheckResponses, PostHealthCheckGroupByNameCheckErrors, PostHealthCheckExecuteActionData, PostHealthCheckExecuteActionResponses, PostHealthCheckExecuteActionErrors, GetHelpData, GetHelpResponses, GetHelpErrors, GetImagingResizeUrlsData, GetImagingResizeUrlsResponses, GetImagingResizeUrlsErrors, GetImportAnalyzeData, GetImportAnalyzeResponses, GetImportAnalyzeErrors, GetIndexerData, GetIndexerResponses, GetIndexerErrors, GetIndexerByIndexNameData, GetIndexerByIndexNameResponses, GetIndexerByIndexNameErrors, PostIndexerByIndexNameRebuildData, PostIndexerByIndexNameRebuildResponses, PostIndexerByIndexNameRebuildErrors, GetInstallSettingsData, GetInstallSettingsResponses, GetInstallSettingsErrors, PostInstallSetupData, PostInstallSetupResponses, PostInstallSetupErrors, PostInstallValidateDatabaseData, PostInstallValidateDatabaseResponses, PostInstallValidateDatabaseErrors, GetItemLanguageData, GetItemLanguageResponses, GetItemLanguageErrors, GetItemLanguageDefaultData, GetItemLanguageDefaultResponses, GetItemLanguageDefaultErrors, GetLanguageData, GetLanguageResponses, GetLanguageErrors, PostLanguageData, PostLanguageResponses, PostLanguageErrors, DeleteLanguageByIsoCodeData, DeleteLanguageByIsoCodeResponses, DeleteLanguageByIsoCodeErrors, GetLanguageByIsoCodeData, GetLanguageByIsoCodeResponses, GetLanguageByIsoCodeErrors, PutLanguageByIsoCodeData, PutLanguageByIsoCodeResponses, PutLanguageByIsoCodeErrors, GetLogViewerLevelData, GetLogViewerLevelResponses, GetLogViewerLevelErrors, GetLogViewerLevelCountData, GetLogViewerLevelCountResponses, GetLogViewerLevelCountErrors, GetLogViewerLogData, GetLogViewerLogResponses, GetLogViewerLogErrors, GetLogViewerMessageTemplateData, GetLogViewerMessageTemplateResponses, GetLogViewerMessageTemplateErrors, GetLogViewerSavedSearchData, GetLogViewerSavedSearchResponses, GetLogViewerSavedSearchErrors, PostLogViewerSavedSearchData, PostLogViewerSavedSearchResponses, PostLogViewerSavedSearchErrors, DeleteLogViewerSavedSearchByNameData, DeleteLogViewerSavedSearchByNameResponses, DeleteLogViewerSavedSearchByNameErrors, GetLogViewerSavedSearchByNameData, GetLogViewerSavedSearchByNameResponses, GetLogViewerSavedSearchByNameErrors, GetLogViewerValidateLogsSizeData, GetLogViewerValidateLogsSizeResponses, GetLogViewerValidateLogsSizeErrors, GetManifestManifestData, GetManifestManifestResponses, GetManifestManifestErrors, GetManifestManifestPrivateData, GetManifestManifestPrivateResponses, GetManifestManifestPrivateErrors, GetManifestManifestPublicData, GetManifestManifestPublicResponses, GetItemMediaTypeData, GetItemMediaTypeResponses, GetItemMediaTypeErrors, GetItemMediaTypeAllowedData, GetItemMediaTypeAllowedResponses, GetItemMediaTypeAllowedErrors, GetItemMediaTypeFoldersData, GetItemMediaTypeFoldersResponses, GetItemMediaTypeFoldersErrors, GetItemMediaTypeSearchData, GetItemMediaTypeSearchResponses, GetItemMediaTypeSearchErrors, PostMediaTypeData, PostMediaTypeResponses, PostMediaTypeErrors, DeleteMediaTypeByIdData, DeleteMediaTypeByIdResponses, DeleteMediaTypeByIdErrors, GetMediaTypeByIdData, GetMediaTypeByIdResponses, GetMediaTypeByIdErrors, PutMediaTypeByIdData, PutMediaTypeByIdResponses, PutMediaTypeByIdErrors, GetMediaTypeByIdAllowedChildrenData, GetMediaTypeByIdAllowedChildrenResponses, GetMediaTypeByIdAllowedChildrenErrors, GetMediaTypeByIdCompositionReferencesData, GetMediaTypeByIdCompositionReferencesResponses, GetMediaTypeByIdCompositionReferencesErrors, PostMediaTypeByIdCopyData, PostMediaTypeByIdCopyResponses, PostMediaTypeByIdCopyErrors, GetMediaTypeByIdExportData, GetMediaTypeByIdExportResponses, GetMediaTypeByIdExportErrors, PutMediaTypeByIdImportData, PutMediaTypeByIdImportResponses, PutMediaTypeByIdImportErrors, PutMediaTypeByIdMoveData, PutMediaTypeByIdMoveResponses, PutMediaTypeByIdMoveErrors, GetMediaTypeAllowedAtRootData, GetMediaTypeAllowedAtRootResponses, GetMediaTypeAllowedAtRootErrors, PostMediaTypeAvailableCompositionsData, PostMediaTypeAvailableCompositionsResponses, PostMediaTypeAvailableCompositionsErrors, GetMediaTypeConfigurationData, GetMediaTypeConfigurationResponses, GetMediaTypeConfigurationErrors, PostMediaTypeFolderData, PostMediaTypeFolderResponses, PostMediaTypeFolderErrors, DeleteMediaTypeFolderByIdData, DeleteMediaTypeFolderByIdResponses, DeleteMediaTypeFolderByIdErrors, GetMediaTypeFolderByIdData, GetMediaTypeFolderByIdResponses, GetMediaTypeFolderByIdErrors, PutMediaTypeFolderByIdData, PutMediaTypeFolderByIdResponses, PutMediaTypeFolderByIdErrors, PostMediaTypeImportData, PostMediaTypeImportResponses, PostMediaTypeImportErrors, GetTreeMediaTypeAncestorsData, GetTreeMediaTypeAncestorsResponses, GetTreeMediaTypeAncestorsErrors, GetTreeMediaTypeChildrenData, GetTreeMediaTypeChildrenResponses, GetTreeMediaTypeChildrenErrors, GetTreeMediaTypeRootData, GetTreeMediaTypeRootResponses, GetTreeMediaTypeRootErrors, GetTreeMediaTypeSiblingsData, GetTreeMediaTypeSiblingsResponses, GetTreeMediaTypeSiblingsErrors, GetCollectionMediaData, GetCollectionMediaResponses, GetCollectionMediaErrors, GetItemMediaData, GetItemMediaResponses, GetItemMediaErrors, GetItemMediaSearchData, GetItemMediaSearchResponses, GetItemMediaSearchErrors, PostMediaData, PostMediaResponses, PostMediaErrors, DeleteMediaByIdData, DeleteMediaByIdResponses, DeleteMediaByIdErrors, GetMediaByIdData, GetMediaByIdResponses, GetMediaByIdErrors, PutMediaByIdData, PutMediaByIdResponses, PutMediaByIdErrors, GetMediaByIdAuditLogData, GetMediaByIdAuditLogResponses, GetMediaByIdAuditLogErrors, PutMediaByIdMoveData, PutMediaByIdMoveResponses, PutMediaByIdMoveErrors, PutMediaByIdMoveToRecycleBinData, PutMediaByIdMoveToRecycleBinResponses, PutMediaByIdMoveToRecycleBinErrors, GetMediaByIdReferencedByData, GetMediaByIdReferencedByResponses, GetMediaByIdReferencedByErrors, GetMediaByIdReferencedDescendantsData, GetMediaByIdReferencedDescendantsResponses, GetMediaByIdReferencedDescendantsErrors, PutMediaByIdValidateData, PutMediaByIdValidateResponses, PutMediaByIdValidateErrors, GetMediaAreReferencedData, GetMediaAreReferencedResponses, GetMediaAreReferencedErrors, GetMediaConfigurationData, GetMediaConfigurationResponses, GetMediaConfigurationErrors, PutMediaSortData, PutMediaSortResponses, PutMediaSortErrors, GetMediaUrlsData, GetMediaUrlsResponses, GetMediaUrlsErrors, PostMediaValidateData, PostMediaValidateResponses, PostMediaValidateErrors, DeleteRecycleBinMediaData, DeleteRecycleBinMediaResponses, DeleteRecycleBinMediaErrors, DeleteRecycleBinMediaByIdData, DeleteRecycleBinMediaByIdResponses, DeleteRecycleBinMediaByIdErrors, GetRecycleBinMediaByIdOriginalParentData, GetRecycleBinMediaByIdOriginalParentResponses, GetRecycleBinMediaByIdOriginalParentErrors, PutRecycleBinMediaByIdRestoreData, PutRecycleBinMediaByIdRestoreResponses, PutRecycleBinMediaByIdRestoreErrors, GetRecycleBinMediaChildrenData, GetRecycleBinMediaChildrenResponses, GetRecycleBinMediaChildrenErrors, GetRecycleBinMediaReferencedByData, GetRecycleBinMediaReferencedByResponses, GetRecycleBinMediaReferencedByErrors, GetRecycleBinMediaRootData, GetRecycleBinMediaRootResponses, GetRecycleBinMediaRootErrors, GetRecycleBinMediaSiblingsData, GetRecycleBinMediaSiblingsResponses, GetRecycleBinMediaSiblingsErrors, GetTreeMediaAncestorsData, GetTreeMediaAncestorsResponses, GetTreeMediaAncestorsErrors, GetTreeMediaChildrenData, GetTreeMediaChildrenResponses, GetTreeMediaChildrenErrors, GetTreeMediaRootData, GetTreeMediaRootResponses, GetTreeMediaRootErrors, GetTreeMediaSiblingsData, GetTreeMediaSiblingsResponses, GetTreeMediaSiblingsErrors, GetItemMemberGroupData, GetItemMemberGroupResponses, GetItemMemberGroupErrors, GetMemberGroupData, GetMemberGroupResponses, GetMemberGroupErrors, PostMemberGroupData, PostMemberGroupResponses, PostMemberGroupErrors, DeleteMemberGroupByIdData, DeleteMemberGroupByIdResponses, DeleteMemberGroupByIdErrors, GetMemberGroupByIdData, GetMemberGroupByIdResponses, GetMemberGroupByIdErrors, PutMemberGroupByIdData, PutMemberGroupByIdResponses, PutMemberGroupByIdErrors, GetTreeMemberGroupRootData, GetTreeMemberGroupRootResponses, GetTreeMemberGroupRootErrors, GetItemMemberTypeData, GetItemMemberTypeResponses, GetItemMemberTypeErrors, GetItemMemberTypeSearchData, GetItemMemberTypeSearchResponses, GetItemMemberTypeSearchErrors, PostMemberTypeData, PostMemberTypeResponses, PostMemberTypeErrors, DeleteMemberTypeByIdData, DeleteMemberTypeByIdResponses, DeleteMemberTypeByIdErrors, GetMemberTypeByIdData, GetMemberTypeByIdResponses, GetMemberTypeByIdErrors, PutMemberTypeByIdData, PutMemberTypeByIdResponses, PutMemberTypeByIdErrors, GetMemberTypeByIdCompositionReferencesData, GetMemberTypeByIdCompositionReferencesResponses, GetMemberTypeByIdCompositionReferencesErrors, PostMemberTypeByIdCopyData, PostMemberTypeByIdCopyResponses, PostMemberTypeByIdCopyErrors, PostMemberTypeAvailableCompositionsData, PostMemberTypeAvailableCompositionsResponses, PostMemberTypeAvailableCompositionsErrors, GetMemberTypeConfigurationData, GetMemberTypeConfigurationResponses, GetMemberTypeConfigurationErrors, GetTreeMemberTypeRootData, GetTreeMemberTypeRootResponses, GetTreeMemberTypeRootErrors, GetTreeMemberTypeSiblingsData, GetTreeMemberTypeSiblingsResponses, GetTreeMemberTypeSiblingsErrors, GetFilterMemberData, GetFilterMemberResponses, GetFilterMemberErrors, GetItemMemberData, GetItemMemberResponses, GetItemMemberErrors, GetItemMemberSearchData, GetItemMemberSearchResponses, GetItemMemberSearchErrors, PostMemberData, PostMemberResponses, PostMemberErrors, DeleteMemberByIdData, DeleteMemberByIdResponses, DeleteMemberByIdErrors, GetMemberByIdData, GetMemberByIdResponses, GetMemberByIdErrors, PutMemberByIdData, PutMemberByIdResponses, PutMemberByIdErrors, GetMemberByIdReferencedByData, GetMemberByIdReferencedByResponses, GetMemberByIdReferencedByErrors, GetMemberByIdReferencedDescendantsData, GetMemberByIdReferencedDescendantsResponses, GetMemberByIdReferencedDescendantsErrors, PutMemberByIdValidateData, PutMemberByIdValidateResponses, PutMemberByIdValidateErrors, GetMemberAreReferencedData, GetMemberAreReferencedResponses, GetMemberAreReferencedErrors, GetMemberConfigurationData, GetMemberConfigurationResponses, GetMemberConfigurationErrors, PostMemberValidateData, PostMemberValidateResponses, PostMemberValidateErrors, PostModelsBuilderBuildData, PostModelsBuilderBuildResponses, PostModelsBuilderBuildErrors, GetModelsBuilderDashboardData, GetModelsBuilderDashboardResponses, GetModelsBuilderDashboardErrors, GetModelsBuilderStatusData, GetModelsBuilderStatusResponses, GetModelsBuilderStatusErrors, GetObjectTypesData, GetObjectTypesResponses, GetObjectTypesErrors, GetOembedQueryData, GetOembedQueryResponses, GetOembedQueryErrors, PostPackageByNameRunMigrationData, PostPackageByNameRunMigrationResponses, PostPackageByNameRunMigrationErrors, GetPackageConfigurationData, GetPackageConfigurationResponses, GetPackageConfigurationErrors, GetPackageCreatedData, GetPackageCreatedResponses, GetPackageCreatedErrors, PostPackageCreatedData, PostPackageCreatedResponses, PostPackageCreatedErrors, DeletePackageCreatedByIdData, DeletePackageCreatedByIdResponses, DeletePackageCreatedByIdErrors, GetPackageCreatedByIdData, GetPackageCreatedByIdResponses, GetPackageCreatedByIdErrors, PutPackageCreatedByIdData, PutPackageCreatedByIdResponses, PutPackageCreatedByIdErrors, GetPackageCreatedByIdDownloadData, GetPackageCreatedByIdDownloadResponses, GetPackageCreatedByIdDownloadErrors, GetPackageMigrationStatusData, GetPackageMigrationStatusResponses, GetPackageMigrationStatusErrors, GetItemPartialViewData, GetItemPartialViewResponses, GetItemPartialViewErrors, PostPartialViewData, PostPartialViewResponses, PostPartialViewErrors, DeletePartialViewByPathData, DeletePartialViewByPathResponses, DeletePartialViewByPathErrors, GetPartialViewByPathData, GetPartialViewByPathResponses, GetPartialViewByPathErrors, PutPartialViewByPathData, PutPartialViewByPathResponses, PutPartialViewByPathErrors, PutPartialViewByPathRenameData, PutPartialViewByPathRenameResponses, PutPartialViewByPathRenameErrors, PostPartialViewFolderData, PostPartialViewFolderResponses, PostPartialViewFolderErrors, DeletePartialViewFolderByPathData, DeletePartialViewFolderByPathResponses, DeletePartialViewFolderByPathErrors, GetPartialViewFolderByPathData, GetPartialViewFolderByPathResponses, GetPartialViewFolderByPathErrors, GetPartialViewSnippetData, GetPartialViewSnippetResponses, GetPartialViewSnippetErrors, GetPartialViewSnippetByIdData, GetPartialViewSnippetByIdResponses, GetPartialViewSnippetByIdErrors, GetTreePartialViewAncestorsData, GetTreePartialViewAncestorsResponses, GetTreePartialViewAncestorsErrors, GetTreePartialViewChildrenData, GetTreePartialViewChildrenResponses, GetTreePartialViewChildrenErrors, GetTreePartialViewRootData, GetTreePartialViewRootResponses, GetTreePartialViewRootErrors, GetTreePartialViewSiblingsData, GetTreePartialViewSiblingsResponses, GetTreePartialViewSiblingsErrors, DeletePreviewData, DeletePreviewResponses, PostPreviewData, PostPreviewResponses, PostPreviewErrors, GetProfilingStatusData, GetProfilingStatusResponses, GetProfilingStatusErrors, PutProfilingStatusData, PutProfilingStatusResponses, PutProfilingStatusErrors, GetPropertyTypeIsUsedData, GetPropertyTypeIsUsedResponses, GetPropertyTypeIsUsedErrors, PostPublishedCacheRebuildData, PostPublishedCacheRebuildResponses, PostPublishedCacheRebuildErrors, GetPublishedCacheRebuildStatusData, GetPublishedCacheRebuildStatusResponses, GetPublishedCacheRebuildStatusErrors, PostPublishedCacheReloadData, PostPublishedCacheReloadResponses, PostPublishedCacheReloadErrors, GetRedirectManagementData, GetRedirectManagementResponses, GetRedirectManagementErrors, DeleteRedirectManagementByIdData, DeleteRedirectManagementByIdResponses, DeleteRedirectManagementByIdErrors, GetRedirectManagementByIdData, GetRedirectManagementByIdResponses, GetRedirectManagementByIdErrors, GetRedirectManagementStatusData, GetRedirectManagementStatusResponses, GetRedirectManagementStatusErrors, PostRedirectManagementStatusData, PostRedirectManagementStatusResponses, PostRedirectManagementStatusErrors, GetItemRelationTypeData, GetItemRelationTypeResponses, GetItemRelationTypeErrors, GetRelationTypeData, GetRelationTypeResponses, GetRelationTypeErrors, GetRelationTypeByIdData, GetRelationTypeByIdResponses, GetRelationTypeByIdErrors, GetRelationByRelationTypeIdData, GetRelationByRelationTypeIdResponses, GetRelationByRelationTypeIdErrors, GetItemScriptData, GetItemScriptResponses, GetItemScriptErrors, PostScriptData, PostScriptResponses, PostScriptErrors, DeleteScriptByPathData, DeleteScriptByPathResponses, DeleteScriptByPathErrors, GetScriptByPathData, GetScriptByPathResponses, GetScriptByPathErrors, PutScriptByPathData, PutScriptByPathResponses, PutScriptByPathErrors, PutScriptByPathRenameData, PutScriptByPathRenameResponses, PutScriptByPathRenameErrors, PostScriptFolderData, PostScriptFolderResponses, PostScriptFolderErrors, DeleteScriptFolderByPathData, DeleteScriptFolderByPathResponses, DeleteScriptFolderByPathErrors, GetScriptFolderByPathData, GetScriptFolderByPathResponses, GetScriptFolderByPathErrors, GetTreeScriptAncestorsData, GetTreeScriptAncestorsResponses, GetTreeScriptAncestorsErrors, GetTreeScriptChildrenData, GetTreeScriptChildrenResponses, GetTreeScriptChildrenErrors, GetTreeScriptRootData, GetTreeScriptRootResponses, GetTreeScriptRootErrors, GetTreeScriptSiblingsData, GetTreeScriptSiblingsResponses, GetTreeScriptSiblingsErrors, GetSearcherData, GetSearcherResponses, GetSearcherErrors, GetSearcherBySearcherNameQueryData, GetSearcherBySearcherNameQueryResponses, GetSearcherBySearcherNameQueryErrors, GetSecurityConfigurationData, GetSecurityConfigurationResponses, GetSecurityConfigurationErrors, PostSecurityForgotPasswordData, PostSecurityForgotPasswordResponses, PostSecurityForgotPasswordErrors, PostSecurityForgotPasswordResetData, PostSecurityForgotPasswordResetResponses, PostSecurityForgotPasswordResetErrors, PostSecurityForgotPasswordVerifyData, PostSecurityForgotPasswordVerifyResponses, PostSecurityForgotPasswordVerifyErrors, GetSegmentData, GetSegmentResponses, GetSegmentErrors, GetServerConfigurationData, GetServerConfigurationResponses, GetServerInformationData, GetServerInformationResponses, GetServerInformationErrors, GetServerStatusData, GetServerStatusResponses, GetServerStatusErrors, GetServerTroubleshootingData, GetServerTroubleshootingResponses, GetServerTroubleshootingErrors, GetServerUpgradeCheckData, GetServerUpgradeCheckResponses, GetServerUpgradeCheckErrors, GetItemStaticFileData, GetItemStaticFileResponses, GetItemStaticFileErrors, GetTreeStaticFileAncestorsData, GetTreeStaticFileAncestorsResponses, GetTreeStaticFileAncestorsErrors, GetTreeStaticFileChildrenData, GetTreeStaticFileChildrenResponses, GetTreeStaticFileChildrenErrors, GetTreeStaticFileRootData, GetTreeStaticFileRootResponses, GetTreeStaticFileRootErrors, GetItemStylesheetData, GetItemStylesheetResponses, GetItemStylesheetErrors, PostStylesheetData, PostStylesheetResponses, PostStylesheetErrors, DeleteStylesheetByPathData, DeleteStylesheetByPathResponses, DeleteStylesheetByPathErrors, GetStylesheetByPathData, GetStylesheetByPathResponses, GetStylesheetByPathErrors, PutStylesheetByPathData, PutStylesheetByPathResponses, PutStylesheetByPathErrors, PutStylesheetByPathRenameData, PutStylesheetByPathRenameResponses, PutStylesheetByPathRenameErrors, PostStylesheetFolderData, PostStylesheetFolderResponses, PostStylesheetFolderErrors, DeleteStylesheetFolderByPathData, DeleteStylesheetFolderByPathResponses, DeleteStylesheetFolderByPathErrors, GetStylesheetFolderByPathData, GetStylesheetFolderByPathResponses, GetStylesheetFolderByPathErrors, GetTreeStylesheetAncestorsData, GetTreeStylesheetAncestorsResponses, GetTreeStylesheetAncestorsErrors, GetTreeStylesheetChildrenData, GetTreeStylesheetChildrenResponses, GetTreeStylesheetChildrenErrors, GetTreeStylesheetRootData, GetTreeStylesheetRootResponses, GetTreeStylesheetRootErrors, GetTreeStylesheetSiblingsData, GetTreeStylesheetSiblingsResponses, GetTreeStylesheetSiblingsErrors, GetTagData, GetTagResponses, GetTagErrors, GetTelemetryData, GetTelemetryResponses, GetTelemetryErrors, GetTelemetryLevelData, GetTelemetryLevelResponses, GetTelemetryLevelErrors, PostTelemetryLevelData, PostTelemetryLevelResponses, PostTelemetryLevelErrors, GetItemTemplateData, GetItemTemplateResponses, GetItemTemplateErrors, GetItemTemplateSearchData, GetItemTemplateSearchResponses, GetItemTemplateSearchErrors, PostTemplateData, PostTemplateResponses, PostTemplateErrors, DeleteTemplateByIdData, DeleteTemplateByIdResponses, DeleteTemplateByIdErrors, GetTemplateByIdData, GetTemplateByIdResponses, GetTemplateByIdErrors, PutTemplateByIdData, PutTemplateByIdResponses, PutTemplateByIdErrors, GetTemplateConfigurationData, GetTemplateConfigurationResponses, GetTemplateConfigurationErrors, PostTemplateQueryExecuteData, PostTemplateQueryExecuteResponses, PostTemplateQueryExecuteErrors, GetTemplateQuerySettingsData, GetTemplateQuerySettingsResponses, GetTemplateQuerySettingsErrors, GetTreeTemplateAncestorsData, GetTreeTemplateAncestorsResponses, GetTreeTemplateAncestorsErrors, GetTreeTemplateChildrenData, GetTreeTemplateChildrenResponses, GetTreeTemplateChildrenErrors, GetTreeTemplateRootData, GetTreeTemplateRootResponses, GetTreeTemplateRootErrors, GetTreeTemplateSiblingsData, GetTreeTemplateSiblingsResponses, GetTreeTemplateSiblingsErrors, PostTemporaryFileData, PostTemporaryFileResponses, PostTemporaryFileErrors, DeleteTemporaryFileByIdData, DeleteTemporaryFileByIdResponses, DeleteTemporaryFileByIdErrors, GetTemporaryFileByIdData, GetTemporaryFileByIdResponses, GetTemporaryFileByIdErrors, GetTemporaryFileConfigurationData, GetTemporaryFileConfigurationResponses, GetTemporaryFileConfigurationErrors, PostUpgradeAuthorizeData, PostUpgradeAuthorizeResponses, PostUpgradeAuthorizeErrors, GetUpgradeSettingsData, GetUpgradeSettingsResponses, GetUpgradeSettingsErrors, GetUserDataData, GetUserDataResponses, GetUserDataErrors, PostUserDataData, PostUserDataResponses, PostUserDataErrors, PutUserDataData, PutUserDataResponses, PutUserDataErrors, DeleteUserDataByIdData, DeleteUserDataByIdResponses, DeleteUserDataByIdErrors, GetUserDataByIdData, GetUserDataByIdResponses, GetUserDataByIdErrors, GetFilterUserGroupData, GetFilterUserGroupResponses, GetFilterUserGroupErrors, GetItemUserGroupData, GetItemUserGroupResponses, GetItemUserGroupErrors, DeleteUserGroupData, DeleteUserGroupResponses, DeleteUserGroupErrors, GetUserGroupData, GetUserGroupResponses, GetUserGroupErrors, PostUserGroupData, PostUserGroupResponses, PostUserGroupErrors, DeleteUserGroupByIdData, DeleteUserGroupByIdResponses, DeleteUserGroupByIdErrors, GetUserGroupByIdData, GetUserGroupByIdResponses, GetUserGroupByIdErrors, PutUserGroupByIdData, PutUserGroupByIdResponses, PutUserGroupByIdErrors, DeleteUserGroupByIdUsersData, DeleteUserGroupByIdUsersResponses, DeleteUserGroupByIdUsersErrors, PostUserGroupByIdUsersData, PostUserGroupByIdUsersResponses, PostUserGroupByIdUsersErrors, GetFilterUserData, GetFilterUserResponses, GetFilterUserErrors, GetItemUserData, GetItemUserResponses, GetItemUserErrors, DeleteUserData, DeleteUserResponses, DeleteUserErrors, GetUserData, GetUserResponses, GetUserErrors, PostUserData, PostUserResponses, PostUserErrors, DeleteUserByIdData, DeleteUserByIdResponses, DeleteUserByIdErrors, GetUserByIdData, GetUserByIdResponses, GetUserByIdErrors, PutUserByIdData, PutUserByIdResponses, PutUserByIdErrors, GetUserById2FaData, GetUserById2FaResponses, GetUserById2FaErrors, DeleteUserById2FaByProviderNameData, DeleteUserById2FaByProviderNameResponses, DeleteUserById2FaByProviderNameErrors, GetUserByIdCalculateStartNodesData, GetUserByIdCalculateStartNodesResponses, GetUserByIdCalculateStartNodesErrors, PostUserByIdChangePasswordData, PostUserByIdChangePasswordResponses, PostUserByIdChangePasswordErrors, GetUserByIdClientCredentialsData, GetUserByIdClientCredentialsResponses, GetUserByIdClientCredentialsErrors, PostUserByIdClientCredentialsData, PostUserByIdClientCredentialsResponses, PostUserByIdClientCredentialsErrors, DeleteUserByIdClientCredentialsByClientIdData, DeleteUserByIdClientCredentialsByClientIdResponses, DeleteUserByIdClientCredentialsByClientIdErrors, PostUserByIdResetPasswordData, PostUserByIdResetPasswordResponses, PostUserByIdResetPasswordErrors, DeleteUserAvatarByIdData, DeleteUserAvatarByIdResponses, DeleteUserAvatarByIdErrors, PostUserAvatarByIdData, PostUserAvatarByIdResponses, PostUserAvatarByIdErrors, GetUserConfigurationData, GetUserConfigurationResponses, GetUserConfigurationErrors, GetUserCurrentData, GetUserCurrentResponses, GetUserCurrentErrors, GetUserCurrent2FaData, GetUserCurrent2FaResponses, GetUserCurrent2FaErrors, DeleteUserCurrent2FaByProviderNameData, DeleteUserCurrent2FaByProviderNameResponses, DeleteUserCurrent2FaByProviderNameErrors, GetUserCurrent2FaByProviderNameData, GetUserCurrent2FaByProviderNameResponses, GetUserCurrent2FaByProviderNameErrors, PostUserCurrent2FaByProviderNameData, PostUserCurrent2FaByProviderNameResponses, PostUserCurrent2FaByProviderNameErrors, PostUserCurrentAvatarData, PostUserCurrentAvatarResponses, PostUserCurrentAvatarErrors, PostUserCurrentChangePasswordData, PostUserCurrentChangePasswordResponses, PostUserCurrentChangePasswordErrors, GetUserCurrentConfigurationData, GetUserCurrentConfigurationResponses, GetUserCurrentConfigurationErrors, GetUserCurrentLoginProvidersData, GetUserCurrentLoginProvidersResponses, GetUserCurrentLoginProvidersErrors, GetUserCurrentPermissionsData, GetUserCurrentPermissionsResponses, GetUserCurrentPermissionsErrors, GetUserCurrentPermissionsDocumentData, GetUserCurrentPermissionsDocumentResponses, GetUserCurrentPermissionsDocumentErrors, GetUserCurrentPermissionsMediaData, GetUserCurrentPermissionsMediaResponses, GetUserCurrentPermissionsMediaErrors, PostUserDisableData, PostUserDisableResponses, PostUserDisableErrors, PostUserEnableData, PostUserEnableResponses, PostUserEnableErrors, PostUserInviteData, PostUserInviteResponses, PostUserInviteErrors, PostUserInviteCreatePasswordData, PostUserInviteCreatePasswordResponses, PostUserInviteCreatePasswordErrors, PostUserInviteResendData, PostUserInviteResendResponses, PostUserInviteResendErrors, PostUserInviteVerifyData, PostUserInviteVerifyResponses, PostUserInviteVerifyErrors, PostUserSetUserGroupsData, PostUserSetUserGroupsResponses, PostUserSetUserGroupsErrors, PostUserUnlockData, PostUserUnlockResponses, PostUserUnlockErrors, GetItemWebhookData, GetItemWebhookResponses, GetItemWebhookErrors, GetWebhookData, GetWebhookResponses, GetWebhookErrors, PostWebhookData, PostWebhookResponses, PostWebhookErrors, DeleteWebhookByIdData, DeleteWebhookByIdResponses, DeleteWebhookByIdErrors, GetWebhookByIdData, GetWebhookByIdResponses, GetWebhookByIdErrors, PutWebhookByIdData, PutWebhookByIdResponses, PutWebhookByIdErrors, GetWebhookByIdLogsData, GetWebhookByIdLogsResponses, GetWebhookByIdLogsErrors, GetWebhookEventsData, GetWebhookEventsResponses, GetWebhookEventsErrors, GetWebhookLogsData, GetWebhookLogsResponses, GetWebhookLogsErrors } from './types.gen'; import { client as _heyApiClient } from './client.gen'; export type Options = ClientOptions & { @@ -1750,6 +1750,19 @@ export class DocumentService { }); } + public static getRecycleBinDocumentSiblings(options?: Options) { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'bearer', + type: 'http' + } + ], + url: '/umbraco/management/api/v1/recycle-bin/document/siblings', + ...options + }); + } + public static getTreeDocumentAncestors(options?: Options) { return (options?.client ?? _heyApiClient).get({ security: [ @@ -3003,6 +3016,19 @@ export class MediaService { }); } + public static getRecycleBinMediaSiblings(options?: Options) { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'bearer', + type: 'http' + } + ], + url: '/umbraco/management/api/v1/recycle-bin/media/siblings', + ...options + }); + } + public static getTreeMediaAncestors(options?: Options) { return (options?.client ?? _heyApiClient).get({ security: [ @@ -3312,6 +3338,19 @@ export class MemberTypeService { ...options }); } + + public static getTreeMemberTypeSiblings(options?: Options) { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'bearer', + type: 'http' + } + ], + url: '/umbraco/management/api/v1/tree/member-type/siblings', + ...options + }); + } } export class MemberService { @@ -3897,6 +3936,19 @@ export class PartialViewService { ...options }); } + + public static getTreePartialViewSiblings(options?: Options) { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'bearer', + type: 'http' + } + ], + url: '/umbraco/management/api/v1/tree/partial-view/siblings', + ...options + }); + } } export class PreviewService { @@ -4304,6 +4356,19 @@ export class ScriptService { ...options }); } + + public static getTreeScriptSiblings(options?: Options) { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'bearer', + type: 'http' + } + ], + url: '/umbraco/management/api/v1/tree/script/siblings', + ...options + }); + } } export class SearcherService { @@ -4690,6 +4755,19 @@ export class StylesheetService { ...options }); } + + public static getTreeStylesheetSiblings(options?: Options) { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'bearer', + type: 'http' + } + ], + url: '/umbraco/management/api/v1/tree/stylesheet/siblings', + ...options + }); + } } export class TagService { @@ -5070,6 +5148,19 @@ export class UserDataService { }); } + public static deleteUserDataById(options: Options) { + return (options.client ?? _heyApiClient).delete({ + security: [ + { + scheme: 'bearer', + type: 'http' + } + ], + url: '/umbraco/management/api/v1/user-data/{id}', + ...options + }); + } + public static getUserDataById(options: Options) { return (options.client ?? _heyApiClient).get({ security: [ diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/types.gen.ts b/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/types.gen.ts index b5dae034e03f..6d85388bbe3d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/types.gen.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/types.gen.ts @@ -2319,6 +2319,7 @@ export type ServerConfigurationResponseModel = { allowPasswordReset: boolean; versionCheckPeriod: number; allowLocalLogin: boolean; + enableMediaRecycleBinProtection: boolean; }; export type ServerInformationResponseModel = { @@ -2391,6 +2392,12 @@ export type SubsetDocumentBlueprintTreeItemResponseModel = { items: Array; }; +export type SubsetDocumentRecycleBinItemResponseModel = { + totalBefore: number; + totalAfter: number; + items: Array; +}; + export type SubsetDocumentTreeItemResponseModel = { totalBefore: number; totalAfter: number; @@ -2403,6 +2410,18 @@ export type SubsetDocumentTypeTreeItemResponseModel = { items: Array; }; +export type SubsetFileSystemTreeItemPresentationModel = { + totalBefore: number; + totalAfter: number; + items: Array; +}; + +export type SubsetMediaRecycleBinItemResponseModel = { + totalBefore: number; + totalAfter: number; + items: Array; +}; + export type SubsetMediaTreeItemResponseModel = { totalBefore: number; totalAfter: number; @@ -2415,6 +2434,12 @@ export type SubsetMediaTypeTreeItemResponseModel = { items: Array; }; +export type SubsetMemberTypeTreeItemResponseModel = { + totalBefore: number; + totalAfter: number; + items: Array; +}; + export type SubsetNamedEntityTreeItemResponseModel = { totalBefore: number; totalAfter: number; @@ -7113,6 +7138,38 @@ export type GetRecycleBinDocumentRootResponses = { export type GetRecycleBinDocumentRootResponse = GetRecycleBinDocumentRootResponses[keyof GetRecycleBinDocumentRootResponses]; +export type GetRecycleBinDocumentSiblingsData = { + body?: never; + path?: never; + query?: { + target?: string; + before?: number; + after?: number; + dataTypeId?: string; + }; + url: '/umbraco/management/api/v1/recycle-bin/document/siblings'; +}; + +export type GetRecycleBinDocumentSiblingsErrors = { + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user does not have access to this resource + */ + 403: unknown; +}; + +export type GetRecycleBinDocumentSiblingsResponses = { + /** + * OK + */ + 200: SubsetDocumentRecycleBinItemResponseModel; +}; + +export type GetRecycleBinDocumentSiblingsResponse = GetRecycleBinDocumentSiblingsResponses[keyof GetRecycleBinDocumentSiblingsResponses]; + export type GetTreeDocumentAncestorsData = { body?: never; path?: never; @@ -9976,6 +10033,38 @@ export type GetRecycleBinMediaRootResponses = { export type GetRecycleBinMediaRootResponse = GetRecycleBinMediaRootResponses[keyof GetRecycleBinMediaRootResponses]; +export type GetRecycleBinMediaSiblingsData = { + body?: never; + path?: never; + query?: { + target?: string; + before?: number; + after?: number; + dataTypeId?: string; + }; + url: '/umbraco/management/api/v1/recycle-bin/media/siblings'; +}; + +export type GetRecycleBinMediaSiblingsErrors = { + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user does not have access to this resource + */ + 403: unknown; +}; + +export type GetRecycleBinMediaSiblingsResponses = { + /** + * OK + */ + 200: SubsetMediaRecycleBinItemResponseModel; +}; + +export type GetRecycleBinMediaSiblingsResponse = GetRecycleBinMediaSiblingsResponses[keyof GetRecycleBinMediaSiblingsResponses]; + export type GetTreeMediaAncestorsData = { body?: never; path?: never; @@ -10675,6 +10764,37 @@ export type GetTreeMemberTypeRootResponses = { export type GetTreeMemberTypeRootResponse = GetTreeMemberTypeRootResponses[keyof GetTreeMemberTypeRootResponses]; +export type GetTreeMemberTypeSiblingsData = { + body?: never; + path?: never; + query?: { + target?: string; + before?: number; + after?: number; + }; + url: '/umbraco/management/api/v1/tree/member-type/siblings'; +}; + +export type GetTreeMemberTypeSiblingsErrors = { + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user does not have access to this resource + */ + 403: unknown; +}; + +export type GetTreeMemberTypeSiblingsResponses = { + /** + * OK + */ + 200: SubsetMemberTypeTreeItemResponseModel; +}; + +export type GetTreeMemberTypeSiblingsResponse = GetTreeMemberTypeSiblingsResponses[keyof GetTreeMemberTypeSiblingsResponses]; + export type GetFilterMemberData = { body?: never; path?: never; @@ -12014,6 +12134,37 @@ export type GetTreePartialViewRootResponses = { export type GetTreePartialViewRootResponse = GetTreePartialViewRootResponses[keyof GetTreePartialViewRootResponses]; +export type GetTreePartialViewSiblingsData = { + body?: never; + path?: never; + query?: { + path?: string; + before?: number; + after?: number; + }; + url: '/umbraco/management/api/v1/tree/partial-view/siblings'; +}; + +export type GetTreePartialViewSiblingsErrors = { + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user does not have access to this resource + */ + 403: unknown; +}; + +export type GetTreePartialViewSiblingsResponses = { + /** + * OK + */ + 200: SubsetFileSystemTreeItemPresentationModel; +}; + +export type GetTreePartialViewSiblingsResponse = GetTreePartialViewSiblingsResponses[keyof GetTreePartialViewSiblingsResponses]; + export type DeletePreviewData = { body?: never; path?: never; @@ -12883,6 +13034,37 @@ export type GetTreeScriptRootResponses = { export type GetTreeScriptRootResponse = GetTreeScriptRootResponses[keyof GetTreeScriptRootResponses]; +export type GetTreeScriptSiblingsData = { + body?: never; + path?: never; + query?: { + path?: string; + before?: number; + after?: number; + }; + url: '/umbraco/management/api/v1/tree/script/siblings'; +}; + +export type GetTreeScriptSiblingsErrors = { + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user does not have access to this resource + */ + 403: unknown; +}; + +export type GetTreeScriptSiblingsResponses = { + /** + * OK + */ + 200: SubsetFileSystemTreeItemPresentationModel; +}; + +export type GetTreeScriptSiblingsResponse = GetTreeScriptSiblingsResponses[keyof GetTreeScriptSiblingsResponses]; + export type GetSearcherData = { body?: never; path?: never; @@ -13720,6 +13902,37 @@ export type GetTreeStylesheetRootResponses = { export type GetTreeStylesheetRootResponse = GetTreeStylesheetRootResponses[keyof GetTreeStylesheetRootResponses]; +export type GetTreeStylesheetSiblingsData = { + body?: never; + path?: never; + query?: { + path?: string; + before?: number; + after?: number; + }; + url: '/umbraco/management/api/v1/tree/stylesheet/siblings'; +}; + +export type GetTreeStylesheetSiblingsErrors = { + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user does not have access to this resource + */ + 403: unknown; +}; + +export type GetTreeStylesheetSiblingsResponses = { + /** + * OK + */ + 200: SubsetFileSystemTreeItemPresentationModel; +}; + +export type GetTreeStylesheetSiblingsResponse = GetTreeStylesheetSiblingsResponses[keyof GetTreeStylesheetSiblingsResponses]; + export type GetTagData = { body?: never; path?: never; @@ -14514,6 +14727,39 @@ export type PutUserDataResponses = { 200: unknown; }; +export type DeleteUserDataByIdData = { + body?: never; + path: { + id: string; + }; + query?: never; + url: '/umbraco/management/api/v1/user-data/{id}'; +}; + +export type DeleteUserDataByIdErrors = { + /** + * Bad Request + */ + 400: UserDataOperationStatusModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * Not Found + */ + 404: UserDataOperationStatusModel; +}; + +export type DeleteUserDataByIdError = DeleteUserDataByIdErrors[keyof DeleteUserDataByIdErrors]; + +export type DeleteUserDataByIdResponses = { + /** + * OK + */ + 200: unknown; +}; + export type GetUserDataByIdData = { body?: never; path: { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/server/server-connection.ts b/src/Umbraco.Web.UI.Client/src/packages/core/server/server-connection.ts index 1f22522350d2..6df745f4832b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/server/server-connection.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/server/server-connection.ts @@ -20,6 +20,9 @@ export class UmbServerConnection extends UmbControllerBase { #allowPasswordReset = new UmbBooleanState(false); allowPasswordReset = this.#allowPasswordReset.asObservable(); + #enableMediaRecycleBinProtection = new UmbBooleanState(false); + enableMediaRecycleBinProtection = this.#enableMediaRecycleBinProtection.asObservable(); + constructor(host: UmbControllerHost, serverUrl: string) { super(host); this.#url = serverUrl; @@ -86,5 +89,6 @@ export class UmbServerConnection extends UmbControllerBase { this.#versionCheckPeriod.setValue(data?.versionCheckPeriod); this.#allowLocalLogin.setValue(data?.allowLocalLogin ?? false); this.#allowPasswordReset.setValue(data?.allowPasswordReset ?? false); + this.#enableMediaRecycleBinProtection.setValue(data?.enableMediaRecycleBinProtection ?? false); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/image-cropper/property-editor-ui-image-cropper.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/image-cropper/property-editor-ui-image-cropper.element.ts index e5a5f5692ace..84120dc652c7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/image-cropper/property-editor-ui-image-cropper.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/image-cropper/property-editor-ui-image-cropper.element.ts @@ -9,6 +9,8 @@ import { UMB_VALIDATION_EMPTY_LOCALIZATION_KEY, UmbFormControlMixin } from '@umb import '../../components/input-image-cropper/input-image-cropper.element.js'; import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; +import { UMB_IS_TRASHED_ENTITY_CONTEXT } from '@umbraco-cms/backoffice/recycle-bin'; +import { UMB_SERVER_CONTEXT } from '@umbraco-cms/backoffice/server'; /** * @element umb-property-editor-ui-image-cropper @@ -37,6 +39,21 @@ export class UmbPropertyEditorUIImageCropperElement this.crops = config?.getValueByAlias('crops') ?? []; } + #trashedEntityContext?: typeof UMB_IS_TRASHED_ENTITY_CONTEXT.TYPE; + #serverContext?: typeof UMB_SERVER_CONTEXT.TYPE; + + constructor() { + super(); + + this.consumeContext(UMB_IS_TRASHED_ENTITY_CONTEXT, (context) => { + this.#trashedEntityContext = context; + }) + + this.consumeContext(UMB_SERVER_CONTEXT, (context) => { + this.#serverContext = context; + }) + } + override firstUpdated() { this.addFormControlElement(this.shadowRoot!.querySelector('umb-input-image-cropper')!); } @@ -50,10 +67,34 @@ export class UmbPropertyEditorUIImageCropperElement this.dispatchEvent(new UmbChangeEvent()); } + #getValue() { + // If the media item is in the recycle bin and media recycle bin protection is on, the media file will have been + // renamed to have a .deleted suffix (e.g. media/xxx/test.png will be media/xxx/test.deleted.png on disk). + const isTrashed = this.#trashedEntityContext?.getIsTrashed(); + const mediaRecycleBinProtectionEnabled = this.#serverContext?.getServerConnection().enableMediaRecycleBinProtection; + return isTrashed && mediaRecycleBinProtectionEnabled + ? { ...this.value, src: this.#updateSrcToProtectedFile(this.value?.src) } + : this.value; + } + + #updateSrcToProtectedFile(src: string | undefined) { + if (!src) { + return undefined; + } + + const lastDotIndex = src.lastIndexOf('.'); + + if (lastDotIndex === -1) { + return src + '.deleted'; + } + + return src.slice(0, lastDotIndex) + '.deleted' + src.slice(lastDotIndex); + } + override render() { return html``; From f90ec76072dc0af3f465242cd9e11e9afa969b0e Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Mon, 6 Oct 2025 07:02:28 +0200 Subject: [PATCH 07/17] Code tidy and comments. --- ...enticationOpenIddictServerEventsHandler.cs | 31 +++++++++++++------ src/Umbraco.Core/Constants-Security.cs | 13 ++++++-- .../Extensions/StringExtensions.cs | 11 ++++--- 3 files changed, 39 insertions(+), 16 deletions(-) diff --git a/src/Umbraco.Cms.Api.Common/Security/ExposeBackOfficeAuthenticationOpenIddictServerEventsHandler.cs b/src/Umbraco.Cms.Api.Common/Security/ExposeBackOfficeAuthenticationOpenIddictServerEventsHandler.cs index afe41866361c..3ffe13c0a7b3 100644 --- a/src/Umbraco.Cms.Api.Common/Security/ExposeBackOfficeAuthenticationOpenIddictServerEventsHandler.cs +++ b/src/Umbraco.Cms.Api.Common/Security/ExposeBackOfficeAuthenticationOpenIddictServerEventsHandler.cs @@ -9,6 +9,9 @@ namespace Umbraco.Cms.Infrastructure.Security; +/// +/// Provides OpenIddict server event handlers to expose back-office authentication via a custom authentication scheme. +/// public class ExposeBackOfficeAuthenticationOpenIddictServerEventsHandler : IOpenIddictServerHandler, IOpenIddictServerHandler { @@ -16,6 +19,9 @@ public class ExposeBackOfficeAuthenticationOpenIddictServerEventsHandler : IOpen private readonly string[] _claimTypes; private readonly TimeSpan _timeOut; + /// + /// Initializes a new instance of the class. + /// public ExposeBackOfficeAuthenticationOpenIddictServerEventsHandler( IHttpContextAccessor httpContextAccessor, IOptions globalSettings, @@ -24,8 +30,9 @@ public ExposeBackOfficeAuthenticationOpenIddictServerEventsHandler( _httpContextAccessor = httpContextAccessor; _timeOut = globalSettings.Value.TimeOut; - // these are the type identifiers for the claims required by the principal - // for the custom authentication scheme + // These are the type identifiers for the claims required by the principal + // for the custom authentication scheme. + // We make available the ID, user name and allowed applications (sections) claims. _claimTypes = [ backOfficeIdentityOptions.Value.ClaimsIdentity.UserIdClaimType, @@ -34,30 +41,34 @@ public ExposeBackOfficeAuthenticationOpenIddictServerEventsHandler( ]; } - // event handler for when access tokens are generated (created or refreshed) + /// + /// + /// Event handler for when access tokens are generated (created or refreshed). + /// public async ValueTask HandleAsync(OpenIddictServerEvents.GenerateTokenContext context) { - // only proceed if this is a back-office sign-in + // Only proceed if this is a back-office sign-in. if (context.Principal.Identity?.AuthenticationType != Core.Constants.Security.BackOfficeAuthenticationType) { return; } - // create a new principal with the claims from the authenticated principal + // Create a new principal with the claims from the authenticated principal. var principal = new ClaimsPrincipal( new ClaimsIdentity( context.Principal.Claims.Where(claim => _claimTypes.Contains(claim.Type)), - Core.Constants.Security.BackOfficeExposedAuthenticationType - ) - ); + Core.Constants.Security.BackOfficeExposedAuthenticationType)); - // sign-in the new principal for the custom authentication scheme + // Sign-in the new principal for the custom authentication scheme. await _httpContextAccessor .GetRequiredHttpContext() .SignInAsync(Core.Constants.Security.BackOfficeExposedAuthenticationType, principal, GetAuthenticationProperties()); } - // event handler for when access tokens are revoked + /// + /// + /// Event handler for when access tokens are revoked. + /// public async ValueTask HandleAsync(OpenIddictServerEvents.ApplyRevocationResponseContext context) => await _httpContextAccessor .GetRequiredHttpContext() diff --git a/src/Umbraco.Core/Constants-Security.cs b/src/Umbraco.Core/Constants-Security.cs index 0f069a943029..94a446886042 100644 --- a/src/Umbraco.Core/Constants-Security.cs +++ b/src/Umbraco.Core/Constants-Security.cs @@ -69,12 +69,21 @@ public static class Security public const string BackOfficeAuthenticationType = "UmbracoBackOffice"; public const string BackOfficeExternalAuthenticationType = "UmbracoExternalCookie"; - public const string BackOfficeExposedAuthenticationType = "UmbracoBackOfficeExposed"; - public const string BackOfficeExposedCookieName = "UMB_UCONTEXT_EXPOSED"; public const string BackOfficeExternalCookieName = "UMB_EXTLOGIN"; public const string BackOfficeTokenAuthenticationType = "UmbracoBackOfficeToken"; public const string BackOfficeTwoFactorAuthenticationType = "UmbracoTwoFactorCookie"; public const string BackOfficeTwoFactorRememberMeAuthenticationType = "UmbracoTwoFactorRememberMeCookie"; + + /// + /// Authentication type and scheme used for backoffice users when it is exposed out of the backoffice context via a cookie. + /// + public const string BackOfficeExposedAuthenticationType = "UmbracoBackOfficeExposed"; + + /// + /// Represents the name of the authentication cookie used to expose the backoffice context out of the backoffice context. + /// + public const string BackOfficeExposedCookieName = "UMB_UCONTEXT_EXPOSED"; + public const string EmptyPasswordPrefix = "___UIDEMPTYPWORD__"; public const string DefaultMemberTypeAlias = "Member"; diff --git a/src/Umbraco.Web.Common/Extensions/StringExtensions.cs b/src/Umbraco.Web.Common/Extensions/StringExtensions.cs index f60d3f93381b..29cff82f62a8 100644 --- a/src/Umbraco.Web.Common/Extensions/StringExtensions.cs +++ b/src/Umbraco.Web.Common/Extensions/StringExtensions.cs @@ -2,15 +2,18 @@ namespace Umbraco.Cms.Web.Common.Extensions; internal static class StringExtensions { + /// + /// Provides a robust way to check if a path starts with another path, normalizing multiple slashes. + /// internal static bool StartsWithNormalizedPath(this string path, string other, StringComparison comparisonType = StringComparison.Ordinal) { - // First check without normalizing + // First check without normalizing. if (path.StartsWith(other, comparisonType)) { return true; } - // Normalize paths by splitting them into segments, removing multiple slashes + // Normalize paths by splitting them into segments, removing multiple slashes. var otherSegments = other.Split(Core.Constants.CharArrays.ForwardSlash, StringSplitOptions.RemoveEmptyEntries); var pathSegments = path.Split(Core.Constants.CharArrays.ForwardSlash, otherSegments.Length + 1, StringSplitOptions.RemoveEmptyEntries); @@ -20,7 +23,7 @@ internal static bool StartsWithNormalizedPath(this string path, string other, St return false; } - // Check each segment + // Check each segment. for (int i = otherSegments.Length - 1; i >= 0; i--) { if (!string.Equals(otherSegments[i], pathSegments[i], comparisonType)) @@ -29,7 +32,7 @@ internal static bool StartsWithNormalizedPath(this string path, string other, St } } - // All segments match + // All segments match. return true; } } From 98305438255f0e38be51c8b97dd0c5b0c85efc44 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Mon, 6 Oct 2025 07:05:47 +0200 Subject: [PATCH 08/17] Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../FileUploadContentDeletedNotificationHandler.cs | 2 +- .../image-cropper/property-editor-ui-image-cropper.element.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs b/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs index b8134a5dad81..b4672f74bb4c 100644 --- a/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs +++ b/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs @@ -109,7 +109,7 @@ private void SuffixContainedFiles(IEnumerable trashedMedia) } /// - /// Renames all file upload property files contained within a collection of media entities that have been restore from the recycle bin. + /// Renames all file upload property files contained within a collection of media entities that have been restored from the recycle bin. /// /// Media entities that have been restored from the recycle bin. private void RemoveSuffixFromContainedFiles(IEnumerable restoredMedia) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/image-cropper/property-editor-ui-image-cropper.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/image-cropper/property-editor-ui-image-cropper.element.ts index 84120dc652c7..2f61ad004005 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/image-cropper/property-editor-ui-image-cropper.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/image-cropper/property-editor-ui-image-cropper.element.ts @@ -47,11 +47,11 @@ export class UmbPropertyEditorUIImageCropperElement this.consumeContext(UMB_IS_TRASHED_ENTITY_CONTEXT, (context) => { this.#trashedEntityContext = context; - }) + }); this.consumeContext(UMB_SERVER_CONTEXT, (context) => { this.#serverContext = context; - }) + }); } override firstUpdated() { From 8d177498017a5cfffce532c2aad0475c48009d84 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Mon, 6 Oct 2025 07:47:57 +0200 Subject: [PATCH 09/17] Introduced helper class to DRY up repeated code between image cropper and file upload notification handlers. --- .../ImageCropperPropertyEditor.cs | 8 ++--- ...UploadContentDeletedNotificationHandler.cs | 5 ++-- .../RecycleBinMediaProtectionHelper.cs | 30 +++++++++++++++++++ 3 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/RecycleBinMediaProtectionHelper.cs diff --git a/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs b/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs index 5c3af60260ec..4ca80dab8823 100644 --- a/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs +++ b/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs @@ -14,6 +14,7 @@ using Umbraco.Cms.Core.PropertyEditors.ValueConverters; using Umbraco.Cms.Core.Serialization; using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Infrastructure.PropertyEditors.NotificationHandlers; using Umbraco.Extensions; namespace Umbraco.Cms.Core.PropertyEditors; @@ -318,7 +319,7 @@ private void DeleteContainedFiles(IEnumerable deletedEntities) private void SuffixContainedFiles(IEnumerable trashedMedia) { IEnumerable filePathsToRename = ContainedFilePaths(trashedMedia); - _mediaFileManager.SuffixMediaFiles(filePathsToRename, Constants.Conventions.Media.TrashedMediaSuffix); + RecycleBinMediaProtectionHelper.SuffixContainedFiles(filePathsToRename, _mediaFileManager); } /// @@ -327,9 +328,8 @@ private void SuffixContainedFiles(IEnumerable trashedMedia) /// Media entities that have been restored from the recycle bin. private void RemoveSuffixFromContainedFiles(IEnumerable restoredMedia) { - IEnumerable filePathsToRename = ContainedFilePaths(restoredMedia) - .Select(x => Path.ChangeExtension(x, Constants.Conventions.Media.TrashedMediaSuffix + Path.GetExtension(x))); - _mediaFileManager.RemoveSuffixFromMediaFiles(filePathsToRename, Constants.Conventions.Media.TrashedMediaSuffix); + IEnumerable filePathsToRename = ContainedFilePaths(restoredMedia); + RecycleBinMediaProtectionHelper.RemoveSuffixFromContainedFiles(filePathsToRename, _mediaFileManager); } /// diff --git a/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs b/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs index b8134a5dad81..e80ded646237 100644 --- a/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs +++ b/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs @@ -105,7 +105,7 @@ private void DeleteContainedFiles(IEnumerable deletedEntities) private void SuffixContainedFiles(IEnumerable trashedMedia) { IEnumerable filePathsToRename = ContainedFilePaths(trashedMedia); - MediaFileManager.SuffixMediaFiles(filePathsToRename, Constants.Conventions.Media.TrashedMediaSuffix); + RecycleBinMediaProtectionHelper.SuffixContainedFiles(filePathsToRename, MediaFileManager); } /// @@ -114,8 +114,7 @@ private void SuffixContainedFiles(IEnumerable trashedMedia) /// Media entities that have been restored from the recycle bin. private void RemoveSuffixFromContainedFiles(IEnumerable restoredMedia) { - IEnumerable filePathsToRename = ContainedFilePaths(restoredMedia) - .Select(x => Path.ChangeExtension(x, Constants.Conventions.Media.TrashedMediaSuffix + Path.GetExtension(x))); + IEnumerable filePathsToRename = ContainedFilePaths(restoredMedia); MediaFileManager.RemoveSuffixFromMediaFiles(filePathsToRename, Constants.Conventions.Media.TrashedMediaSuffix); } diff --git a/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/RecycleBinMediaProtectionHelper.cs b/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/RecycleBinMediaProtectionHelper.cs new file mode 100644 index 000000000000..ca540b9c6153 --- /dev/null +++ b/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/RecycleBinMediaProtectionHelper.cs @@ -0,0 +1,30 @@ +using Umbraco.Cms.Core; +using Umbraco.Cms.Core.IO; + +namespace Umbraco.Cms.Infrastructure.PropertyEditors.NotificationHandlers; + +/// +/// Provides helper methods for multiple notification handlers dealing with protection of media files for media in the recycle bin. +/// +internal static class RecycleBinMediaProtectionHelper +{ + /// + /// Renames all file upload property files contained within a collection of media entities that have been moved to the recycle bin. + /// + /// Media file paths. + /// The media file manager. + public static void SuffixContainedFiles(IEnumerable filePaths, MediaFileManager mediaFileManager) + => mediaFileManager.SuffixMediaFiles(filePaths, Constants.Conventions.Media.TrashedMediaSuffix); + + /// + /// Renames all file upload property files contained within a collection of media entities that have been restore from the recycle bin. + /// + /// Media file paths. + /// The media file manager. + public static void RemoveSuffixFromContainedFiles(IEnumerable filePaths, MediaFileManager mediaFileManager) + { + IEnumerable filePathsToRename = filePaths + .Select(x => Path.ChangeExtension(x, Constants.Conventions.Media.TrashedMediaSuffix + Path.GetExtension(x))); + mediaFileManager.RemoveSuffixFromMediaFiles(filePathsToRename, Constants.Conventions.Media.TrashedMediaSuffix); + } +} From 29e46987935b9bcb5a10d0a98e92208e1bee0726 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Mon, 6 Oct 2025 21:14:48 +0200 Subject: [PATCH 10/17] Reverted client-side and management API updates. --- .../Server/ConfigurationServerController.cs | 25 +- src/Umbraco.Cms.Api.Management/OpenApi.json | 603 +----------------- .../ServerConfigurationResponseModel.cs | 4 +- .../src/packages/core/backend-api/sdk.gen.ts | 93 +-- .../packages/core/backend-api/types.gen.ts | 246 ------- .../packages/core/server/server-connection.ts | 4 - ...roperty-editor-ui-image-cropper.element.ts | 43 +- 7 files changed, 13 insertions(+), 1005 deletions(-) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Server/ConfigurationServerController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Server/ConfigurationServerController.cs index eb714892fe8c..48a5c7d28828 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Server/ConfigurationServerController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Server/ConfigurationServerController.cs @@ -2,12 +2,10 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Umbraco.Cms.Api.Management.Security; using Umbraco.Cms.Api.Management.ViewModels.Server; using Umbraco.Cms.Core.Configuration.Models; -using Umbraco.Cms.Core.DependencyInjection; namespace Umbraco.Cms.Api.Management.Controllers.Server; @@ -16,32 +14,12 @@ public class ConfigurationServerController : ServerControllerBase { private readonly SecuritySettings _securitySettings; private readonly GlobalSettings _globalSettings; - private readonly ImagingSettings _imagingSettings; private readonly IBackOfficeExternalLoginProviders _externalLoginProviders; - [Obsolete("Please use the constructor with all parameters. Scheduled for removal in Umbraco 18.")] - public ConfigurationServerController( - IOptions securitySettings, - IOptions globalSettings, - IBackOfficeExternalLoginProviders externalLoginProviders) - : this( - securitySettings, - globalSettings, - StaticServiceProvider.Instance.GetRequiredService>(), - externalLoginProviders) - { - } - - [ActivatorUtilitiesConstructor] - public ConfigurationServerController( - IOptions securitySettings, - IOptions globalSettings, - IOptions imagingSettings, - IBackOfficeExternalLoginProviders externalLoginProviders) + public ConfigurationServerController(IOptions securitySettings, IOptions globalSettings, IBackOfficeExternalLoginProviders externalLoginProviders) { _securitySettings = securitySettings.Value; _globalSettings = globalSettings.Value; - _imagingSettings = imagingSettings.Value; _externalLoginProviders = externalLoginProviders; } @@ -56,7 +34,6 @@ public Task Configuration(CancellationToken cancellationToken) AllowPasswordReset = _securitySettings.AllowPasswordReset, VersionCheckPeriod = _globalSettings.VersionCheckPeriod, AllowLocalLogin = _externalLoginProviders.HasDenyLocalLogin() is false, - EnableMediaRecycleBinProtection = _imagingSettings.EnableMediaRecycleBinProtection, }; return Task.FromResult(Ok(responseModel)); diff --git a/src/Umbraco.Cms.Api.Management/OpenApi.json b/src/Umbraco.Cms.Api.Management/OpenApi.json index 03cea429d08d..e0dff28806ad 100644 --- a/src/Umbraco.Cms.Api.Management/OpenApi.json +++ b/src/Umbraco.Cms.Api.Management/OpenApi.json @@ -11098,75 +11098,6 @@ ] } }, - "/umbraco/management/api/v1/recycle-bin/document/siblings": { - "get": { - "tags": [ - "Document" - ], - "operationId": "GetRecycleBinDocumentSiblings", - "parameters": [ - { - "name": "target", - "in": "query", - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "before", - "in": "query", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "after", - "in": "query", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "dataTypeId", - "in": "query", - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/SubsetDocumentRecycleBinItemResponseModel" - } - ] - } - } - } - }, - "401": { - "description": "The resource is protected and requires an authentication token" - }, - "403": { - "description": "The authenticated user does not have access to this resource" - } - }, - "security": [ - { - "Backoffice-User": [ ] - } - ] - } - }, "/umbraco/management/api/v1/tree/document/ancestors": { "get": { "tags": [ @@ -18527,75 +18458,6 @@ ] } }, - "/umbraco/management/api/v1/recycle-bin/media/siblings": { - "get": { - "tags": [ - "Media" - ], - "operationId": "GetRecycleBinMediaSiblings", - "parameters": [ - { - "name": "target", - "in": "query", - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "before", - "in": "query", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "after", - "in": "query", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "dataTypeId", - "in": "query", - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/SubsetMediaRecycleBinItemResponseModel" - } - ] - } - } - } - }, - "401": { - "description": "The resource is protected and requires an authentication token" - }, - "403": { - "description": "The authenticated user does not have access to this resource" - } - }, - "security": [ - { - "Backoffice-User": [ ] - } - ] - } - }, "/umbraco/management/api/v1/tree/media/ancestors": { "get": { "tags": [ @@ -20345,67 +20207,6 @@ ] } }, - "/umbraco/management/api/v1/tree/member-type/siblings": { - "get": { - "tags": [ - "Member Type" - ], - "operationId": "GetTreeMemberTypeSiblings", - "parameters": [ - { - "name": "target", - "in": "query", - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "before", - "in": "query", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "after", - "in": "query", - "schema": { - "type": "integer", - "format": "int32" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/SubsetMemberTypeTreeItemResponseModel" - } - ] - } - } - } - }, - "401": { - "description": "The resource is protected and requires an authentication token" - }, - "403": { - "description": "The authenticated user does not have access to this resource" - } - }, - "security": [ - { - "Backoffice-User": [ ] - } - ] - } - }, "/umbraco/management/api/v1/filter/member": { "get": { "tags": [ @@ -23824,66 +23625,6 @@ ] } }, - "/umbraco/management/api/v1/tree/partial-view/siblings": { - "get": { - "tags": [ - "Partial View" - ], - "operationId": "GetTreePartialViewSiblings", - "parameters": [ - { - "name": "path", - "in": "query", - "schema": { - "type": "string" - } - }, - { - "name": "before", - "in": "query", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "after", - "in": "query", - "schema": { - "type": "integer", - "format": "int32" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/SubsetFileSystemTreeItemPresentationModel" - } - ] - } - } - } - }, - "401": { - "description": "The resource is protected and requires an authentication token" - }, - "403": { - "description": "The authenticated user does not have access to this resource" - } - }, - "security": [ - { - "Backoffice-User": [ ] - } - ] - } - }, "/umbraco/management/api/v1/preview": { "delete": { "tags": [ @@ -25819,89 +25560,29 @@ ] } }, - "/umbraco/management/api/v1/tree/script/root": { - "get": { - "tags": [ - "Script" - ], - "operationId": "GetTreeScriptRoot", - "parameters": [ - { - "name": "skip", - "in": "query", - "schema": { - "type": "integer", - "format": "int32", - "default": 0 - } - }, - { - "name": "take", - "in": "query", - "schema": { - "type": "integer", - "format": "int32", - "default": 100 - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/PagedFileSystemTreeItemPresentationModel" - } - ] - } - } - } - }, - "401": { - "description": "The resource is protected and requires an authentication token" - }, - "403": { - "description": "The authenticated user does not have access to this resource" - } - }, - "security": [ - { - "Backoffice-User": [ ] - } - ] - } - }, - "/umbraco/management/api/v1/tree/script/siblings": { + "/umbraco/management/api/v1/tree/script/root": { "get": { "tags": [ "Script" ], - "operationId": "GetTreeScriptSiblings", + "operationId": "GetTreeScriptRoot", "parameters": [ { - "name": "path", - "in": "query", - "schema": { - "type": "string" - } - }, - { - "name": "before", + "name": "skip", "in": "query", "schema": { "type": "integer", - "format": "int32" + "format": "int32", + "default": 0 } }, { - "name": "after", + "name": "take", "in": "query", "schema": { "type": "integer", - "format": "int32" + "format": "int32", + "default": 100 } } ], @@ -25913,7 +25594,7 @@ "schema": { "oneOf": [ { - "$ref": "#/components/schemas/SubsetFileSystemTreeItemPresentationModel" + "$ref": "#/components/schemas/PagedFileSystemTreeItemPresentationModel" } ] } @@ -28020,66 +27701,6 @@ ] } }, - "/umbraco/management/api/v1/tree/stylesheet/siblings": { - "get": { - "tags": [ - "Stylesheet" - ], - "operationId": "GetTreeStylesheetSiblings", - "parameters": [ - { - "name": "path", - "in": "query", - "schema": { - "type": "string" - } - }, - { - "name": "before", - "in": "query", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "after", - "in": "query", - "schema": { - "type": "integer", - "format": "int32" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/SubsetFileSystemTreeItemPresentationModel" - } - ] - } - } - } - }, - "401": { - "description": "The resource is protected and requires an authentication token" - }, - "403": { - "description": "The authenticated user does not have access to this resource" - } - }, - "security": [ - { - "Backoffice-User": [ ] - } - ] - } - }, "/umbraco/management/api/v1/tag": { "get": { "tags": [ @@ -30090,92 +29711,6 @@ "Backoffice-User": [ ] } ] - }, - "delete": { - "tags": [ - "User Data" - ], - "operationId": "DeleteUserDataById", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "Umb-Notifications": { - "description": "The list of notifications produced during the request.", - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/NotificationHeaderModel" - }, - "nullable": true - } - } - } - }, - "400": { - "description": "Bad Request", - "headers": { - "Umb-Notifications": { - "description": "The list of notifications produced during the request.", - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/NotificationHeaderModel" - }, - "nullable": true - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserDataOperationStatusModel" - } - } - } - }, - "404": { - "description": "Not Found", - "headers": { - "Umb-Notifications": { - "description": "The list of notifications produced during the request.", - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/NotificationHeaderModel" - }, - "nullable": true - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserDataOperationStatusModel" - } - } - } - }, - "401": { - "description": "The resource is protected and requires an authentication token" - } - }, - "security": [ - { - "Backoffice-User": [ ] - } - ] } }, "/umbraco/management/api/v1/filter/user-group": { @@ -45549,7 +45084,6 @@ "required": [ "allowLocalLogin", "allowPasswordReset", - "enableMediaRecycleBinProtection", "versionCheckPeriod" ], "type": "object", @@ -45563,9 +45097,6 @@ }, "allowLocalLogin": { "type": "boolean" - }, - "enableMediaRecycleBinProtection": { - "type": "boolean" } }, "additionalProperties": false @@ -45843,35 +45374,6 @@ }, "additionalProperties": false }, - "SubsetDocumentRecycleBinItemResponseModel": { - "required": [ - "items", - "totalAfter", - "totalBefore" - ], - "type": "object", - "properties": { - "totalBefore": { - "type": "integer", - "format": "int64" - }, - "totalAfter": { - "type": "integer", - "format": "int64" - }, - "items": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/DocumentRecycleBinItemResponseModel" - } - ] - } - } - }, - "additionalProperties": false - }, "SubsetDocumentTreeItemResponseModel": { "required": [ "items", @@ -45930,64 +45432,6 @@ }, "additionalProperties": false }, - "SubsetFileSystemTreeItemPresentationModel": { - "required": [ - "items", - "totalAfter", - "totalBefore" - ], - "type": "object", - "properties": { - "totalBefore": { - "type": "integer", - "format": "int64" - }, - "totalAfter": { - "type": "integer", - "format": "int64" - }, - "items": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/FileSystemTreeItemPresentationModel" - } - ] - } - } - }, - "additionalProperties": false - }, - "SubsetMediaRecycleBinItemResponseModel": { - "required": [ - "items", - "totalAfter", - "totalBefore" - ], - "type": "object", - "properties": { - "totalBefore": { - "type": "integer", - "format": "int64" - }, - "totalAfter": { - "type": "integer", - "format": "int64" - }, - "items": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/MediaRecycleBinItemResponseModel" - } - ] - } - } - }, - "additionalProperties": false - }, "SubsetMediaTreeItemResponseModel": { "required": [ "items", @@ -46046,35 +45490,6 @@ }, "additionalProperties": false }, - "SubsetMemberTypeTreeItemResponseModel": { - "required": [ - "items", - "totalAfter", - "totalBefore" - ], - "type": "object", - "properties": { - "totalBefore": { - "type": "integer", - "format": "int64" - }, - "totalAfter": { - "type": "integer", - "format": "int64" - }, - "items": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/MemberTypeTreeItemResponseModel" - } - ] - } - } - }, - "additionalProperties": false - }, "SubsetNamedEntityTreeItemResponseModel": { "required": [ "items", diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Server/ServerConfigurationResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Server/ServerConfigurationResponseModel.cs index 5ab7023d584b..9e8ef9fe7eac 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Server/ServerConfigurationResponseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Server/ServerConfigurationResponseModel.cs @@ -1,4 +1,4 @@ -namespace Umbraco.Cms.Api.Management.ViewModels.Server; +namespace Umbraco.Cms.Api.Management.ViewModels.Server; public class ServerConfigurationResponseModel { @@ -7,6 +7,4 @@ public class ServerConfigurationResponseModel public int VersionCheckPeriod { get; set; } public bool AllowLocalLogin { get; set; } - - public bool EnableMediaRecycleBinProtection { get; set; } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/sdk.gen.ts b/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/sdk.gen.ts index 8f0563c96655..f93ccb41dd3e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/sdk.gen.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/sdk.gen.ts @@ -1,7 +1,7 @@ // This file is auto-generated by @hey-api/openapi-ts import { type Options as ClientOptions, type TDataShape, type Client, formDataBodySerializer } from './client'; -import type { GetCultureData, GetCultureResponses, GetCultureErrors, PostDataTypeData, PostDataTypeResponses, PostDataTypeErrors, DeleteDataTypeByIdData, DeleteDataTypeByIdResponses, DeleteDataTypeByIdErrors, GetDataTypeByIdData, GetDataTypeByIdResponses, GetDataTypeByIdErrors, PutDataTypeByIdData, PutDataTypeByIdResponses, PutDataTypeByIdErrors, PostDataTypeByIdCopyData, PostDataTypeByIdCopyResponses, PostDataTypeByIdCopyErrors, GetDataTypeByIdIsUsedData, GetDataTypeByIdIsUsedResponses, GetDataTypeByIdIsUsedErrors, PutDataTypeByIdMoveData, PutDataTypeByIdMoveResponses, PutDataTypeByIdMoveErrors, GetDataTypeByIdReferencedByData, GetDataTypeByIdReferencedByResponses, GetDataTypeByIdReferencedByErrors, GetDataTypeByIdReferencesData, GetDataTypeByIdReferencesResponses, GetDataTypeByIdReferencesErrors, GetDataTypeConfigurationData, GetDataTypeConfigurationResponses, GetDataTypeConfigurationErrors, PostDataTypeFolderData, PostDataTypeFolderResponses, PostDataTypeFolderErrors, DeleteDataTypeFolderByIdData, DeleteDataTypeFolderByIdResponses, DeleteDataTypeFolderByIdErrors, GetDataTypeFolderByIdData, GetDataTypeFolderByIdResponses, GetDataTypeFolderByIdErrors, PutDataTypeFolderByIdData, PutDataTypeFolderByIdResponses, PutDataTypeFolderByIdErrors, GetFilterDataTypeData, GetFilterDataTypeResponses, GetFilterDataTypeErrors, GetItemDataTypeData, GetItemDataTypeResponses, GetItemDataTypeErrors, GetItemDataTypeSearchData, GetItemDataTypeSearchResponses, GetItemDataTypeSearchErrors, GetTreeDataTypeAncestorsData, GetTreeDataTypeAncestorsResponses, GetTreeDataTypeAncestorsErrors, GetTreeDataTypeChildrenData, GetTreeDataTypeChildrenResponses, GetTreeDataTypeChildrenErrors, GetTreeDataTypeRootData, GetTreeDataTypeRootResponses, GetTreeDataTypeRootErrors, GetTreeDataTypeSiblingsData, GetTreeDataTypeSiblingsResponses, GetTreeDataTypeSiblingsErrors, GetDictionaryData, GetDictionaryResponses, GetDictionaryErrors, PostDictionaryData, PostDictionaryResponses, PostDictionaryErrors, DeleteDictionaryByIdData, DeleteDictionaryByIdResponses, DeleteDictionaryByIdErrors, GetDictionaryByIdData, GetDictionaryByIdResponses, GetDictionaryByIdErrors, PutDictionaryByIdData, PutDictionaryByIdResponses, PutDictionaryByIdErrors, GetDictionaryByIdExportData, GetDictionaryByIdExportResponses, GetDictionaryByIdExportErrors, PutDictionaryByIdMoveData, PutDictionaryByIdMoveResponses, PutDictionaryByIdMoveErrors, PostDictionaryImportData, PostDictionaryImportResponses, PostDictionaryImportErrors, GetItemDictionaryData, GetItemDictionaryResponses, GetItemDictionaryErrors, GetTreeDictionaryAncestorsData, GetTreeDictionaryAncestorsResponses, GetTreeDictionaryAncestorsErrors, GetTreeDictionaryChildrenData, GetTreeDictionaryChildrenResponses, GetTreeDictionaryChildrenErrors, GetTreeDictionaryRootData, GetTreeDictionaryRootResponses, GetTreeDictionaryRootErrors, PostDocumentBlueprintData, PostDocumentBlueprintResponses, PostDocumentBlueprintErrors, DeleteDocumentBlueprintByIdData, DeleteDocumentBlueprintByIdResponses, DeleteDocumentBlueprintByIdErrors, GetDocumentBlueprintByIdData, GetDocumentBlueprintByIdResponses, GetDocumentBlueprintByIdErrors, PutDocumentBlueprintByIdData, PutDocumentBlueprintByIdResponses, PutDocumentBlueprintByIdErrors, PutDocumentBlueprintByIdMoveData, PutDocumentBlueprintByIdMoveResponses, PutDocumentBlueprintByIdMoveErrors, GetDocumentBlueprintByIdScaffoldData, GetDocumentBlueprintByIdScaffoldResponses, GetDocumentBlueprintByIdScaffoldErrors, PostDocumentBlueprintFolderData, PostDocumentBlueprintFolderResponses, PostDocumentBlueprintFolderErrors, DeleteDocumentBlueprintFolderByIdData, DeleteDocumentBlueprintFolderByIdResponses, DeleteDocumentBlueprintFolderByIdErrors, GetDocumentBlueprintFolderByIdData, GetDocumentBlueprintFolderByIdResponses, GetDocumentBlueprintFolderByIdErrors, PutDocumentBlueprintFolderByIdData, PutDocumentBlueprintFolderByIdResponses, PutDocumentBlueprintFolderByIdErrors, PostDocumentBlueprintFromDocumentData, PostDocumentBlueprintFromDocumentResponses, PostDocumentBlueprintFromDocumentErrors, GetItemDocumentBlueprintData, GetItemDocumentBlueprintResponses, GetItemDocumentBlueprintErrors, GetTreeDocumentBlueprintAncestorsData, GetTreeDocumentBlueprintAncestorsResponses, GetTreeDocumentBlueprintAncestorsErrors, GetTreeDocumentBlueprintChildrenData, GetTreeDocumentBlueprintChildrenResponses, GetTreeDocumentBlueprintChildrenErrors, GetTreeDocumentBlueprintRootData, GetTreeDocumentBlueprintRootResponses, GetTreeDocumentBlueprintRootErrors, GetTreeDocumentBlueprintSiblingsData, GetTreeDocumentBlueprintSiblingsResponses, GetTreeDocumentBlueprintSiblingsErrors, PostDocumentTypeData, PostDocumentTypeResponses, PostDocumentTypeErrors, DeleteDocumentTypeByIdData, DeleteDocumentTypeByIdResponses, DeleteDocumentTypeByIdErrors, GetDocumentTypeByIdData, GetDocumentTypeByIdResponses, GetDocumentTypeByIdErrors, PutDocumentTypeByIdData, PutDocumentTypeByIdResponses, PutDocumentTypeByIdErrors, GetDocumentTypeByIdAllowedChildrenData, GetDocumentTypeByIdAllowedChildrenResponses, GetDocumentTypeByIdAllowedChildrenErrors, GetDocumentTypeByIdBlueprintData, GetDocumentTypeByIdBlueprintResponses, GetDocumentTypeByIdBlueprintErrors, GetDocumentTypeByIdCompositionReferencesData, GetDocumentTypeByIdCompositionReferencesResponses, GetDocumentTypeByIdCompositionReferencesErrors, PostDocumentTypeByIdCopyData, PostDocumentTypeByIdCopyResponses, PostDocumentTypeByIdCopyErrors, GetDocumentTypeByIdExportData, GetDocumentTypeByIdExportResponses, GetDocumentTypeByIdExportErrors, PutDocumentTypeByIdImportData, PutDocumentTypeByIdImportResponses, PutDocumentTypeByIdImportErrors, PutDocumentTypeByIdMoveData, PutDocumentTypeByIdMoveResponses, PutDocumentTypeByIdMoveErrors, GetDocumentTypeAllowedAtRootData, GetDocumentTypeAllowedAtRootResponses, GetDocumentTypeAllowedAtRootErrors, PostDocumentTypeAvailableCompositionsData, PostDocumentTypeAvailableCompositionsResponses, PostDocumentTypeAvailableCompositionsErrors, GetDocumentTypeConfigurationData, GetDocumentTypeConfigurationResponses, GetDocumentTypeConfigurationErrors, PostDocumentTypeFolderData, PostDocumentTypeFolderResponses, PostDocumentTypeFolderErrors, DeleteDocumentTypeFolderByIdData, DeleteDocumentTypeFolderByIdResponses, DeleteDocumentTypeFolderByIdErrors, GetDocumentTypeFolderByIdData, GetDocumentTypeFolderByIdResponses, GetDocumentTypeFolderByIdErrors, PutDocumentTypeFolderByIdData, PutDocumentTypeFolderByIdResponses, PutDocumentTypeFolderByIdErrors, PostDocumentTypeImportData, PostDocumentTypeImportResponses, PostDocumentTypeImportErrors, GetItemDocumentTypeData, GetItemDocumentTypeResponses, GetItemDocumentTypeErrors, GetItemDocumentTypeSearchData, GetItemDocumentTypeSearchResponses, GetItemDocumentTypeSearchErrors, GetTreeDocumentTypeAncestorsData, GetTreeDocumentTypeAncestorsResponses, GetTreeDocumentTypeAncestorsErrors, GetTreeDocumentTypeChildrenData, GetTreeDocumentTypeChildrenResponses, GetTreeDocumentTypeChildrenErrors, GetTreeDocumentTypeRootData, GetTreeDocumentTypeRootResponses, GetTreeDocumentTypeRootErrors, GetTreeDocumentTypeSiblingsData, GetTreeDocumentTypeSiblingsResponses, GetTreeDocumentTypeSiblingsErrors, GetDocumentVersionData, GetDocumentVersionResponses, GetDocumentVersionErrors, GetDocumentVersionByIdData, GetDocumentVersionByIdResponses, GetDocumentVersionByIdErrors, PutDocumentVersionByIdPreventCleanupData, PutDocumentVersionByIdPreventCleanupResponses, PutDocumentVersionByIdPreventCleanupErrors, PostDocumentVersionByIdRollbackData, PostDocumentVersionByIdRollbackResponses, PostDocumentVersionByIdRollbackErrors, GetCollectionDocumentByIdData, GetCollectionDocumentByIdResponses, GetCollectionDocumentByIdErrors, PostDocumentData, PostDocumentResponses, PostDocumentErrors, DeleteDocumentByIdData, DeleteDocumentByIdResponses, DeleteDocumentByIdErrors, GetDocumentByIdData, GetDocumentByIdResponses, GetDocumentByIdErrors, PutDocumentByIdData, PutDocumentByIdResponses, PutDocumentByIdErrors, GetDocumentByIdAuditLogData, GetDocumentByIdAuditLogResponses, GetDocumentByIdAuditLogErrors, GetDocumentByIdAvailableSegmentOptionsData, GetDocumentByIdAvailableSegmentOptionsResponses, GetDocumentByIdAvailableSegmentOptionsErrors, PostDocumentByIdCopyData, PostDocumentByIdCopyResponses, PostDocumentByIdCopyErrors, GetDocumentByIdDomainsData, GetDocumentByIdDomainsResponses, GetDocumentByIdDomainsErrors, PutDocumentByIdDomainsData, PutDocumentByIdDomainsResponses, PutDocumentByIdDomainsErrors, PutDocumentByIdMoveData, PutDocumentByIdMoveResponses, PutDocumentByIdMoveErrors, PutDocumentByIdMoveToRecycleBinData, PutDocumentByIdMoveToRecycleBinResponses, PutDocumentByIdMoveToRecycleBinErrors, GetDocumentByIdNotificationsData, GetDocumentByIdNotificationsResponses, GetDocumentByIdNotificationsErrors, PutDocumentByIdNotificationsData, PutDocumentByIdNotificationsResponses, PutDocumentByIdNotificationsErrors, DeleteDocumentByIdPublicAccessData, DeleteDocumentByIdPublicAccessResponses, DeleteDocumentByIdPublicAccessErrors, GetDocumentByIdPublicAccessData, GetDocumentByIdPublicAccessResponses, GetDocumentByIdPublicAccessErrors, PostDocumentByIdPublicAccessData, PostDocumentByIdPublicAccessResponses, PostDocumentByIdPublicAccessErrors, PutDocumentByIdPublicAccessData, PutDocumentByIdPublicAccessResponses, PutDocumentByIdPublicAccessErrors, PutDocumentByIdPublishData, PutDocumentByIdPublishResponses, PutDocumentByIdPublishErrors, PutDocumentByIdPublishWithDescendantsData, PutDocumentByIdPublishWithDescendantsResponses, PutDocumentByIdPublishWithDescendantsErrors, GetDocumentByIdPublishWithDescendantsResultByTaskIdData, GetDocumentByIdPublishWithDescendantsResultByTaskIdResponses, GetDocumentByIdPublishWithDescendantsResultByTaskIdErrors, GetDocumentByIdPublishedData, GetDocumentByIdPublishedResponses, GetDocumentByIdPublishedErrors, GetDocumentByIdReferencedByData, GetDocumentByIdReferencedByResponses, GetDocumentByIdReferencedByErrors, GetDocumentByIdReferencedDescendantsData, GetDocumentByIdReferencedDescendantsResponses, GetDocumentByIdReferencedDescendantsErrors, PutDocumentByIdUnpublishData, PutDocumentByIdUnpublishResponses, PutDocumentByIdUnpublishErrors, PutUmbracoManagementApiV11DocumentByIdValidate11Data, PutUmbracoManagementApiV11DocumentByIdValidate11Responses, PutUmbracoManagementApiV11DocumentByIdValidate11Errors, GetDocumentAreReferencedData, GetDocumentAreReferencedResponses, GetDocumentAreReferencedErrors, GetDocumentConfigurationData, GetDocumentConfigurationResponses, GetDocumentConfigurationErrors, PutDocumentSortData, PutDocumentSortResponses, PutDocumentSortErrors, GetDocumentUrlsData, GetDocumentUrlsResponses, GetDocumentUrlsErrors, PostDocumentValidateData, PostDocumentValidateResponses, PostDocumentValidateErrors, GetItemDocumentData, GetItemDocumentResponses, GetItemDocumentErrors, GetItemDocumentSearchData, GetItemDocumentSearchResponses, GetItemDocumentSearchErrors, DeleteRecycleBinDocumentData, DeleteRecycleBinDocumentResponses, DeleteRecycleBinDocumentErrors, DeleteRecycleBinDocumentByIdData, DeleteRecycleBinDocumentByIdResponses, DeleteRecycleBinDocumentByIdErrors, GetRecycleBinDocumentByIdOriginalParentData, GetRecycleBinDocumentByIdOriginalParentResponses, GetRecycleBinDocumentByIdOriginalParentErrors, PutRecycleBinDocumentByIdRestoreData, PutRecycleBinDocumentByIdRestoreResponses, PutRecycleBinDocumentByIdRestoreErrors, GetRecycleBinDocumentChildrenData, GetRecycleBinDocumentChildrenResponses, GetRecycleBinDocumentChildrenErrors, GetRecycleBinDocumentReferencedByData, GetRecycleBinDocumentReferencedByResponses, GetRecycleBinDocumentReferencedByErrors, GetRecycleBinDocumentRootData, GetRecycleBinDocumentRootResponses, GetRecycleBinDocumentRootErrors, GetRecycleBinDocumentSiblingsData, GetRecycleBinDocumentSiblingsResponses, GetRecycleBinDocumentSiblingsErrors, GetTreeDocumentAncestorsData, GetTreeDocumentAncestorsResponses, GetTreeDocumentAncestorsErrors, GetTreeDocumentChildrenData, GetTreeDocumentChildrenResponses, GetTreeDocumentChildrenErrors, GetTreeDocumentRootData, GetTreeDocumentRootResponses, GetTreeDocumentRootErrors, GetTreeDocumentSiblingsData, GetTreeDocumentSiblingsResponses, GetTreeDocumentSiblingsErrors, PostDynamicRootQueryData, PostDynamicRootQueryResponses, PostDynamicRootQueryErrors, GetDynamicRootStepsData, GetDynamicRootStepsResponses, GetDynamicRootStepsErrors, GetHealthCheckGroupData, GetHealthCheckGroupResponses, GetHealthCheckGroupErrors, GetHealthCheckGroupByNameData, GetHealthCheckGroupByNameResponses, GetHealthCheckGroupByNameErrors, PostHealthCheckGroupByNameCheckData, PostHealthCheckGroupByNameCheckResponses, PostHealthCheckGroupByNameCheckErrors, PostHealthCheckExecuteActionData, PostHealthCheckExecuteActionResponses, PostHealthCheckExecuteActionErrors, GetHelpData, GetHelpResponses, GetHelpErrors, GetImagingResizeUrlsData, GetImagingResizeUrlsResponses, GetImagingResizeUrlsErrors, GetImportAnalyzeData, GetImportAnalyzeResponses, GetImportAnalyzeErrors, GetIndexerData, GetIndexerResponses, GetIndexerErrors, GetIndexerByIndexNameData, GetIndexerByIndexNameResponses, GetIndexerByIndexNameErrors, PostIndexerByIndexNameRebuildData, PostIndexerByIndexNameRebuildResponses, PostIndexerByIndexNameRebuildErrors, GetInstallSettingsData, GetInstallSettingsResponses, GetInstallSettingsErrors, PostInstallSetupData, PostInstallSetupResponses, PostInstallSetupErrors, PostInstallValidateDatabaseData, PostInstallValidateDatabaseResponses, PostInstallValidateDatabaseErrors, GetItemLanguageData, GetItemLanguageResponses, GetItemLanguageErrors, GetItemLanguageDefaultData, GetItemLanguageDefaultResponses, GetItemLanguageDefaultErrors, GetLanguageData, GetLanguageResponses, GetLanguageErrors, PostLanguageData, PostLanguageResponses, PostLanguageErrors, DeleteLanguageByIsoCodeData, DeleteLanguageByIsoCodeResponses, DeleteLanguageByIsoCodeErrors, GetLanguageByIsoCodeData, GetLanguageByIsoCodeResponses, GetLanguageByIsoCodeErrors, PutLanguageByIsoCodeData, PutLanguageByIsoCodeResponses, PutLanguageByIsoCodeErrors, GetLogViewerLevelData, GetLogViewerLevelResponses, GetLogViewerLevelErrors, GetLogViewerLevelCountData, GetLogViewerLevelCountResponses, GetLogViewerLevelCountErrors, GetLogViewerLogData, GetLogViewerLogResponses, GetLogViewerLogErrors, GetLogViewerMessageTemplateData, GetLogViewerMessageTemplateResponses, GetLogViewerMessageTemplateErrors, GetLogViewerSavedSearchData, GetLogViewerSavedSearchResponses, GetLogViewerSavedSearchErrors, PostLogViewerSavedSearchData, PostLogViewerSavedSearchResponses, PostLogViewerSavedSearchErrors, DeleteLogViewerSavedSearchByNameData, DeleteLogViewerSavedSearchByNameResponses, DeleteLogViewerSavedSearchByNameErrors, GetLogViewerSavedSearchByNameData, GetLogViewerSavedSearchByNameResponses, GetLogViewerSavedSearchByNameErrors, GetLogViewerValidateLogsSizeData, GetLogViewerValidateLogsSizeResponses, GetLogViewerValidateLogsSizeErrors, GetManifestManifestData, GetManifestManifestResponses, GetManifestManifestErrors, GetManifestManifestPrivateData, GetManifestManifestPrivateResponses, GetManifestManifestPrivateErrors, GetManifestManifestPublicData, GetManifestManifestPublicResponses, GetItemMediaTypeData, GetItemMediaTypeResponses, GetItemMediaTypeErrors, GetItemMediaTypeAllowedData, GetItemMediaTypeAllowedResponses, GetItemMediaTypeAllowedErrors, GetItemMediaTypeFoldersData, GetItemMediaTypeFoldersResponses, GetItemMediaTypeFoldersErrors, GetItemMediaTypeSearchData, GetItemMediaTypeSearchResponses, GetItemMediaTypeSearchErrors, PostMediaTypeData, PostMediaTypeResponses, PostMediaTypeErrors, DeleteMediaTypeByIdData, DeleteMediaTypeByIdResponses, DeleteMediaTypeByIdErrors, GetMediaTypeByIdData, GetMediaTypeByIdResponses, GetMediaTypeByIdErrors, PutMediaTypeByIdData, PutMediaTypeByIdResponses, PutMediaTypeByIdErrors, GetMediaTypeByIdAllowedChildrenData, GetMediaTypeByIdAllowedChildrenResponses, GetMediaTypeByIdAllowedChildrenErrors, GetMediaTypeByIdCompositionReferencesData, GetMediaTypeByIdCompositionReferencesResponses, GetMediaTypeByIdCompositionReferencesErrors, PostMediaTypeByIdCopyData, PostMediaTypeByIdCopyResponses, PostMediaTypeByIdCopyErrors, GetMediaTypeByIdExportData, GetMediaTypeByIdExportResponses, GetMediaTypeByIdExportErrors, PutMediaTypeByIdImportData, PutMediaTypeByIdImportResponses, PutMediaTypeByIdImportErrors, PutMediaTypeByIdMoveData, PutMediaTypeByIdMoveResponses, PutMediaTypeByIdMoveErrors, GetMediaTypeAllowedAtRootData, GetMediaTypeAllowedAtRootResponses, GetMediaTypeAllowedAtRootErrors, PostMediaTypeAvailableCompositionsData, PostMediaTypeAvailableCompositionsResponses, PostMediaTypeAvailableCompositionsErrors, GetMediaTypeConfigurationData, GetMediaTypeConfigurationResponses, GetMediaTypeConfigurationErrors, PostMediaTypeFolderData, PostMediaTypeFolderResponses, PostMediaTypeFolderErrors, DeleteMediaTypeFolderByIdData, DeleteMediaTypeFolderByIdResponses, DeleteMediaTypeFolderByIdErrors, GetMediaTypeFolderByIdData, GetMediaTypeFolderByIdResponses, GetMediaTypeFolderByIdErrors, PutMediaTypeFolderByIdData, PutMediaTypeFolderByIdResponses, PutMediaTypeFolderByIdErrors, PostMediaTypeImportData, PostMediaTypeImportResponses, PostMediaTypeImportErrors, GetTreeMediaTypeAncestorsData, GetTreeMediaTypeAncestorsResponses, GetTreeMediaTypeAncestorsErrors, GetTreeMediaTypeChildrenData, GetTreeMediaTypeChildrenResponses, GetTreeMediaTypeChildrenErrors, GetTreeMediaTypeRootData, GetTreeMediaTypeRootResponses, GetTreeMediaTypeRootErrors, GetTreeMediaTypeSiblingsData, GetTreeMediaTypeSiblingsResponses, GetTreeMediaTypeSiblingsErrors, GetCollectionMediaData, GetCollectionMediaResponses, GetCollectionMediaErrors, GetItemMediaData, GetItemMediaResponses, GetItemMediaErrors, GetItemMediaSearchData, GetItemMediaSearchResponses, GetItemMediaSearchErrors, PostMediaData, PostMediaResponses, PostMediaErrors, DeleteMediaByIdData, DeleteMediaByIdResponses, DeleteMediaByIdErrors, GetMediaByIdData, GetMediaByIdResponses, GetMediaByIdErrors, PutMediaByIdData, PutMediaByIdResponses, PutMediaByIdErrors, GetMediaByIdAuditLogData, GetMediaByIdAuditLogResponses, GetMediaByIdAuditLogErrors, PutMediaByIdMoveData, PutMediaByIdMoveResponses, PutMediaByIdMoveErrors, PutMediaByIdMoveToRecycleBinData, PutMediaByIdMoveToRecycleBinResponses, PutMediaByIdMoveToRecycleBinErrors, GetMediaByIdReferencedByData, GetMediaByIdReferencedByResponses, GetMediaByIdReferencedByErrors, GetMediaByIdReferencedDescendantsData, GetMediaByIdReferencedDescendantsResponses, GetMediaByIdReferencedDescendantsErrors, PutMediaByIdValidateData, PutMediaByIdValidateResponses, PutMediaByIdValidateErrors, GetMediaAreReferencedData, GetMediaAreReferencedResponses, GetMediaAreReferencedErrors, GetMediaConfigurationData, GetMediaConfigurationResponses, GetMediaConfigurationErrors, PutMediaSortData, PutMediaSortResponses, PutMediaSortErrors, GetMediaUrlsData, GetMediaUrlsResponses, GetMediaUrlsErrors, PostMediaValidateData, PostMediaValidateResponses, PostMediaValidateErrors, DeleteRecycleBinMediaData, DeleteRecycleBinMediaResponses, DeleteRecycleBinMediaErrors, DeleteRecycleBinMediaByIdData, DeleteRecycleBinMediaByIdResponses, DeleteRecycleBinMediaByIdErrors, GetRecycleBinMediaByIdOriginalParentData, GetRecycleBinMediaByIdOriginalParentResponses, GetRecycleBinMediaByIdOriginalParentErrors, PutRecycleBinMediaByIdRestoreData, PutRecycleBinMediaByIdRestoreResponses, PutRecycleBinMediaByIdRestoreErrors, GetRecycleBinMediaChildrenData, GetRecycleBinMediaChildrenResponses, GetRecycleBinMediaChildrenErrors, GetRecycleBinMediaReferencedByData, GetRecycleBinMediaReferencedByResponses, GetRecycleBinMediaReferencedByErrors, GetRecycleBinMediaRootData, GetRecycleBinMediaRootResponses, GetRecycleBinMediaRootErrors, GetRecycleBinMediaSiblingsData, GetRecycleBinMediaSiblingsResponses, GetRecycleBinMediaSiblingsErrors, GetTreeMediaAncestorsData, GetTreeMediaAncestorsResponses, GetTreeMediaAncestorsErrors, GetTreeMediaChildrenData, GetTreeMediaChildrenResponses, GetTreeMediaChildrenErrors, GetTreeMediaRootData, GetTreeMediaRootResponses, GetTreeMediaRootErrors, GetTreeMediaSiblingsData, GetTreeMediaSiblingsResponses, GetTreeMediaSiblingsErrors, GetItemMemberGroupData, GetItemMemberGroupResponses, GetItemMemberGroupErrors, GetMemberGroupData, GetMemberGroupResponses, GetMemberGroupErrors, PostMemberGroupData, PostMemberGroupResponses, PostMemberGroupErrors, DeleteMemberGroupByIdData, DeleteMemberGroupByIdResponses, DeleteMemberGroupByIdErrors, GetMemberGroupByIdData, GetMemberGroupByIdResponses, GetMemberGroupByIdErrors, PutMemberGroupByIdData, PutMemberGroupByIdResponses, PutMemberGroupByIdErrors, GetTreeMemberGroupRootData, GetTreeMemberGroupRootResponses, GetTreeMemberGroupRootErrors, GetItemMemberTypeData, GetItemMemberTypeResponses, GetItemMemberTypeErrors, GetItemMemberTypeSearchData, GetItemMemberTypeSearchResponses, GetItemMemberTypeSearchErrors, PostMemberTypeData, PostMemberTypeResponses, PostMemberTypeErrors, DeleteMemberTypeByIdData, DeleteMemberTypeByIdResponses, DeleteMemberTypeByIdErrors, GetMemberTypeByIdData, GetMemberTypeByIdResponses, GetMemberTypeByIdErrors, PutMemberTypeByIdData, PutMemberTypeByIdResponses, PutMemberTypeByIdErrors, GetMemberTypeByIdCompositionReferencesData, GetMemberTypeByIdCompositionReferencesResponses, GetMemberTypeByIdCompositionReferencesErrors, PostMemberTypeByIdCopyData, PostMemberTypeByIdCopyResponses, PostMemberTypeByIdCopyErrors, PostMemberTypeAvailableCompositionsData, PostMemberTypeAvailableCompositionsResponses, PostMemberTypeAvailableCompositionsErrors, GetMemberTypeConfigurationData, GetMemberTypeConfigurationResponses, GetMemberTypeConfigurationErrors, GetTreeMemberTypeRootData, GetTreeMemberTypeRootResponses, GetTreeMemberTypeRootErrors, GetTreeMemberTypeSiblingsData, GetTreeMemberTypeSiblingsResponses, GetTreeMemberTypeSiblingsErrors, GetFilterMemberData, GetFilterMemberResponses, GetFilterMemberErrors, GetItemMemberData, GetItemMemberResponses, GetItemMemberErrors, GetItemMemberSearchData, GetItemMemberSearchResponses, GetItemMemberSearchErrors, PostMemberData, PostMemberResponses, PostMemberErrors, DeleteMemberByIdData, DeleteMemberByIdResponses, DeleteMemberByIdErrors, GetMemberByIdData, GetMemberByIdResponses, GetMemberByIdErrors, PutMemberByIdData, PutMemberByIdResponses, PutMemberByIdErrors, GetMemberByIdReferencedByData, GetMemberByIdReferencedByResponses, GetMemberByIdReferencedByErrors, GetMemberByIdReferencedDescendantsData, GetMemberByIdReferencedDescendantsResponses, GetMemberByIdReferencedDescendantsErrors, PutMemberByIdValidateData, PutMemberByIdValidateResponses, PutMemberByIdValidateErrors, GetMemberAreReferencedData, GetMemberAreReferencedResponses, GetMemberAreReferencedErrors, GetMemberConfigurationData, GetMemberConfigurationResponses, GetMemberConfigurationErrors, PostMemberValidateData, PostMemberValidateResponses, PostMemberValidateErrors, PostModelsBuilderBuildData, PostModelsBuilderBuildResponses, PostModelsBuilderBuildErrors, GetModelsBuilderDashboardData, GetModelsBuilderDashboardResponses, GetModelsBuilderDashboardErrors, GetModelsBuilderStatusData, GetModelsBuilderStatusResponses, GetModelsBuilderStatusErrors, GetObjectTypesData, GetObjectTypesResponses, GetObjectTypesErrors, GetOembedQueryData, GetOembedQueryResponses, GetOembedQueryErrors, PostPackageByNameRunMigrationData, PostPackageByNameRunMigrationResponses, PostPackageByNameRunMigrationErrors, GetPackageConfigurationData, GetPackageConfigurationResponses, GetPackageConfigurationErrors, GetPackageCreatedData, GetPackageCreatedResponses, GetPackageCreatedErrors, PostPackageCreatedData, PostPackageCreatedResponses, PostPackageCreatedErrors, DeletePackageCreatedByIdData, DeletePackageCreatedByIdResponses, DeletePackageCreatedByIdErrors, GetPackageCreatedByIdData, GetPackageCreatedByIdResponses, GetPackageCreatedByIdErrors, PutPackageCreatedByIdData, PutPackageCreatedByIdResponses, PutPackageCreatedByIdErrors, GetPackageCreatedByIdDownloadData, GetPackageCreatedByIdDownloadResponses, GetPackageCreatedByIdDownloadErrors, GetPackageMigrationStatusData, GetPackageMigrationStatusResponses, GetPackageMigrationStatusErrors, GetItemPartialViewData, GetItemPartialViewResponses, GetItemPartialViewErrors, PostPartialViewData, PostPartialViewResponses, PostPartialViewErrors, DeletePartialViewByPathData, DeletePartialViewByPathResponses, DeletePartialViewByPathErrors, GetPartialViewByPathData, GetPartialViewByPathResponses, GetPartialViewByPathErrors, PutPartialViewByPathData, PutPartialViewByPathResponses, PutPartialViewByPathErrors, PutPartialViewByPathRenameData, PutPartialViewByPathRenameResponses, PutPartialViewByPathRenameErrors, PostPartialViewFolderData, PostPartialViewFolderResponses, PostPartialViewFolderErrors, DeletePartialViewFolderByPathData, DeletePartialViewFolderByPathResponses, DeletePartialViewFolderByPathErrors, GetPartialViewFolderByPathData, GetPartialViewFolderByPathResponses, GetPartialViewFolderByPathErrors, GetPartialViewSnippetData, GetPartialViewSnippetResponses, GetPartialViewSnippetErrors, GetPartialViewSnippetByIdData, GetPartialViewSnippetByIdResponses, GetPartialViewSnippetByIdErrors, GetTreePartialViewAncestorsData, GetTreePartialViewAncestorsResponses, GetTreePartialViewAncestorsErrors, GetTreePartialViewChildrenData, GetTreePartialViewChildrenResponses, GetTreePartialViewChildrenErrors, GetTreePartialViewRootData, GetTreePartialViewRootResponses, GetTreePartialViewRootErrors, GetTreePartialViewSiblingsData, GetTreePartialViewSiblingsResponses, GetTreePartialViewSiblingsErrors, DeletePreviewData, DeletePreviewResponses, PostPreviewData, PostPreviewResponses, PostPreviewErrors, GetProfilingStatusData, GetProfilingStatusResponses, GetProfilingStatusErrors, PutProfilingStatusData, PutProfilingStatusResponses, PutProfilingStatusErrors, GetPropertyTypeIsUsedData, GetPropertyTypeIsUsedResponses, GetPropertyTypeIsUsedErrors, PostPublishedCacheRebuildData, PostPublishedCacheRebuildResponses, PostPublishedCacheRebuildErrors, GetPublishedCacheRebuildStatusData, GetPublishedCacheRebuildStatusResponses, GetPublishedCacheRebuildStatusErrors, PostPublishedCacheReloadData, PostPublishedCacheReloadResponses, PostPublishedCacheReloadErrors, GetRedirectManagementData, GetRedirectManagementResponses, GetRedirectManagementErrors, DeleteRedirectManagementByIdData, DeleteRedirectManagementByIdResponses, DeleteRedirectManagementByIdErrors, GetRedirectManagementByIdData, GetRedirectManagementByIdResponses, GetRedirectManagementByIdErrors, GetRedirectManagementStatusData, GetRedirectManagementStatusResponses, GetRedirectManagementStatusErrors, PostRedirectManagementStatusData, PostRedirectManagementStatusResponses, PostRedirectManagementStatusErrors, GetItemRelationTypeData, GetItemRelationTypeResponses, GetItemRelationTypeErrors, GetRelationTypeData, GetRelationTypeResponses, GetRelationTypeErrors, GetRelationTypeByIdData, GetRelationTypeByIdResponses, GetRelationTypeByIdErrors, GetRelationByRelationTypeIdData, GetRelationByRelationTypeIdResponses, GetRelationByRelationTypeIdErrors, GetItemScriptData, GetItemScriptResponses, GetItemScriptErrors, PostScriptData, PostScriptResponses, PostScriptErrors, DeleteScriptByPathData, DeleteScriptByPathResponses, DeleteScriptByPathErrors, GetScriptByPathData, GetScriptByPathResponses, GetScriptByPathErrors, PutScriptByPathData, PutScriptByPathResponses, PutScriptByPathErrors, PutScriptByPathRenameData, PutScriptByPathRenameResponses, PutScriptByPathRenameErrors, PostScriptFolderData, PostScriptFolderResponses, PostScriptFolderErrors, DeleteScriptFolderByPathData, DeleteScriptFolderByPathResponses, DeleteScriptFolderByPathErrors, GetScriptFolderByPathData, GetScriptFolderByPathResponses, GetScriptFolderByPathErrors, GetTreeScriptAncestorsData, GetTreeScriptAncestorsResponses, GetTreeScriptAncestorsErrors, GetTreeScriptChildrenData, GetTreeScriptChildrenResponses, GetTreeScriptChildrenErrors, GetTreeScriptRootData, GetTreeScriptRootResponses, GetTreeScriptRootErrors, GetTreeScriptSiblingsData, GetTreeScriptSiblingsResponses, GetTreeScriptSiblingsErrors, GetSearcherData, GetSearcherResponses, GetSearcherErrors, GetSearcherBySearcherNameQueryData, GetSearcherBySearcherNameQueryResponses, GetSearcherBySearcherNameQueryErrors, GetSecurityConfigurationData, GetSecurityConfigurationResponses, GetSecurityConfigurationErrors, PostSecurityForgotPasswordData, PostSecurityForgotPasswordResponses, PostSecurityForgotPasswordErrors, PostSecurityForgotPasswordResetData, PostSecurityForgotPasswordResetResponses, PostSecurityForgotPasswordResetErrors, PostSecurityForgotPasswordVerifyData, PostSecurityForgotPasswordVerifyResponses, PostSecurityForgotPasswordVerifyErrors, GetSegmentData, GetSegmentResponses, GetSegmentErrors, GetServerConfigurationData, GetServerConfigurationResponses, GetServerInformationData, GetServerInformationResponses, GetServerInformationErrors, GetServerStatusData, GetServerStatusResponses, GetServerStatusErrors, GetServerTroubleshootingData, GetServerTroubleshootingResponses, GetServerTroubleshootingErrors, GetServerUpgradeCheckData, GetServerUpgradeCheckResponses, GetServerUpgradeCheckErrors, GetItemStaticFileData, GetItemStaticFileResponses, GetItemStaticFileErrors, GetTreeStaticFileAncestorsData, GetTreeStaticFileAncestorsResponses, GetTreeStaticFileAncestorsErrors, GetTreeStaticFileChildrenData, GetTreeStaticFileChildrenResponses, GetTreeStaticFileChildrenErrors, GetTreeStaticFileRootData, GetTreeStaticFileRootResponses, GetTreeStaticFileRootErrors, GetItemStylesheetData, GetItemStylesheetResponses, GetItemStylesheetErrors, PostStylesheetData, PostStylesheetResponses, PostStylesheetErrors, DeleteStylesheetByPathData, DeleteStylesheetByPathResponses, DeleteStylesheetByPathErrors, GetStylesheetByPathData, GetStylesheetByPathResponses, GetStylesheetByPathErrors, PutStylesheetByPathData, PutStylesheetByPathResponses, PutStylesheetByPathErrors, PutStylesheetByPathRenameData, PutStylesheetByPathRenameResponses, PutStylesheetByPathRenameErrors, PostStylesheetFolderData, PostStylesheetFolderResponses, PostStylesheetFolderErrors, DeleteStylesheetFolderByPathData, DeleteStylesheetFolderByPathResponses, DeleteStylesheetFolderByPathErrors, GetStylesheetFolderByPathData, GetStylesheetFolderByPathResponses, GetStylesheetFolderByPathErrors, GetTreeStylesheetAncestorsData, GetTreeStylesheetAncestorsResponses, GetTreeStylesheetAncestorsErrors, GetTreeStylesheetChildrenData, GetTreeStylesheetChildrenResponses, GetTreeStylesheetChildrenErrors, GetTreeStylesheetRootData, GetTreeStylesheetRootResponses, GetTreeStylesheetRootErrors, GetTreeStylesheetSiblingsData, GetTreeStylesheetSiblingsResponses, GetTreeStylesheetSiblingsErrors, GetTagData, GetTagResponses, GetTagErrors, GetTelemetryData, GetTelemetryResponses, GetTelemetryErrors, GetTelemetryLevelData, GetTelemetryLevelResponses, GetTelemetryLevelErrors, PostTelemetryLevelData, PostTelemetryLevelResponses, PostTelemetryLevelErrors, GetItemTemplateData, GetItemTemplateResponses, GetItemTemplateErrors, GetItemTemplateSearchData, GetItemTemplateSearchResponses, GetItemTemplateSearchErrors, PostTemplateData, PostTemplateResponses, PostTemplateErrors, DeleteTemplateByIdData, DeleteTemplateByIdResponses, DeleteTemplateByIdErrors, GetTemplateByIdData, GetTemplateByIdResponses, GetTemplateByIdErrors, PutTemplateByIdData, PutTemplateByIdResponses, PutTemplateByIdErrors, GetTemplateConfigurationData, GetTemplateConfigurationResponses, GetTemplateConfigurationErrors, PostTemplateQueryExecuteData, PostTemplateQueryExecuteResponses, PostTemplateQueryExecuteErrors, GetTemplateQuerySettingsData, GetTemplateQuerySettingsResponses, GetTemplateQuerySettingsErrors, GetTreeTemplateAncestorsData, GetTreeTemplateAncestorsResponses, GetTreeTemplateAncestorsErrors, GetTreeTemplateChildrenData, GetTreeTemplateChildrenResponses, GetTreeTemplateChildrenErrors, GetTreeTemplateRootData, GetTreeTemplateRootResponses, GetTreeTemplateRootErrors, GetTreeTemplateSiblingsData, GetTreeTemplateSiblingsResponses, GetTreeTemplateSiblingsErrors, PostTemporaryFileData, PostTemporaryFileResponses, PostTemporaryFileErrors, DeleteTemporaryFileByIdData, DeleteTemporaryFileByIdResponses, DeleteTemporaryFileByIdErrors, GetTemporaryFileByIdData, GetTemporaryFileByIdResponses, GetTemporaryFileByIdErrors, GetTemporaryFileConfigurationData, GetTemporaryFileConfigurationResponses, GetTemporaryFileConfigurationErrors, PostUpgradeAuthorizeData, PostUpgradeAuthorizeResponses, PostUpgradeAuthorizeErrors, GetUpgradeSettingsData, GetUpgradeSettingsResponses, GetUpgradeSettingsErrors, GetUserDataData, GetUserDataResponses, GetUserDataErrors, PostUserDataData, PostUserDataResponses, PostUserDataErrors, PutUserDataData, PutUserDataResponses, PutUserDataErrors, DeleteUserDataByIdData, DeleteUserDataByIdResponses, DeleteUserDataByIdErrors, GetUserDataByIdData, GetUserDataByIdResponses, GetUserDataByIdErrors, GetFilterUserGroupData, GetFilterUserGroupResponses, GetFilterUserGroupErrors, GetItemUserGroupData, GetItemUserGroupResponses, GetItemUserGroupErrors, DeleteUserGroupData, DeleteUserGroupResponses, DeleteUserGroupErrors, GetUserGroupData, GetUserGroupResponses, GetUserGroupErrors, PostUserGroupData, PostUserGroupResponses, PostUserGroupErrors, DeleteUserGroupByIdData, DeleteUserGroupByIdResponses, DeleteUserGroupByIdErrors, GetUserGroupByIdData, GetUserGroupByIdResponses, GetUserGroupByIdErrors, PutUserGroupByIdData, PutUserGroupByIdResponses, PutUserGroupByIdErrors, DeleteUserGroupByIdUsersData, DeleteUserGroupByIdUsersResponses, DeleteUserGroupByIdUsersErrors, PostUserGroupByIdUsersData, PostUserGroupByIdUsersResponses, PostUserGroupByIdUsersErrors, GetFilterUserData, GetFilterUserResponses, GetFilterUserErrors, GetItemUserData, GetItemUserResponses, GetItemUserErrors, DeleteUserData, DeleteUserResponses, DeleteUserErrors, GetUserData, GetUserResponses, GetUserErrors, PostUserData, PostUserResponses, PostUserErrors, DeleteUserByIdData, DeleteUserByIdResponses, DeleteUserByIdErrors, GetUserByIdData, GetUserByIdResponses, GetUserByIdErrors, PutUserByIdData, PutUserByIdResponses, PutUserByIdErrors, GetUserById2FaData, GetUserById2FaResponses, GetUserById2FaErrors, DeleteUserById2FaByProviderNameData, DeleteUserById2FaByProviderNameResponses, DeleteUserById2FaByProviderNameErrors, GetUserByIdCalculateStartNodesData, GetUserByIdCalculateStartNodesResponses, GetUserByIdCalculateStartNodesErrors, PostUserByIdChangePasswordData, PostUserByIdChangePasswordResponses, PostUserByIdChangePasswordErrors, GetUserByIdClientCredentialsData, GetUserByIdClientCredentialsResponses, GetUserByIdClientCredentialsErrors, PostUserByIdClientCredentialsData, PostUserByIdClientCredentialsResponses, PostUserByIdClientCredentialsErrors, DeleteUserByIdClientCredentialsByClientIdData, DeleteUserByIdClientCredentialsByClientIdResponses, DeleteUserByIdClientCredentialsByClientIdErrors, PostUserByIdResetPasswordData, PostUserByIdResetPasswordResponses, PostUserByIdResetPasswordErrors, DeleteUserAvatarByIdData, DeleteUserAvatarByIdResponses, DeleteUserAvatarByIdErrors, PostUserAvatarByIdData, PostUserAvatarByIdResponses, PostUserAvatarByIdErrors, GetUserConfigurationData, GetUserConfigurationResponses, GetUserConfigurationErrors, GetUserCurrentData, GetUserCurrentResponses, GetUserCurrentErrors, GetUserCurrent2FaData, GetUserCurrent2FaResponses, GetUserCurrent2FaErrors, DeleteUserCurrent2FaByProviderNameData, DeleteUserCurrent2FaByProviderNameResponses, DeleteUserCurrent2FaByProviderNameErrors, GetUserCurrent2FaByProviderNameData, GetUserCurrent2FaByProviderNameResponses, GetUserCurrent2FaByProviderNameErrors, PostUserCurrent2FaByProviderNameData, PostUserCurrent2FaByProviderNameResponses, PostUserCurrent2FaByProviderNameErrors, PostUserCurrentAvatarData, PostUserCurrentAvatarResponses, PostUserCurrentAvatarErrors, PostUserCurrentChangePasswordData, PostUserCurrentChangePasswordResponses, PostUserCurrentChangePasswordErrors, GetUserCurrentConfigurationData, GetUserCurrentConfigurationResponses, GetUserCurrentConfigurationErrors, GetUserCurrentLoginProvidersData, GetUserCurrentLoginProvidersResponses, GetUserCurrentLoginProvidersErrors, GetUserCurrentPermissionsData, GetUserCurrentPermissionsResponses, GetUserCurrentPermissionsErrors, GetUserCurrentPermissionsDocumentData, GetUserCurrentPermissionsDocumentResponses, GetUserCurrentPermissionsDocumentErrors, GetUserCurrentPermissionsMediaData, GetUserCurrentPermissionsMediaResponses, GetUserCurrentPermissionsMediaErrors, PostUserDisableData, PostUserDisableResponses, PostUserDisableErrors, PostUserEnableData, PostUserEnableResponses, PostUserEnableErrors, PostUserInviteData, PostUserInviteResponses, PostUserInviteErrors, PostUserInviteCreatePasswordData, PostUserInviteCreatePasswordResponses, PostUserInviteCreatePasswordErrors, PostUserInviteResendData, PostUserInviteResendResponses, PostUserInviteResendErrors, PostUserInviteVerifyData, PostUserInviteVerifyResponses, PostUserInviteVerifyErrors, PostUserSetUserGroupsData, PostUserSetUserGroupsResponses, PostUserSetUserGroupsErrors, PostUserUnlockData, PostUserUnlockResponses, PostUserUnlockErrors, GetItemWebhookData, GetItemWebhookResponses, GetItemWebhookErrors, GetWebhookData, GetWebhookResponses, GetWebhookErrors, PostWebhookData, PostWebhookResponses, PostWebhookErrors, DeleteWebhookByIdData, DeleteWebhookByIdResponses, DeleteWebhookByIdErrors, GetWebhookByIdData, GetWebhookByIdResponses, GetWebhookByIdErrors, PutWebhookByIdData, PutWebhookByIdResponses, PutWebhookByIdErrors, GetWebhookByIdLogsData, GetWebhookByIdLogsResponses, GetWebhookByIdLogsErrors, GetWebhookEventsData, GetWebhookEventsResponses, GetWebhookEventsErrors, GetWebhookLogsData, GetWebhookLogsResponses, GetWebhookLogsErrors } from './types.gen'; +import type { GetCultureData, GetCultureResponses, GetCultureErrors, PostDataTypeData, PostDataTypeResponses, PostDataTypeErrors, DeleteDataTypeByIdData, DeleteDataTypeByIdResponses, DeleteDataTypeByIdErrors, GetDataTypeByIdData, GetDataTypeByIdResponses, GetDataTypeByIdErrors, PutDataTypeByIdData, PutDataTypeByIdResponses, PutDataTypeByIdErrors, PostDataTypeByIdCopyData, PostDataTypeByIdCopyResponses, PostDataTypeByIdCopyErrors, GetDataTypeByIdIsUsedData, GetDataTypeByIdIsUsedResponses, GetDataTypeByIdIsUsedErrors, PutDataTypeByIdMoveData, PutDataTypeByIdMoveResponses, PutDataTypeByIdMoveErrors, GetDataTypeByIdReferencedByData, GetDataTypeByIdReferencedByResponses, GetDataTypeByIdReferencedByErrors, GetDataTypeByIdReferencesData, GetDataTypeByIdReferencesResponses, GetDataTypeByIdReferencesErrors, GetDataTypeConfigurationData, GetDataTypeConfigurationResponses, GetDataTypeConfigurationErrors, PostDataTypeFolderData, PostDataTypeFolderResponses, PostDataTypeFolderErrors, DeleteDataTypeFolderByIdData, DeleteDataTypeFolderByIdResponses, DeleteDataTypeFolderByIdErrors, GetDataTypeFolderByIdData, GetDataTypeFolderByIdResponses, GetDataTypeFolderByIdErrors, PutDataTypeFolderByIdData, PutDataTypeFolderByIdResponses, PutDataTypeFolderByIdErrors, GetFilterDataTypeData, GetFilterDataTypeResponses, GetFilterDataTypeErrors, GetItemDataTypeData, GetItemDataTypeResponses, GetItemDataTypeErrors, GetItemDataTypeSearchData, GetItemDataTypeSearchResponses, GetItemDataTypeSearchErrors, GetTreeDataTypeAncestorsData, GetTreeDataTypeAncestorsResponses, GetTreeDataTypeAncestorsErrors, GetTreeDataTypeChildrenData, GetTreeDataTypeChildrenResponses, GetTreeDataTypeChildrenErrors, GetTreeDataTypeRootData, GetTreeDataTypeRootResponses, GetTreeDataTypeRootErrors, GetTreeDataTypeSiblingsData, GetTreeDataTypeSiblingsResponses, GetTreeDataTypeSiblingsErrors, GetDictionaryData, GetDictionaryResponses, GetDictionaryErrors, PostDictionaryData, PostDictionaryResponses, PostDictionaryErrors, DeleteDictionaryByIdData, DeleteDictionaryByIdResponses, DeleteDictionaryByIdErrors, GetDictionaryByIdData, GetDictionaryByIdResponses, GetDictionaryByIdErrors, PutDictionaryByIdData, PutDictionaryByIdResponses, PutDictionaryByIdErrors, GetDictionaryByIdExportData, GetDictionaryByIdExportResponses, GetDictionaryByIdExportErrors, PutDictionaryByIdMoveData, PutDictionaryByIdMoveResponses, PutDictionaryByIdMoveErrors, PostDictionaryImportData, PostDictionaryImportResponses, PostDictionaryImportErrors, GetItemDictionaryData, GetItemDictionaryResponses, GetItemDictionaryErrors, GetTreeDictionaryAncestorsData, GetTreeDictionaryAncestorsResponses, GetTreeDictionaryAncestorsErrors, GetTreeDictionaryChildrenData, GetTreeDictionaryChildrenResponses, GetTreeDictionaryChildrenErrors, GetTreeDictionaryRootData, GetTreeDictionaryRootResponses, GetTreeDictionaryRootErrors, PostDocumentBlueprintData, PostDocumentBlueprintResponses, PostDocumentBlueprintErrors, DeleteDocumentBlueprintByIdData, DeleteDocumentBlueprintByIdResponses, DeleteDocumentBlueprintByIdErrors, GetDocumentBlueprintByIdData, GetDocumentBlueprintByIdResponses, GetDocumentBlueprintByIdErrors, PutDocumentBlueprintByIdData, PutDocumentBlueprintByIdResponses, PutDocumentBlueprintByIdErrors, PutDocumentBlueprintByIdMoveData, PutDocumentBlueprintByIdMoveResponses, PutDocumentBlueprintByIdMoveErrors, GetDocumentBlueprintByIdScaffoldData, GetDocumentBlueprintByIdScaffoldResponses, GetDocumentBlueprintByIdScaffoldErrors, PostDocumentBlueprintFolderData, PostDocumentBlueprintFolderResponses, PostDocumentBlueprintFolderErrors, DeleteDocumentBlueprintFolderByIdData, DeleteDocumentBlueprintFolderByIdResponses, DeleteDocumentBlueprintFolderByIdErrors, GetDocumentBlueprintFolderByIdData, GetDocumentBlueprintFolderByIdResponses, GetDocumentBlueprintFolderByIdErrors, PutDocumentBlueprintFolderByIdData, PutDocumentBlueprintFolderByIdResponses, PutDocumentBlueprintFolderByIdErrors, PostDocumentBlueprintFromDocumentData, PostDocumentBlueprintFromDocumentResponses, PostDocumentBlueprintFromDocumentErrors, GetItemDocumentBlueprintData, GetItemDocumentBlueprintResponses, GetItemDocumentBlueprintErrors, GetTreeDocumentBlueprintAncestorsData, GetTreeDocumentBlueprintAncestorsResponses, GetTreeDocumentBlueprintAncestorsErrors, GetTreeDocumentBlueprintChildrenData, GetTreeDocumentBlueprintChildrenResponses, GetTreeDocumentBlueprintChildrenErrors, GetTreeDocumentBlueprintRootData, GetTreeDocumentBlueprintRootResponses, GetTreeDocumentBlueprintRootErrors, GetTreeDocumentBlueprintSiblingsData, GetTreeDocumentBlueprintSiblingsResponses, GetTreeDocumentBlueprintSiblingsErrors, PostDocumentTypeData, PostDocumentTypeResponses, PostDocumentTypeErrors, DeleteDocumentTypeByIdData, DeleteDocumentTypeByIdResponses, DeleteDocumentTypeByIdErrors, GetDocumentTypeByIdData, GetDocumentTypeByIdResponses, GetDocumentTypeByIdErrors, PutDocumentTypeByIdData, PutDocumentTypeByIdResponses, PutDocumentTypeByIdErrors, GetDocumentTypeByIdAllowedChildrenData, GetDocumentTypeByIdAllowedChildrenResponses, GetDocumentTypeByIdAllowedChildrenErrors, GetDocumentTypeByIdBlueprintData, GetDocumentTypeByIdBlueprintResponses, GetDocumentTypeByIdBlueprintErrors, GetDocumentTypeByIdCompositionReferencesData, GetDocumentTypeByIdCompositionReferencesResponses, GetDocumentTypeByIdCompositionReferencesErrors, PostDocumentTypeByIdCopyData, PostDocumentTypeByIdCopyResponses, PostDocumentTypeByIdCopyErrors, GetDocumentTypeByIdExportData, GetDocumentTypeByIdExportResponses, GetDocumentTypeByIdExportErrors, PutDocumentTypeByIdImportData, PutDocumentTypeByIdImportResponses, PutDocumentTypeByIdImportErrors, PutDocumentTypeByIdMoveData, PutDocumentTypeByIdMoveResponses, PutDocumentTypeByIdMoveErrors, GetDocumentTypeAllowedAtRootData, GetDocumentTypeAllowedAtRootResponses, GetDocumentTypeAllowedAtRootErrors, PostDocumentTypeAvailableCompositionsData, PostDocumentTypeAvailableCompositionsResponses, PostDocumentTypeAvailableCompositionsErrors, GetDocumentTypeConfigurationData, GetDocumentTypeConfigurationResponses, GetDocumentTypeConfigurationErrors, PostDocumentTypeFolderData, PostDocumentTypeFolderResponses, PostDocumentTypeFolderErrors, DeleteDocumentTypeFolderByIdData, DeleteDocumentTypeFolderByIdResponses, DeleteDocumentTypeFolderByIdErrors, GetDocumentTypeFolderByIdData, GetDocumentTypeFolderByIdResponses, GetDocumentTypeFolderByIdErrors, PutDocumentTypeFolderByIdData, PutDocumentTypeFolderByIdResponses, PutDocumentTypeFolderByIdErrors, PostDocumentTypeImportData, PostDocumentTypeImportResponses, PostDocumentTypeImportErrors, GetItemDocumentTypeData, GetItemDocumentTypeResponses, GetItemDocumentTypeErrors, GetItemDocumentTypeSearchData, GetItemDocumentTypeSearchResponses, GetItemDocumentTypeSearchErrors, GetTreeDocumentTypeAncestorsData, GetTreeDocumentTypeAncestorsResponses, GetTreeDocumentTypeAncestorsErrors, GetTreeDocumentTypeChildrenData, GetTreeDocumentTypeChildrenResponses, GetTreeDocumentTypeChildrenErrors, GetTreeDocumentTypeRootData, GetTreeDocumentTypeRootResponses, GetTreeDocumentTypeRootErrors, GetTreeDocumentTypeSiblingsData, GetTreeDocumentTypeSiblingsResponses, GetTreeDocumentTypeSiblingsErrors, GetDocumentVersionData, GetDocumentVersionResponses, GetDocumentVersionErrors, GetDocumentVersionByIdData, GetDocumentVersionByIdResponses, GetDocumentVersionByIdErrors, PutDocumentVersionByIdPreventCleanupData, PutDocumentVersionByIdPreventCleanupResponses, PutDocumentVersionByIdPreventCleanupErrors, PostDocumentVersionByIdRollbackData, PostDocumentVersionByIdRollbackResponses, PostDocumentVersionByIdRollbackErrors, GetCollectionDocumentByIdData, GetCollectionDocumentByIdResponses, GetCollectionDocumentByIdErrors, PostDocumentData, PostDocumentResponses, PostDocumentErrors, DeleteDocumentByIdData, DeleteDocumentByIdResponses, DeleteDocumentByIdErrors, GetDocumentByIdData, GetDocumentByIdResponses, GetDocumentByIdErrors, PutDocumentByIdData, PutDocumentByIdResponses, PutDocumentByIdErrors, GetDocumentByIdAuditLogData, GetDocumentByIdAuditLogResponses, GetDocumentByIdAuditLogErrors, GetDocumentByIdAvailableSegmentOptionsData, GetDocumentByIdAvailableSegmentOptionsResponses, GetDocumentByIdAvailableSegmentOptionsErrors, PostDocumentByIdCopyData, PostDocumentByIdCopyResponses, PostDocumentByIdCopyErrors, GetDocumentByIdDomainsData, GetDocumentByIdDomainsResponses, GetDocumentByIdDomainsErrors, PutDocumentByIdDomainsData, PutDocumentByIdDomainsResponses, PutDocumentByIdDomainsErrors, PutDocumentByIdMoveData, PutDocumentByIdMoveResponses, PutDocumentByIdMoveErrors, PutDocumentByIdMoveToRecycleBinData, PutDocumentByIdMoveToRecycleBinResponses, PutDocumentByIdMoveToRecycleBinErrors, GetDocumentByIdNotificationsData, GetDocumentByIdNotificationsResponses, GetDocumentByIdNotificationsErrors, PutDocumentByIdNotificationsData, PutDocumentByIdNotificationsResponses, PutDocumentByIdNotificationsErrors, DeleteDocumentByIdPublicAccessData, DeleteDocumentByIdPublicAccessResponses, DeleteDocumentByIdPublicAccessErrors, GetDocumentByIdPublicAccessData, GetDocumentByIdPublicAccessResponses, GetDocumentByIdPublicAccessErrors, PostDocumentByIdPublicAccessData, PostDocumentByIdPublicAccessResponses, PostDocumentByIdPublicAccessErrors, PutDocumentByIdPublicAccessData, PutDocumentByIdPublicAccessResponses, PutDocumentByIdPublicAccessErrors, PutDocumentByIdPublishData, PutDocumentByIdPublishResponses, PutDocumentByIdPublishErrors, PutDocumentByIdPublishWithDescendantsData, PutDocumentByIdPublishWithDescendantsResponses, PutDocumentByIdPublishWithDescendantsErrors, GetDocumentByIdPublishWithDescendantsResultByTaskIdData, GetDocumentByIdPublishWithDescendantsResultByTaskIdResponses, GetDocumentByIdPublishWithDescendantsResultByTaskIdErrors, GetDocumentByIdPublishedData, GetDocumentByIdPublishedResponses, GetDocumentByIdPublishedErrors, GetDocumentByIdReferencedByData, GetDocumentByIdReferencedByResponses, GetDocumentByIdReferencedByErrors, GetDocumentByIdReferencedDescendantsData, GetDocumentByIdReferencedDescendantsResponses, GetDocumentByIdReferencedDescendantsErrors, PutDocumentByIdUnpublishData, PutDocumentByIdUnpublishResponses, PutDocumentByIdUnpublishErrors, PutUmbracoManagementApiV11DocumentByIdValidate11Data, PutUmbracoManagementApiV11DocumentByIdValidate11Responses, PutUmbracoManagementApiV11DocumentByIdValidate11Errors, GetDocumentAreReferencedData, GetDocumentAreReferencedResponses, GetDocumentAreReferencedErrors, GetDocumentConfigurationData, GetDocumentConfigurationResponses, GetDocumentConfigurationErrors, PutDocumentSortData, PutDocumentSortResponses, PutDocumentSortErrors, GetDocumentUrlsData, GetDocumentUrlsResponses, GetDocumentUrlsErrors, PostDocumentValidateData, PostDocumentValidateResponses, PostDocumentValidateErrors, GetItemDocumentData, GetItemDocumentResponses, GetItemDocumentErrors, GetItemDocumentSearchData, GetItemDocumentSearchResponses, GetItemDocumentSearchErrors, DeleteRecycleBinDocumentData, DeleteRecycleBinDocumentResponses, DeleteRecycleBinDocumentErrors, DeleteRecycleBinDocumentByIdData, DeleteRecycleBinDocumentByIdResponses, DeleteRecycleBinDocumentByIdErrors, GetRecycleBinDocumentByIdOriginalParentData, GetRecycleBinDocumentByIdOriginalParentResponses, GetRecycleBinDocumentByIdOriginalParentErrors, PutRecycleBinDocumentByIdRestoreData, PutRecycleBinDocumentByIdRestoreResponses, PutRecycleBinDocumentByIdRestoreErrors, GetRecycleBinDocumentChildrenData, GetRecycleBinDocumentChildrenResponses, GetRecycleBinDocumentChildrenErrors, GetRecycleBinDocumentReferencedByData, GetRecycleBinDocumentReferencedByResponses, GetRecycleBinDocumentReferencedByErrors, GetRecycleBinDocumentRootData, GetRecycleBinDocumentRootResponses, GetRecycleBinDocumentRootErrors, GetTreeDocumentAncestorsData, GetTreeDocumentAncestorsResponses, GetTreeDocumentAncestorsErrors, GetTreeDocumentChildrenData, GetTreeDocumentChildrenResponses, GetTreeDocumentChildrenErrors, GetTreeDocumentRootData, GetTreeDocumentRootResponses, GetTreeDocumentRootErrors, GetTreeDocumentSiblingsData, GetTreeDocumentSiblingsResponses, GetTreeDocumentSiblingsErrors, PostDynamicRootQueryData, PostDynamicRootQueryResponses, PostDynamicRootQueryErrors, GetDynamicRootStepsData, GetDynamicRootStepsResponses, GetDynamicRootStepsErrors, GetHealthCheckGroupData, GetHealthCheckGroupResponses, GetHealthCheckGroupErrors, GetHealthCheckGroupByNameData, GetHealthCheckGroupByNameResponses, GetHealthCheckGroupByNameErrors, PostHealthCheckGroupByNameCheckData, PostHealthCheckGroupByNameCheckResponses, PostHealthCheckGroupByNameCheckErrors, PostHealthCheckExecuteActionData, PostHealthCheckExecuteActionResponses, PostHealthCheckExecuteActionErrors, GetHelpData, GetHelpResponses, GetHelpErrors, GetImagingResizeUrlsData, GetImagingResizeUrlsResponses, GetImagingResizeUrlsErrors, GetImportAnalyzeData, GetImportAnalyzeResponses, GetImportAnalyzeErrors, GetIndexerData, GetIndexerResponses, GetIndexerErrors, GetIndexerByIndexNameData, GetIndexerByIndexNameResponses, GetIndexerByIndexNameErrors, PostIndexerByIndexNameRebuildData, PostIndexerByIndexNameRebuildResponses, PostIndexerByIndexNameRebuildErrors, GetInstallSettingsData, GetInstallSettingsResponses, GetInstallSettingsErrors, PostInstallSetupData, PostInstallSetupResponses, PostInstallSetupErrors, PostInstallValidateDatabaseData, PostInstallValidateDatabaseResponses, PostInstallValidateDatabaseErrors, GetItemLanguageData, GetItemLanguageResponses, GetItemLanguageErrors, GetItemLanguageDefaultData, GetItemLanguageDefaultResponses, GetItemLanguageDefaultErrors, GetLanguageData, GetLanguageResponses, GetLanguageErrors, PostLanguageData, PostLanguageResponses, PostLanguageErrors, DeleteLanguageByIsoCodeData, DeleteLanguageByIsoCodeResponses, DeleteLanguageByIsoCodeErrors, GetLanguageByIsoCodeData, GetLanguageByIsoCodeResponses, GetLanguageByIsoCodeErrors, PutLanguageByIsoCodeData, PutLanguageByIsoCodeResponses, PutLanguageByIsoCodeErrors, GetLogViewerLevelData, GetLogViewerLevelResponses, GetLogViewerLevelErrors, GetLogViewerLevelCountData, GetLogViewerLevelCountResponses, GetLogViewerLevelCountErrors, GetLogViewerLogData, GetLogViewerLogResponses, GetLogViewerLogErrors, GetLogViewerMessageTemplateData, GetLogViewerMessageTemplateResponses, GetLogViewerMessageTemplateErrors, GetLogViewerSavedSearchData, GetLogViewerSavedSearchResponses, GetLogViewerSavedSearchErrors, PostLogViewerSavedSearchData, PostLogViewerSavedSearchResponses, PostLogViewerSavedSearchErrors, DeleteLogViewerSavedSearchByNameData, DeleteLogViewerSavedSearchByNameResponses, DeleteLogViewerSavedSearchByNameErrors, GetLogViewerSavedSearchByNameData, GetLogViewerSavedSearchByNameResponses, GetLogViewerSavedSearchByNameErrors, GetLogViewerValidateLogsSizeData, GetLogViewerValidateLogsSizeResponses, GetLogViewerValidateLogsSizeErrors, GetManifestManifestData, GetManifestManifestResponses, GetManifestManifestErrors, GetManifestManifestPrivateData, GetManifestManifestPrivateResponses, GetManifestManifestPrivateErrors, GetManifestManifestPublicData, GetManifestManifestPublicResponses, GetItemMediaTypeData, GetItemMediaTypeResponses, GetItemMediaTypeErrors, GetItemMediaTypeAllowedData, GetItemMediaTypeAllowedResponses, GetItemMediaTypeAllowedErrors, GetItemMediaTypeFoldersData, GetItemMediaTypeFoldersResponses, GetItemMediaTypeFoldersErrors, GetItemMediaTypeSearchData, GetItemMediaTypeSearchResponses, GetItemMediaTypeSearchErrors, PostMediaTypeData, PostMediaTypeResponses, PostMediaTypeErrors, DeleteMediaTypeByIdData, DeleteMediaTypeByIdResponses, DeleteMediaTypeByIdErrors, GetMediaTypeByIdData, GetMediaTypeByIdResponses, GetMediaTypeByIdErrors, PutMediaTypeByIdData, PutMediaTypeByIdResponses, PutMediaTypeByIdErrors, GetMediaTypeByIdAllowedChildrenData, GetMediaTypeByIdAllowedChildrenResponses, GetMediaTypeByIdAllowedChildrenErrors, GetMediaTypeByIdCompositionReferencesData, GetMediaTypeByIdCompositionReferencesResponses, GetMediaTypeByIdCompositionReferencesErrors, PostMediaTypeByIdCopyData, PostMediaTypeByIdCopyResponses, PostMediaTypeByIdCopyErrors, GetMediaTypeByIdExportData, GetMediaTypeByIdExportResponses, GetMediaTypeByIdExportErrors, PutMediaTypeByIdImportData, PutMediaTypeByIdImportResponses, PutMediaTypeByIdImportErrors, PutMediaTypeByIdMoveData, PutMediaTypeByIdMoveResponses, PutMediaTypeByIdMoveErrors, GetMediaTypeAllowedAtRootData, GetMediaTypeAllowedAtRootResponses, GetMediaTypeAllowedAtRootErrors, PostMediaTypeAvailableCompositionsData, PostMediaTypeAvailableCompositionsResponses, PostMediaTypeAvailableCompositionsErrors, GetMediaTypeConfigurationData, GetMediaTypeConfigurationResponses, GetMediaTypeConfigurationErrors, PostMediaTypeFolderData, PostMediaTypeFolderResponses, PostMediaTypeFolderErrors, DeleteMediaTypeFolderByIdData, DeleteMediaTypeFolderByIdResponses, DeleteMediaTypeFolderByIdErrors, GetMediaTypeFolderByIdData, GetMediaTypeFolderByIdResponses, GetMediaTypeFolderByIdErrors, PutMediaTypeFolderByIdData, PutMediaTypeFolderByIdResponses, PutMediaTypeFolderByIdErrors, PostMediaTypeImportData, PostMediaTypeImportResponses, PostMediaTypeImportErrors, GetTreeMediaTypeAncestorsData, GetTreeMediaTypeAncestorsResponses, GetTreeMediaTypeAncestorsErrors, GetTreeMediaTypeChildrenData, GetTreeMediaTypeChildrenResponses, GetTreeMediaTypeChildrenErrors, GetTreeMediaTypeRootData, GetTreeMediaTypeRootResponses, GetTreeMediaTypeRootErrors, GetTreeMediaTypeSiblingsData, GetTreeMediaTypeSiblingsResponses, GetTreeMediaTypeSiblingsErrors, GetCollectionMediaData, GetCollectionMediaResponses, GetCollectionMediaErrors, GetItemMediaData, GetItemMediaResponses, GetItemMediaErrors, GetItemMediaSearchData, GetItemMediaSearchResponses, GetItemMediaSearchErrors, PostMediaData, PostMediaResponses, PostMediaErrors, DeleteMediaByIdData, DeleteMediaByIdResponses, DeleteMediaByIdErrors, GetMediaByIdData, GetMediaByIdResponses, GetMediaByIdErrors, PutMediaByIdData, PutMediaByIdResponses, PutMediaByIdErrors, GetMediaByIdAuditLogData, GetMediaByIdAuditLogResponses, GetMediaByIdAuditLogErrors, PutMediaByIdMoveData, PutMediaByIdMoveResponses, PutMediaByIdMoveErrors, PutMediaByIdMoveToRecycleBinData, PutMediaByIdMoveToRecycleBinResponses, PutMediaByIdMoveToRecycleBinErrors, GetMediaByIdReferencedByData, GetMediaByIdReferencedByResponses, GetMediaByIdReferencedByErrors, GetMediaByIdReferencedDescendantsData, GetMediaByIdReferencedDescendantsResponses, GetMediaByIdReferencedDescendantsErrors, PutMediaByIdValidateData, PutMediaByIdValidateResponses, PutMediaByIdValidateErrors, GetMediaAreReferencedData, GetMediaAreReferencedResponses, GetMediaAreReferencedErrors, GetMediaConfigurationData, GetMediaConfigurationResponses, GetMediaConfigurationErrors, PutMediaSortData, PutMediaSortResponses, PutMediaSortErrors, GetMediaUrlsData, GetMediaUrlsResponses, GetMediaUrlsErrors, PostMediaValidateData, PostMediaValidateResponses, PostMediaValidateErrors, DeleteRecycleBinMediaData, DeleteRecycleBinMediaResponses, DeleteRecycleBinMediaErrors, DeleteRecycleBinMediaByIdData, DeleteRecycleBinMediaByIdResponses, DeleteRecycleBinMediaByIdErrors, GetRecycleBinMediaByIdOriginalParentData, GetRecycleBinMediaByIdOriginalParentResponses, GetRecycleBinMediaByIdOriginalParentErrors, PutRecycleBinMediaByIdRestoreData, PutRecycleBinMediaByIdRestoreResponses, PutRecycleBinMediaByIdRestoreErrors, GetRecycleBinMediaChildrenData, GetRecycleBinMediaChildrenResponses, GetRecycleBinMediaChildrenErrors, GetRecycleBinMediaReferencedByData, GetRecycleBinMediaReferencedByResponses, GetRecycleBinMediaReferencedByErrors, GetRecycleBinMediaRootData, GetRecycleBinMediaRootResponses, GetRecycleBinMediaRootErrors, GetTreeMediaAncestorsData, GetTreeMediaAncestorsResponses, GetTreeMediaAncestorsErrors, GetTreeMediaChildrenData, GetTreeMediaChildrenResponses, GetTreeMediaChildrenErrors, GetTreeMediaRootData, GetTreeMediaRootResponses, GetTreeMediaRootErrors, GetTreeMediaSiblingsData, GetTreeMediaSiblingsResponses, GetTreeMediaSiblingsErrors, GetItemMemberGroupData, GetItemMemberGroupResponses, GetItemMemberGroupErrors, GetMemberGroupData, GetMemberGroupResponses, GetMemberGroupErrors, PostMemberGroupData, PostMemberGroupResponses, PostMemberGroupErrors, DeleteMemberGroupByIdData, DeleteMemberGroupByIdResponses, DeleteMemberGroupByIdErrors, GetMemberGroupByIdData, GetMemberGroupByIdResponses, GetMemberGroupByIdErrors, PutMemberGroupByIdData, PutMemberGroupByIdResponses, PutMemberGroupByIdErrors, GetTreeMemberGroupRootData, GetTreeMemberGroupRootResponses, GetTreeMemberGroupRootErrors, GetItemMemberTypeData, GetItemMemberTypeResponses, GetItemMemberTypeErrors, GetItemMemberTypeSearchData, GetItemMemberTypeSearchResponses, GetItemMemberTypeSearchErrors, PostMemberTypeData, PostMemberTypeResponses, PostMemberTypeErrors, DeleteMemberTypeByIdData, DeleteMemberTypeByIdResponses, DeleteMemberTypeByIdErrors, GetMemberTypeByIdData, GetMemberTypeByIdResponses, GetMemberTypeByIdErrors, PutMemberTypeByIdData, PutMemberTypeByIdResponses, PutMemberTypeByIdErrors, GetMemberTypeByIdCompositionReferencesData, GetMemberTypeByIdCompositionReferencesResponses, GetMemberTypeByIdCompositionReferencesErrors, PostMemberTypeByIdCopyData, PostMemberTypeByIdCopyResponses, PostMemberTypeByIdCopyErrors, PostMemberTypeAvailableCompositionsData, PostMemberTypeAvailableCompositionsResponses, PostMemberTypeAvailableCompositionsErrors, GetMemberTypeConfigurationData, GetMemberTypeConfigurationResponses, GetMemberTypeConfigurationErrors, GetTreeMemberTypeRootData, GetTreeMemberTypeRootResponses, GetTreeMemberTypeRootErrors, GetFilterMemberData, GetFilterMemberResponses, GetFilterMemberErrors, GetItemMemberData, GetItemMemberResponses, GetItemMemberErrors, GetItemMemberSearchData, GetItemMemberSearchResponses, GetItemMemberSearchErrors, PostMemberData, PostMemberResponses, PostMemberErrors, DeleteMemberByIdData, DeleteMemberByIdResponses, DeleteMemberByIdErrors, GetMemberByIdData, GetMemberByIdResponses, GetMemberByIdErrors, PutMemberByIdData, PutMemberByIdResponses, PutMemberByIdErrors, GetMemberByIdReferencedByData, GetMemberByIdReferencedByResponses, GetMemberByIdReferencedByErrors, GetMemberByIdReferencedDescendantsData, GetMemberByIdReferencedDescendantsResponses, GetMemberByIdReferencedDescendantsErrors, PutMemberByIdValidateData, PutMemberByIdValidateResponses, PutMemberByIdValidateErrors, GetMemberAreReferencedData, GetMemberAreReferencedResponses, GetMemberAreReferencedErrors, GetMemberConfigurationData, GetMemberConfigurationResponses, GetMemberConfigurationErrors, PostMemberValidateData, PostMemberValidateResponses, PostMemberValidateErrors, PostModelsBuilderBuildData, PostModelsBuilderBuildResponses, PostModelsBuilderBuildErrors, GetModelsBuilderDashboardData, GetModelsBuilderDashboardResponses, GetModelsBuilderDashboardErrors, GetModelsBuilderStatusData, GetModelsBuilderStatusResponses, GetModelsBuilderStatusErrors, GetObjectTypesData, GetObjectTypesResponses, GetObjectTypesErrors, GetOembedQueryData, GetOembedQueryResponses, GetOembedQueryErrors, PostPackageByNameRunMigrationData, PostPackageByNameRunMigrationResponses, PostPackageByNameRunMigrationErrors, GetPackageConfigurationData, GetPackageConfigurationResponses, GetPackageConfigurationErrors, GetPackageCreatedData, GetPackageCreatedResponses, GetPackageCreatedErrors, PostPackageCreatedData, PostPackageCreatedResponses, PostPackageCreatedErrors, DeletePackageCreatedByIdData, DeletePackageCreatedByIdResponses, DeletePackageCreatedByIdErrors, GetPackageCreatedByIdData, GetPackageCreatedByIdResponses, GetPackageCreatedByIdErrors, PutPackageCreatedByIdData, PutPackageCreatedByIdResponses, PutPackageCreatedByIdErrors, GetPackageCreatedByIdDownloadData, GetPackageCreatedByIdDownloadResponses, GetPackageCreatedByIdDownloadErrors, GetPackageMigrationStatusData, GetPackageMigrationStatusResponses, GetPackageMigrationStatusErrors, GetItemPartialViewData, GetItemPartialViewResponses, GetItemPartialViewErrors, PostPartialViewData, PostPartialViewResponses, PostPartialViewErrors, DeletePartialViewByPathData, DeletePartialViewByPathResponses, DeletePartialViewByPathErrors, GetPartialViewByPathData, GetPartialViewByPathResponses, GetPartialViewByPathErrors, PutPartialViewByPathData, PutPartialViewByPathResponses, PutPartialViewByPathErrors, PutPartialViewByPathRenameData, PutPartialViewByPathRenameResponses, PutPartialViewByPathRenameErrors, PostPartialViewFolderData, PostPartialViewFolderResponses, PostPartialViewFolderErrors, DeletePartialViewFolderByPathData, DeletePartialViewFolderByPathResponses, DeletePartialViewFolderByPathErrors, GetPartialViewFolderByPathData, GetPartialViewFolderByPathResponses, GetPartialViewFolderByPathErrors, GetPartialViewSnippetData, GetPartialViewSnippetResponses, GetPartialViewSnippetErrors, GetPartialViewSnippetByIdData, GetPartialViewSnippetByIdResponses, GetPartialViewSnippetByIdErrors, GetTreePartialViewAncestorsData, GetTreePartialViewAncestorsResponses, GetTreePartialViewAncestorsErrors, GetTreePartialViewChildrenData, GetTreePartialViewChildrenResponses, GetTreePartialViewChildrenErrors, GetTreePartialViewRootData, GetTreePartialViewRootResponses, GetTreePartialViewRootErrors, DeletePreviewData, DeletePreviewResponses, PostPreviewData, PostPreviewResponses, PostPreviewErrors, GetProfilingStatusData, GetProfilingStatusResponses, GetProfilingStatusErrors, PutProfilingStatusData, PutProfilingStatusResponses, PutProfilingStatusErrors, GetPropertyTypeIsUsedData, GetPropertyTypeIsUsedResponses, GetPropertyTypeIsUsedErrors, PostPublishedCacheRebuildData, PostPublishedCacheRebuildResponses, PostPublishedCacheRebuildErrors, GetPublishedCacheRebuildStatusData, GetPublishedCacheRebuildStatusResponses, GetPublishedCacheRebuildStatusErrors, PostPublishedCacheReloadData, PostPublishedCacheReloadResponses, PostPublishedCacheReloadErrors, GetRedirectManagementData, GetRedirectManagementResponses, GetRedirectManagementErrors, DeleteRedirectManagementByIdData, DeleteRedirectManagementByIdResponses, DeleteRedirectManagementByIdErrors, GetRedirectManagementByIdData, GetRedirectManagementByIdResponses, GetRedirectManagementByIdErrors, GetRedirectManagementStatusData, GetRedirectManagementStatusResponses, GetRedirectManagementStatusErrors, PostRedirectManagementStatusData, PostRedirectManagementStatusResponses, PostRedirectManagementStatusErrors, GetItemRelationTypeData, GetItemRelationTypeResponses, GetItemRelationTypeErrors, GetRelationTypeData, GetRelationTypeResponses, GetRelationTypeErrors, GetRelationTypeByIdData, GetRelationTypeByIdResponses, GetRelationTypeByIdErrors, GetRelationByRelationTypeIdData, GetRelationByRelationTypeIdResponses, GetRelationByRelationTypeIdErrors, GetItemScriptData, GetItemScriptResponses, GetItemScriptErrors, PostScriptData, PostScriptResponses, PostScriptErrors, DeleteScriptByPathData, DeleteScriptByPathResponses, DeleteScriptByPathErrors, GetScriptByPathData, GetScriptByPathResponses, GetScriptByPathErrors, PutScriptByPathData, PutScriptByPathResponses, PutScriptByPathErrors, PutScriptByPathRenameData, PutScriptByPathRenameResponses, PutScriptByPathRenameErrors, PostScriptFolderData, PostScriptFolderResponses, PostScriptFolderErrors, DeleteScriptFolderByPathData, DeleteScriptFolderByPathResponses, DeleteScriptFolderByPathErrors, GetScriptFolderByPathData, GetScriptFolderByPathResponses, GetScriptFolderByPathErrors, GetTreeScriptAncestorsData, GetTreeScriptAncestorsResponses, GetTreeScriptAncestorsErrors, GetTreeScriptChildrenData, GetTreeScriptChildrenResponses, GetTreeScriptChildrenErrors, GetTreeScriptRootData, GetTreeScriptRootResponses, GetTreeScriptRootErrors, GetSearcherData, GetSearcherResponses, GetSearcherErrors, GetSearcherBySearcherNameQueryData, GetSearcherBySearcherNameQueryResponses, GetSearcherBySearcherNameQueryErrors, GetSecurityConfigurationData, GetSecurityConfigurationResponses, GetSecurityConfigurationErrors, PostSecurityForgotPasswordData, PostSecurityForgotPasswordResponses, PostSecurityForgotPasswordErrors, PostSecurityForgotPasswordResetData, PostSecurityForgotPasswordResetResponses, PostSecurityForgotPasswordResetErrors, PostSecurityForgotPasswordVerifyData, PostSecurityForgotPasswordVerifyResponses, PostSecurityForgotPasswordVerifyErrors, GetSegmentData, GetSegmentResponses, GetSegmentErrors, GetServerConfigurationData, GetServerConfigurationResponses, GetServerInformationData, GetServerInformationResponses, GetServerInformationErrors, GetServerStatusData, GetServerStatusResponses, GetServerStatusErrors, GetServerTroubleshootingData, GetServerTroubleshootingResponses, GetServerTroubleshootingErrors, GetServerUpgradeCheckData, GetServerUpgradeCheckResponses, GetServerUpgradeCheckErrors, GetItemStaticFileData, GetItemStaticFileResponses, GetItemStaticFileErrors, GetTreeStaticFileAncestorsData, GetTreeStaticFileAncestorsResponses, GetTreeStaticFileAncestorsErrors, GetTreeStaticFileChildrenData, GetTreeStaticFileChildrenResponses, GetTreeStaticFileChildrenErrors, GetTreeStaticFileRootData, GetTreeStaticFileRootResponses, GetTreeStaticFileRootErrors, GetItemStylesheetData, GetItemStylesheetResponses, GetItemStylesheetErrors, PostStylesheetData, PostStylesheetResponses, PostStylesheetErrors, DeleteStylesheetByPathData, DeleteStylesheetByPathResponses, DeleteStylesheetByPathErrors, GetStylesheetByPathData, GetStylesheetByPathResponses, GetStylesheetByPathErrors, PutStylesheetByPathData, PutStylesheetByPathResponses, PutStylesheetByPathErrors, PutStylesheetByPathRenameData, PutStylesheetByPathRenameResponses, PutStylesheetByPathRenameErrors, PostStylesheetFolderData, PostStylesheetFolderResponses, PostStylesheetFolderErrors, DeleteStylesheetFolderByPathData, DeleteStylesheetFolderByPathResponses, DeleteStylesheetFolderByPathErrors, GetStylesheetFolderByPathData, GetStylesheetFolderByPathResponses, GetStylesheetFolderByPathErrors, GetTreeStylesheetAncestorsData, GetTreeStylesheetAncestorsResponses, GetTreeStylesheetAncestorsErrors, GetTreeStylesheetChildrenData, GetTreeStylesheetChildrenResponses, GetTreeStylesheetChildrenErrors, GetTreeStylesheetRootData, GetTreeStylesheetRootResponses, GetTreeStylesheetRootErrors, GetTagData, GetTagResponses, GetTagErrors, GetTelemetryData, GetTelemetryResponses, GetTelemetryErrors, GetTelemetryLevelData, GetTelemetryLevelResponses, GetTelemetryLevelErrors, PostTelemetryLevelData, PostTelemetryLevelResponses, PostTelemetryLevelErrors, GetItemTemplateData, GetItemTemplateResponses, GetItemTemplateErrors, GetItemTemplateSearchData, GetItemTemplateSearchResponses, GetItemTemplateSearchErrors, PostTemplateData, PostTemplateResponses, PostTemplateErrors, DeleteTemplateByIdData, DeleteTemplateByIdResponses, DeleteTemplateByIdErrors, GetTemplateByIdData, GetTemplateByIdResponses, GetTemplateByIdErrors, PutTemplateByIdData, PutTemplateByIdResponses, PutTemplateByIdErrors, GetTemplateConfigurationData, GetTemplateConfigurationResponses, GetTemplateConfigurationErrors, PostTemplateQueryExecuteData, PostTemplateQueryExecuteResponses, PostTemplateQueryExecuteErrors, GetTemplateQuerySettingsData, GetTemplateQuerySettingsResponses, GetTemplateQuerySettingsErrors, GetTreeTemplateAncestorsData, GetTreeTemplateAncestorsResponses, GetTreeTemplateAncestorsErrors, GetTreeTemplateChildrenData, GetTreeTemplateChildrenResponses, GetTreeTemplateChildrenErrors, GetTreeTemplateRootData, GetTreeTemplateRootResponses, GetTreeTemplateRootErrors, GetTreeTemplateSiblingsData, GetTreeTemplateSiblingsResponses, GetTreeTemplateSiblingsErrors, PostTemporaryFileData, PostTemporaryFileResponses, PostTemporaryFileErrors, DeleteTemporaryFileByIdData, DeleteTemporaryFileByIdResponses, DeleteTemporaryFileByIdErrors, GetTemporaryFileByIdData, GetTemporaryFileByIdResponses, GetTemporaryFileByIdErrors, GetTemporaryFileConfigurationData, GetTemporaryFileConfigurationResponses, GetTemporaryFileConfigurationErrors, PostUpgradeAuthorizeData, PostUpgradeAuthorizeResponses, PostUpgradeAuthorizeErrors, GetUpgradeSettingsData, GetUpgradeSettingsResponses, GetUpgradeSettingsErrors, GetUserDataData, GetUserDataResponses, GetUserDataErrors, PostUserDataData, PostUserDataResponses, PostUserDataErrors, PutUserDataData, PutUserDataResponses, PutUserDataErrors, GetUserDataByIdData, GetUserDataByIdResponses, GetUserDataByIdErrors, GetFilterUserGroupData, GetFilterUserGroupResponses, GetFilterUserGroupErrors, GetItemUserGroupData, GetItemUserGroupResponses, GetItemUserGroupErrors, DeleteUserGroupData, DeleteUserGroupResponses, DeleteUserGroupErrors, GetUserGroupData, GetUserGroupResponses, GetUserGroupErrors, PostUserGroupData, PostUserGroupResponses, PostUserGroupErrors, DeleteUserGroupByIdData, DeleteUserGroupByIdResponses, DeleteUserGroupByIdErrors, GetUserGroupByIdData, GetUserGroupByIdResponses, GetUserGroupByIdErrors, PutUserGroupByIdData, PutUserGroupByIdResponses, PutUserGroupByIdErrors, DeleteUserGroupByIdUsersData, DeleteUserGroupByIdUsersResponses, DeleteUserGroupByIdUsersErrors, PostUserGroupByIdUsersData, PostUserGroupByIdUsersResponses, PostUserGroupByIdUsersErrors, GetFilterUserData, GetFilterUserResponses, GetFilterUserErrors, GetItemUserData, GetItemUserResponses, GetItemUserErrors, DeleteUserData, DeleteUserResponses, DeleteUserErrors, GetUserData, GetUserResponses, GetUserErrors, PostUserData, PostUserResponses, PostUserErrors, DeleteUserByIdData, DeleteUserByIdResponses, DeleteUserByIdErrors, GetUserByIdData, GetUserByIdResponses, GetUserByIdErrors, PutUserByIdData, PutUserByIdResponses, PutUserByIdErrors, GetUserById2FaData, GetUserById2FaResponses, GetUserById2FaErrors, DeleteUserById2FaByProviderNameData, DeleteUserById2FaByProviderNameResponses, DeleteUserById2FaByProviderNameErrors, GetUserByIdCalculateStartNodesData, GetUserByIdCalculateStartNodesResponses, GetUserByIdCalculateStartNodesErrors, PostUserByIdChangePasswordData, PostUserByIdChangePasswordResponses, PostUserByIdChangePasswordErrors, GetUserByIdClientCredentialsData, GetUserByIdClientCredentialsResponses, GetUserByIdClientCredentialsErrors, PostUserByIdClientCredentialsData, PostUserByIdClientCredentialsResponses, PostUserByIdClientCredentialsErrors, DeleteUserByIdClientCredentialsByClientIdData, DeleteUserByIdClientCredentialsByClientIdResponses, DeleteUserByIdClientCredentialsByClientIdErrors, PostUserByIdResetPasswordData, PostUserByIdResetPasswordResponses, PostUserByIdResetPasswordErrors, DeleteUserAvatarByIdData, DeleteUserAvatarByIdResponses, DeleteUserAvatarByIdErrors, PostUserAvatarByIdData, PostUserAvatarByIdResponses, PostUserAvatarByIdErrors, GetUserConfigurationData, GetUserConfigurationResponses, GetUserConfigurationErrors, GetUserCurrentData, GetUserCurrentResponses, GetUserCurrentErrors, GetUserCurrent2FaData, GetUserCurrent2FaResponses, GetUserCurrent2FaErrors, DeleteUserCurrent2FaByProviderNameData, DeleteUserCurrent2FaByProviderNameResponses, DeleteUserCurrent2FaByProviderNameErrors, GetUserCurrent2FaByProviderNameData, GetUserCurrent2FaByProviderNameResponses, GetUserCurrent2FaByProviderNameErrors, PostUserCurrent2FaByProviderNameData, PostUserCurrent2FaByProviderNameResponses, PostUserCurrent2FaByProviderNameErrors, PostUserCurrentAvatarData, PostUserCurrentAvatarResponses, PostUserCurrentAvatarErrors, PostUserCurrentChangePasswordData, PostUserCurrentChangePasswordResponses, PostUserCurrentChangePasswordErrors, GetUserCurrentConfigurationData, GetUserCurrentConfigurationResponses, GetUserCurrentConfigurationErrors, GetUserCurrentLoginProvidersData, GetUserCurrentLoginProvidersResponses, GetUserCurrentLoginProvidersErrors, GetUserCurrentPermissionsData, GetUserCurrentPermissionsResponses, GetUserCurrentPermissionsErrors, GetUserCurrentPermissionsDocumentData, GetUserCurrentPermissionsDocumentResponses, GetUserCurrentPermissionsDocumentErrors, GetUserCurrentPermissionsMediaData, GetUserCurrentPermissionsMediaResponses, GetUserCurrentPermissionsMediaErrors, PostUserDisableData, PostUserDisableResponses, PostUserDisableErrors, PostUserEnableData, PostUserEnableResponses, PostUserEnableErrors, PostUserInviteData, PostUserInviteResponses, PostUserInviteErrors, PostUserInviteCreatePasswordData, PostUserInviteCreatePasswordResponses, PostUserInviteCreatePasswordErrors, PostUserInviteResendData, PostUserInviteResendResponses, PostUserInviteResendErrors, PostUserInviteVerifyData, PostUserInviteVerifyResponses, PostUserInviteVerifyErrors, PostUserSetUserGroupsData, PostUserSetUserGroupsResponses, PostUserSetUserGroupsErrors, PostUserUnlockData, PostUserUnlockResponses, PostUserUnlockErrors, GetItemWebhookData, GetItemWebhookResponses, GetItemWebhookErrors, GetWebhookData, GetWebhookResponses, GetWebhookErrors, PostWebhookData, PostWebhookResponses, PostWebhookErrors, DeleteWebhookByIdData, DeleteWebhookByIdResponses, DeleteWebhookByIdErrors, GetWebhookByIdData, GetWebhookByIdResponses, GetWebhookByIdErrors, PutWebhookByIdData, PutWebhookByIdResponses, PutWebhookByIdErrors, GetWebhookByIdLogsData, GetWebhookByIdLogsResponses, GetWebhookByIdLogsErrors, GetWebhookEventsData, GetWebhookEventsResponses, GetWebhookEventsErrors, GetWebhookLogsData, GetWebhookLogsResponses, GetWebhookLogsErrors } from './types.gen'; import { client as _heyApiClient } from './client.gen'; export type Options = ClientOptions & { @@ -1750,19 +1750,6 @@ export class DocumentService { }); } - public static getRecycleBinDocumentSiblings(options?: Options) { - return (options?.client ?? _heyApiClient).get({ - security: [ - { - scheme: 'bearer', - type: 'http' - } - ], - url: '/umbraco/management/api/v1/recycle-bin/document/siblings', - ...options - }); - } - public static getTreeDocumentAncestors(options?: Options) { return (options?.client ?? _heyApiClient).get({ security: [ @@ -3016,19 +3003,6 @@ export class MediaService { }); } - public static getRecycleBinMediaSiblings(options?: Options) { - return (options?.client ?? _heyApiClient).get({ - security: [ - { - scheme: 'bearer', - type: 'http' - } - ], - url: '/umbraco/management/api/v1/recycle-bin/media/siblings', - ...options - }); - } - public static getTreeMediaAncestors(options?: Options) { return (options?.client ?? _heyApiClient).get({ security: [ @@ -3338,19 +3312,6 @@ export class MemberTypeService { ...options }); } - - public static getTreeMemberTypeSiblings(options?: Options) { - return (options?.client ?? _heyApiClient).get({ - security: [ - { - scheme: 'bearer', - type: 'http' - } - ], - url: '/umbraco/management/api/v1/tree/member-type/siblings', - ...options - }); - } } export class MemberService { @@ -3936,19 +3897,6 @@ export class PartialViewService { ...options }); } - - public static getTreePartialViewSiblings(options?: Options) { - return (options?.client ?? _heyApiClient).get({ - security: [ - { - scheme: 'bearer', - type: 'http' - } - ], - url: '/umbraco/management/api/v1/tree/partial-view/siblings', - ...options - }); - } } export class PreviewService { @@ -4356,19 +4304,6 @@ export class ScriptService { ...options }); } - - public static getTreeScriptSiblings(options?: Options) { - return (options?.client ?? _heyApiClient).get({ - security: [ - { - scheme: 'bearer', - type: 'http' - } - ], - url: '/umbraco/management/api/v1/tree/script/siblings', - ...options - }); - } } export class SearcherService { @@ -4755,19 +4690,6 @@ export class StylesheetService { ...options }); } - - public static getTreeStylesheetSiblings(options?: Options) { - return (options?.client ?? _heyApiClient).get({ - security: [ - { - scheme: 'bearer', - type: 'http' - } - ], - url: '/umbraco/management/api/v1/tree/stylesheet/siblings', - ...options - }); - } } export class TagService { @@ -5148,19 +5070,6 @@ export class UserDataService { }); } - public static deleteUserDataById(options: Options) { - return (options.client ?? _heyApiClient).delete({ - security: [ - { - scheme: 'bearer', - type: 'http' - } - ], - url: '/umbraco/management/api/v1/user-data/{id}', - ...options - }); - } - public static getUserDataById(options: Options) { return (options.client ?? _heyApiClient).get({ security: [ diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/types.gen.ts b/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/types.gen.ts index 6d85388bbe3d..b5dae034e03f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/types.gen.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/types.gen.ts @@ -2319,7 +2319,6 @@ export type ServerConfigurationResponseModel = { allowPasswordReset: boolean; versionCheckPeriod: number; allowLocalLogin: boolean; - enableMediaRecycleBinProtection: boolean; }; export type ServerInformationResponseModel = { @@ -2392,12 +2391,6 @@ export type SubsetDocumentBlueprintTreeItemResponseModel = { items: Array; }; -export type SubsetDocumentRecycleBinItemResponseModel = { - totalBefore: number; - totalAfter: number; - items: Array; -}; - export type SubsetDocumentTreeItemResponseModel = { totalBefore: number; totalAfter: number; @@ -2410,18 +2403,6 @@ export type SubsetDocumentTypeTreeItemResponseModel = { items: Array; }; -export type SubsetFileSystemTreeItemPresentationModel = { - totalBefore: number; - totalAfter: number; - items: Array; -}; - -export type SubsetMediaRecycleBinItemResponseModel = { - totalBefore: number; - totalAfter: number; - items: Array; -}; - export type SubsetMediaTreeItemResponseModel = { totalBefore: number; totalAfter: number; @@ -2434,12 +2415,6 @@ export type SubsetMediaTypeTreeItemResponseModel = { items: Array; }; -export type SubsetMemberTypeTreeItemResponseModel = { - totalBefore: number; - totalAfter: number; - items: Array; -}; - export type SubsetNamedEntityTreeItemResponseModel = { totalBefore: number; totalAfter: number; @@ -7138,38 +7113,6 @@ export type GetRecycleBinDocumentRootResponses = { export type GetRecycleBinDocumentRootResponse = GetRecycleBinDocumentRootResponses[keyof GetRecycleBinDocumentRootResponses]; -export type GetRecycleBinDocumentSiblingsData = { - body?: never; - path?: never; - query?: { - target?: string; - before?: number; - after?: number; - dataTypeId?: string; - }; - url: '/umbraco/management/api/v1/recycle-bin/document/siblings'; -}; - -export type GetRecycleBinDocumentSiblingsErrors = { - /** - * The resource is protected and requires an authentication token - */ - 401: unknown; - /** - * The authenticated user does not have access to this resource - */ - 403: unknown; -}; - -export type GetRecycleBinDocumentSiblingsResponses = { - /** - * OK - */ - 200: SubsetDocumentRecycleBinItemResponseModel; -}; - -export type GetRecycleBinDocumentSiblingsResponse = GetRecycleBinDocumentSiblingsResponses[keyof GetRecycleBinDocumentSiblingsResponses]; - export type GetTreeDocumentAncestorsData = { body?: never; path?: never; @@ -10033,38 +9976,6 @@ export type GetRecycleBinMediaRootResponses = { export type GetRecycleBinMediaRootResponse = GetRecycleBinMediaRootResponses[keyof GetRecycleBinMediaRootResponses]; -export type GetRecycleBinMediaSiblingsData = { - body?: never; - path?: never; - query?: { - target?: string; - before?: number; - after?: number; - dataTypeId?: string; - }; - url: '/umbraco/management/api/v1/recycle-bin/media/siblings'; -}; - -export type GetRecycleBinMediaSiblingsErrors = { - /** - * The resource is protected and requires an authentication token - */ - 401: unknown; - /** - * The authenticated user does not have access to this resource - */ - 403: unknown; -}; - -export type GetRecycleBinMediaSiblingsResponses = { - /** - * OK - */ - 200: SubsetMediaRecycleBinItemResponseModel; -}; - -export type GetRecycleBinMediaSiblingsResponse = GetRecycleBinMediaSiblingsResponses[keyof GetRecycleBinMediaSiblingsResponses]; - export type GetTreeMediaAncestorsData = { body?: never; path?: never; @@ -10764,37 +10675,6 @@ export type GetTreeMemberTypeRootResponses = { export type GetTreeMemberTypeRootResponse = GetTreeMemberTypeRootResponses[keyof GetTreeMemberTypeRootResponses]; -export type GetTreeMemberTypeSiblingsData = { - body?: never; - path?: never; - query?: { - target?: string; - before?: number; - after?: number; - }; - url: '/umbraco/management/api/v1/tree/member-type/siblings'; -}; - -export type GetTreeMemberTypeSiblingsErrors = { - /** - * The resource is protected and requires an authentication token - */ - 401: unknown; - /** - * The authenticated user does not have access to this resource - */ - 403: unknown; -}; - -export type GetTreeMemberTypeSiblingsResponses = { - /** - * OK - */ - 200: SubsetMemberTypeTreeItemResponseModel; -}; - -export type GetTreeMemberTypeSiblingsResponse = GetTreeMemberTypeSiblingsResponses[keyof GetTreeMemberTypeSiblingsResponses]; - export type GetFilterMemberData = { body?: never; path?: never; @@ -12134,37 +12014,6 @@ export type GetTreePartialViewRootResponses = { export type GetTreePartialViewRootResponse = GetTreePartialViewRootResponses[keyof GetTreePartialViewRootResponses]; -export type GetTreePartialViewSiblingsData = { - body?: never; - path?: never; - query?: { - path?: string; - before?: number; - after?: number; - }; - url: '/umbraco/management/api/v1/tree/partial-view/siblings'; -}; - -export type GetTreePartialViewSiblingsErrors = { - /** - * The resource is protected and requires an authentication token - */ - 401: unknown; - /** - * The authenticated user does not have access to this resource - */ - 403: unknown; -}; - -export type GetTreePartialViewSiblingsResponses = { - /** - * OK - */ - 200: SubsetFileSystemTreeItemPresentationModel; -}; - -export type GetTreePartialViewSiblingsResponse = GetTreePartialViewSiblingsResponses[keyof GetTreePartialViewSiblingsResponses]; - export type DeletePreviewData = { body?: never; path?: never; @@ -13034,37 +12883,6 @@ export type GetTreeScriptRootResponses = { export type GetTreeScriptRootResponse = GetTreeScriptRootResponses[keyof GetTreeScriptRootResponses]; -export type GetTreeScriptSiblingsData = { - body?: never; - path?: never; - query?: { - path?: string; - before?: number; - after?: number; - }; - url: '/umbraco/management/api/v1/tree/script/siblings'; -}; - -export type GetTreeScriptSiblingsErrors = { - /** - * The resource is protected and requires an authentication token - */ - 401: unknown; - /** - * The authenticated user does not have access to this resource - */ - 403: unknown; -}; - -export type GetTreeScriptSiblingsResponses = { - /** - * OK - */ - 200: SubsetFileSystemTreeItemPresentationModel; -}; - -export type GetTreeScriptSiblingsResponse = GetTreeScriptSiblingsResponses[keyof GetTreeScriptSiblingsResponses]; - export type GetSearcherData = { body?: never; path?: never; @@ -13902,37 +13720,6 @@ export type GetTreeStylesheetRootResponses = { export type GetTreeStylesheetRootResponse = GetTreeStylesheetRootResponses[keyof GetTreeStylesheetRootResponses]; -export type GetTreeStylesheetSiblingsData = { - body?: never; - path?: never; - query?: { - path?: string; - before?: number; - after?: number; - }; - url: '/umbraco/management/api/v1/tree/stylesheet/siblings'; -}; - -export type GetTreeStylesheetSiblingsErrors = { - /** - * The resource is protected and requires an authentication token - */ - 401: unknown; - /** - * The authenticated user does not have access to this resource - */ - 403: unknown; -}; - -export type GetTreeStylesheetSiblingsResponses = { - /** - * OK - */ - 200: SubsetFileSystemTreeItemPresentationModel; -}; - -export type GetTreeStylesheetSiblingsResponse = GetTreeStylesheetSiblingsResponses[keyof GetTreeStylesheetSiblingsResponses]; - export type GetTagData = { body?: never; path?: never; @@ -14727,39 +14514,6 @@ export type PutUserDataResponses = { 200: unknown; }; -export type DeleteUserDataByIdData = { - body?: never; - path: { - id: string; - }; - query?: never; - url: '/umbraco/management/api/v1/user-data/{id}'; -}; - -export type DeleteUserDataByIdErrors = { - /** - * Bad Request - */ - 400: UserDataOperationStatusModel; - /** - * The resource is protected and requires an authentication token - */ - 401: unknown; - /** - * Not Found - */ - 404: UserDataOperationStatusModel; -}; - -export type DeleteUserDataByIdError = DeleteUserDataByIdErrors[keyof DeleteUserDataByIdErrors]; - -export type DeleteUserDataByIdResponses = { - /** - * OK - */ - 200: unknown; -}; - export type GetUserDataByIdData = { body?: never; path: { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/server/server-connection.ts b/src/Umbraco.Web.UI.Client/src/packages/core/server/server-connection.ts index 6df745f4832b..1f22522350d2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/server/server-connection.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/server/server-connection.ts @@ -20,9 +20,6 @@ export class UmbServerConnection extends UmbControllerBase { #allowPasswordReset = new UmbBooleanState(false); allowPasswordReset = this.#allowPasswordReset.asObservable(); - #enableMediaRecycleBinProtection = new UmbBooleanState(false); - enableMediaRecycleBinProtection = this.#enableMediaRecycleBinProtection.asObservable(); - constructor(host: UmbControllerHost, serverUrl: string) { super(host); this.#url = serverUrl; @@ -89,6 +86,5 @@ export class UmbServerConnection extends UmbControllerBase { this.#versionCheckPeriod.setValue(data?.versionCheckPeriod); this.#allowLocalLogin.setValue(data?.allowLocalLogin ?? false); this.#allowPasswordReset.setValue(data?.allowPasswordReset ?? false); - this.#enableMediaRecycleBinProtection.setValue(data?.enableMediaRecycleBinProtection ?? false); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/image-cropper/property-editor-ui-image-cropper.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/image-cropper/property-editor-ui-image-cropper.element.ts index 2f61ad004005..e5a5f5692ace 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/image-cropper/property-editor-ui-image-cropper.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/image-cropper/property-editor-ui-image-cropper.element.ts @@ -9,8 +9,6 @@ import { UMB_VALIDATION_EMPTY_LOCALIZATION_KEY, UmbFormControlMixin } from '@umb import '../../components/input-image-cropper/input-image-cropper.element.js'; import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; -import { UMB_IS_TRASHED_ENTITY_CONTEXT } from '@umbraco-cms/backoffice/recycle-bin'; -import { UMB_SERVER_CONTEXT } from '@umbraco-cms/backoffice/server'; /** * @element umb-property-editor-ui-image-cropper @@ -39,21 +37,6 @@ export class UmbPropertyEditorUIImageCropperElement this.crops = config?.getValueByAlias('crops') ?? []; } - #trashedEntityContext?: typeof UMB_IS_TRASHED_ENTITY_CONTEXT.TYPE; - #serverContext?: typeof UMB_SERVER_CONTEXT.TYPE; - - constructor() { - super(); - - this.consumeContext(UMB_IS_TRASHED_ENTITY_CONTEXT, (context) => { - this.#trashedEntityContext = context; - }); - - this.consumeContext(UMB_SERVER_CONTEXT, (context) => { - this.#serverContext = context; - }); - } - override firstUpdated() { this.addFormControlElement(this.shadowRoot!.querySelector('umb-input-image-cropper')!); } @@ -67,34 +50,10 @@ export class UmbPropertyEditorUIImageCropperElement this.dispatchEvent(new UmbChangeEvent()); } - #getValue() { - // If the media item is in the recycle bin and media recycle bin protection is on, the media file will have been - // renamed to have a .deleted suffix (e.g. media/xxx/test.png will be media/xxx/test.deleted.png on disk). - const isTrashed = this.#trashedEntityContext?.getIsTrashed(); - const mediaRecycleBinProtectionEnabled = this.#serverContext?.getServerConnection().enableMediaRecycleBinProtection; - return isTrashed && mediaRecycleBinProtectionEnabled - ? { ...this.value, src: this.#updateSrcToProtectedFile(this.value?.src) } - : this.value; - } - - #updateSrcToProtectedFile(src: string | undefined) { - if (!src) { - return undefined; - } - - const lastDotIndex = src.lastIndexOf('.'); - - if (lastDotIndex === -1) { - return src + '.deleted'; - } - - return src.slice(0, lastDotIndex) + '.deleted' + src.slice(lastDotIndex); - } - override render() { return html``; From 8a7ac51d0e36d4b78977ee5432f7afd478073cd3 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Tue, 7 Oct 2025 08:32:03 +0200 Subject: [PATCH 11/17] Moved update of path to media file in recycle bin with deleted suffix to the server. --- .../Mapping/Media/MediaMapDefinition.cs | 59 ++++++++++++++++++- 1 file changed, 57 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Cms.Api.Management/Mapping/Media/MediaMapDefinition.cs b/src/Umbraco.Cms.Api.Management/Mapping/Media/MediaMapDefinition.cs index 5d3f579c58b9..ff9080b698a0 100644 --- a/src/Umbraco.Cms.Api.Management/Mapping/Media/MediaMapDefinition.cs +++ b/src/Umbraco.Cms.Api.Management/Mapping/Media/MediaMapDefinition.cs @@ -1,13 +1,16 @@ using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; using Umbraco.Cms.Api.Management.Mapping.Content; using Umbraco.Cms.Api.Management.ViewModels.Media; using Umbraco.Cms.Api.Management.ViewModels.Media.Collection; using Umbraco.Cms.Api.Management.ViewModels.MediaType; +using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.DependencyInjection; using Umbraco.Cms.Core.Mapping; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.Mapping; using Umbraco.Cms.Core.PropertyEditors; +using Umbraco.Cms.Core.PropertyEditors.ValueConverters; using Umbraco.Extensions; namespace Umbraco.Cms.Api.Management.Mapping.Media; @@ -15,13 +18,32 @@ namespace Umbraco.Cms.Api.Management.Mapping.Media; public class MediaMapDefinition : ContentMapDefinition, IMapDefinition { private readonly CommonMapper _commonMapper; + private ImagingSettings _imagingSettings; public MediaMapDefinition( PropertyEditorCollection propertyEditorCollection, CommonMapper commonMapper, - IDataValueEditorFactory dataValueEditorFactory) + IDataValueEditorFactory dataValueEditorFactory, + IOptionsMonitor imagingSettings) : base(propertyEditorCollection, dataValueEditorFactory) - => _commonMapper = commonMapper; + { + _commonMapper = commonMapper; + _imagingSettings = imagingSettings.CurrentValue; + imagingSettings.OnChange(x => _imagingSettings = x); + } + + [Obsolete("Please use the non-obsolete constructor. Scheduled for removal in Umbraco 18.")] + public MediaMapDefinition( + PropertyEditorCollection propertyEditorCollection, + CommonMapper commonMapper, + IDataValueEditorFactory dataValueEditorFactory) + : this( + propertyEditorCollection, + commonMapper, + dataValueEditorFactory, + StaticServiceProvider.Instance.GetRequiredService>()) + { + } [Obsolete("Please use the non-obsolete constructor. Scheduled for removal in Umbraco 18.")] public MediaMapDefinition( @@ -48,6 +70,39 @@ private void Map(IMedia source, MediaResponseModel target, MapperContext context target.Values = MapValueViewModels(source.Properties); target.Variants = MapVariantViewModels(source); target.IsTrashed = source.Trashed; + + // If protection for media files in the recycle bin is enabled, and the media item is trashed, amend the value of the file path + // to have the `.deleted` suffix that will have been added to the persisted file. + if (target.IsTrashed && _imagingSettings.EnableMediaRecycleBinProtection) + { + foreach (MediaValueResponseModel value in target.Values + .Where(x => x.EditorAlias.Equals(Core.Constants.PropertyEditors.Aliases.ImageCropper))) + { + if (value.Value is not null && + value.Value is ImageCropperValue imageCropperValue && + string.IsNullOrWhiteSpace(imageCropperValue.Src) is false) + { + value.Value = new ImageCropperValue + { + Crops = imageCropperValue.Crops, + FocalPoint = imageCropperValue.FocalPoint, + TemporaryFileId = imageCropperValue.TemporaryFileId, + Src = SuffixMediaPath(imageCropperValue.Src, Core.Constants.Conventions.Media.TrashedMediaSuffix), + }; + } + } + } + } + + private static string SuffixMediaPath(string filePath, string suffix) + { + int lastDotIndex = filePath.LastIndexOf('.'); + if (lastDotIndex == -1) + { + return filePath + suffix; + } + + return filePath[..lastDotIndex] + suffix + filePath[lastDotIndex..]; } // Umbraco.Code.MapAll -Flags From 7c4440ad679bbd147ce6761cc1168112e028c006 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Wed, 29 Oct 2025 15:26:07 +0100 Subject: [PATCH 12/17] Separate integration tests for add and remove. --- .../Umbraco.Core/IO/FileSystemsTests.cs | 52 +++++++++++++------ 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/tests/Umbraco.Tests.Integration/Umbraco.Core/IO/FileSystemsTests.cs b/tests/Umbraco.Tests.Integration/Umbraco.Core/IO/FileSystemsTests.cs index cf733087d9b7..5893333e8ace 100644 --- a/tests/Umbraco.Tests.Integration/Umbraco.Core/IO/FileSystemsTests.cs +++ b/tests/Umbraco.Tests.Integration/Umbraco.Core/IO/FileSystemsTests.cs @@ -69,30 +69,52 @@ public void Can_Delete_MediaFiles() } [Test] - public void Can_Add_And_Remove_Suffix_To_And_From_Media_Files() + public void Can_Add_Suffix_To_Media_Files() { var mediaFileManager = GetRequiredService(); - var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes("test")); - var virtualPath = mediaFileManager.GetMediaPath("file.txt", Guid.NewGuid(), Guid.NewGuid()); - mediaFileManager.FileSystem.AddFile(virtualPath, memoryStream); + var hostingEnvironment = GetRequiredService(); + + CreateMediaFile(mediaFileManager, hostingEnvironment, out string virtualPath, out string physicalPath); + Assert.IsTrue(File.Exists(physicalPath)); + + mediaFileManager.SuffixMediaFiles([virtualPath], Cms.Core.Constants.Conventions.Media.TrashedMediaSuffix); + Assert.IsFalse(File.Exists(physicalPath)); + var virtualPathWithSuffix = virtualPath.Replace("file.txt", $"file{Cms.Core.Constants.Conventions.Media.TrashedMediaSuffix}.txt"); + physicalPath = hostingEnvironment.MapPathWebRoot(Path.Combine("media", virtualPathWithSuffix)); + Assert.IsTrue(File.Exists(physicalPath)); + } + + [Test] + public void Can_Remove_Suffix_From_Media_Files() + { + var mediaFileManager = GetRequiredService(); var hostingEnvironment = GetRequiredService(); - var physPath = hostingEnvironment.MapPathWebRoot(Path.Combine("media", virtualPath)); - Assert.IsTrue(File.Exists(physPath)); - // Add .deleted suffix. + CreateMediaFile(mediaFileManager, hostingEnvironment, out string virtualPath, out string physicalPath); mediaFileManager.SuffixMediaFiles([virtualPath], Cms.Core.Constants.Conventions.Media.TrashedMediaSuffix); - Assert.IsFalse(File.Exists(physPath)); + Assert.IsFalse(File.Exists(physicalPath)); + + mediaFileManager.RemoveSuffixFromMediaFiles([virtualPath], Cms.Core.Constants.Conventions.Media.TrashedMediaSuffix); + Assert.IsFalse(File.Exists(physicalPath)); var virtualPathWithSuffix = virtualPath.Replace("file.txt", $"file{Cms.Core.Constants.Conventions.Media.TrashedMediaSuffix}.txt"); - physPath = hostingEnvironment.MapPathWebRoot(Path.Combine("media", virtualPathWithSuffix)); - Assert.IsTrue(File.Exists(physPath)); + physicalPath = hostingEnvironment.MapPathWebRoot(Path.Combine("media", virtualPathWithSuffix)); + Assert.IsTrue(File.Exists(physicalPath)); + } - // Remove .deleted suffix. - mediaFileManager.RemoveSuffixFromMediaFiles([virtualPathWithSuffix], Cms.Core.Constants.Conventions.Media.TrashedMediaSuffix); - Assert.IsFalse(File.Exists(physPath)); - physPath = hostingEnvironment.MapPathWebRoot(Path.Combine("media", virtualPath)); - Assert.IsTrue(File.Exists(physPath)); + private static void CreateMediaFile( + MediaFileManager mediaFileManager, + IHostingEnvironment hostingEnvironment, + out string virtualPath, + out string physicalPath) + { + virtualPath = mediaFileManager.GetMediaPath("file.txt", Guid.NewGuid(), Guid.NewGuid()); + physicalPath = hostingEnvironment.MapPathWebRoot(Path.Combine("media", virtualPath)); + + var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes("test")); + mediaFileManager.FileSystem.AddFile(virtualPath, memoryStream); + Assert.IsTrue(File.Exists(physicalPath)); } // TODO: don't make sense anymore From bc8234505566ab4896d481ff26a92b6d386b0757 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Wed, 29 Oct 2025 15:27:15 +0100 Subject: [PATCH 13/17] Use interpolated strings. --- src/Umbraco.Core/IO/ShadowFileSystem.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Core/IO/ShadowFileSystem.cs b/src/Umbraco.Core/IO/ShadowFileSystem.cs index cc4de4cb60b2..db39fe74f4f4 100644 --- a/src/Umbraco.Core/IO/ShadowFileSystem.cs +++ b/src/Umbraco.Core/IO/ShadowFileSystem.cs @@ -91,7 +91,7 @@ public void AddFile(string path, Stream stream, bool overrideIfExists) var normPath = NormPath(path); if (Nodes.TryGetValue(normPath, out ShadowNode? sf) && sf.IsExist && (sf.IsDir || overrideIfExists == false)) { - throw new InvalidOperationException(string.Format("A file at path '{0}' already exists", path)); + throw new InvalidOperationException($"A file at path '{path}' already exists"); } var parts = normPath.Split(Constants.CharArrays.ForwardSlash); @@ -181,7 +181,7 @@ public void MoveFile(string source, string target, bool overrideIfExists = true) if (Nodes.TryGetValue(normTarget, out ShadowNode? tf) && tf.IsExist && (tf.IsDir || overrideIfExists == false)) { - throw new IOException(string.Format("A file at path '{0}' already exists", target)); + throw new IOException($"A file at path '{target}' already exists"); } var parts = normTarget.Split(Constants.CharArrays.ForwardSlash); @@ -295,7 +295,7 @@ public void AddFile(string path, string physicalPath, bool overrideIfExists = tr var normPath = NormPath(path); if (Nodes.TryGetValue(normPath, out ShadowNode? sf) && sf.IsExist && (sf.IsDir || overrideIfExists == false)) { - throw new InvalidOperationException(string.Format("A file at path '{0}' already exists", path)); + throw new InvalidOperationException($"A file at path '{path}' already exists"); } var parts = normPath.Split(Constants.CharArrays.ForwardSlash); From 2e742b041b2b5184d0fa503a2c90683a7a02c652 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Wed, 29 Oct 2025 15:29:26 +0100 Subject: [PATCH 14/17] Renamed variable. --- .../Mapping/Media/MediaMapDefinition.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Cms.Api.Management/Mapping/Media/MediaMapDefinition.cs b/src/Umbraco.Cms.Api.Management/Mapping/Media/MediaMapDefinition.cs index ff9080b698a0..7bd68f1f8e23 100644 --- a/src/Umbraco.Cms.Api.Management/Mapping/Media/MediaMapDefinition.cs +++ b/src/Umbraco.Cms.Api.Management/Mapping/Media/MediaMapDefinition.cs @@ -75,14 +75,14 @@ private void Map(IMedia source, MediaResponseModel target, MapperContext context // to have the `.deleted` suffix that will have been added to the persisted file. if (target.IsTrashed && _imagingSettings.EnableMediaRecycleBinProtection) { - foreach (MediaValueResponseModel value in target.Values + foreach (MediaValueResponseModel valueModel in target.Values .Where(x => x.EditorAlias.Equals(Core.Constants.PropertyEditors.Aliases.ImageCropper))) { - if (value.Value is not null && - value.Value is ImageCropperValue imageCropperValue && + if (valueModel.Value is not null && + valueModel.Value is ImageCropperValue imageCropperValue && string.IsNullOrWhiteSpace(imageCropperValue.Src) is false) { - value.Value = new ImageCropperValue + valueModel.Value = new ImageCropperValue { Crops = imageCropperValue.Crops, FocalPoint = imageCropperValue.FocalPoint, From f77738b7feea8b57a7177e39e39d9f3e0fb97575 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Tue, 4 Nov 2025 07:41:28 +0100 Subject: [PATCH 15/17] Move EnableMediaRecycleBinProtection to ContentSettings. --- .../Mapping/Media/MediaMapDefinition.cs | 12 +++---- .../Configuration/Models/ContentSettings.cs | 13 +++++++ .../Configuration/Models/ImagingSettings.cs | 14 -------- .../ImageCropperPropertyEditor.cs | 34 ++----------------- ...UploadContentDeletedNotificationHandler.cs | 12 +++---- .../ProtectRecycleBinMediaMiddleware.cs | 10 +++--- 6 files changed, 32 insertions(+), 63 deletions(-) diff --git a/src/Umbraco.Cms.Api.Management/Mapping/Media/MediaMapDefinition.cs b/src/Umbraco.Cms.Api.Management/Mapping/Media/MediaMapDefinition.cs index 7bd68f1f8e23..6ec71e8a5c11 100644 --- a/src/Umbraco.Cms.Api.Management/Mapping/Media/MediaMapDefinition.cs +++ b/src/Umbraco.Cms.Api.Management/Mapping/Media/MediaMapDefinition.cs @@ -18,18 +18,18 @@ namespace Umbraco.Cms.Api.Management.Mapping.Media; public class MediaMapDefinition : ContentMapDefinition, IMapDefinition { private readonly CommonMapper _commonMapper; - private ImagingSettings _imagingSettings; + private ContentSettings _contentSettings; public MediaMapDefinition( PropertyEditorCollection propertyEditorCollection, CommonMapper commonMapper, IDataValueEditorFactory dataValueEditorFactory, - IOptionsMonitor imagingSettings) + IOptionsMonitor contentSettings) : base(propertyEditorCollection, dataValueEditorFactory) { _commonMapper = commonMapper; - _imagingSettings = imagingSettings.CurrentValue; - imagingSettings.OnChange(x => _imagingSettings = x); + _contentSettings = contentSettings.CurrentValue; + contentSettings.OnChange(x => _contentSettings = x); } [Obsolete("Please use the non-obsolete constructor. Scheduled for removal in Umbraco 18.")] @@ -41,7 +41,7 @@ public MediaMapDefinition( propertyEditorCollection, commonMapper, dataValueEditorFactory, - StaticServiceProvider.Instance.GetRequiredService>()) + StaticServiceProvider.Instance.GetRequiredService>()) { } @@ -73,7 +73,7 @@ private void Map(IMedia source, MediaResponseModel target, MapperContext context // If protection for media files in the recycle bin is enabled, and the media item is trashed, amend the value of the file path // to have the `.deleted` suffix that will have been added to the persisted file. - if (target.IsTrashed && _imagingSettings.EnableMediaRecycleBinProtection) + if (target.IsTrashed && _contentSettings.EnableMediaRecycleBinProtection) { foreach (MediaValueResponseModel valueModel in target.Values .Where(x => x.EditorAlias.Equals(Core.Constants.PropertyEditors.Aliases.ImageCropper))) diff --git a/src/Umbraco.Core/Configuration/Models/ContentSettings.cs b/src/Umbraco.Core/Configuration/Models/ContentSettings.cs index 6df9b429e907..5bcfbe678aac 100644 --- a/src/Umbraco.Core/Configuration/Models/ContentSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/ContentSettings.cs @@ -30,6 +30,7 @@ public class ContentSettings internal const bool StaticAllowEditInvariantFromNonDefault = false; internal const bool StaticShowDomainWarnings = true; internal const bool StaticShowUnroutableContentWarnings = true; + private const bool StaticEnableMediaRecycleBinProtection = false; /// /// Gets or sets a value for the content notification settings. @@ -158,4 +159,16 @@ public class ContentSettings /// [DefaultValue(StaticShowUnroutableContentWarnings)] public bool ShowUnroutableContentWarnings { get; set; } = StaticShowUnroutableContentWarnings; + + /// + /// Gets or sets a value indicating whether to enable or disable the recycle bin protection for media. + /// + /// + /// When set to true, this will: + /// - Rename media moved to the recycle bin to have a .deleted suffice (e.g. image.jpg will be renamed to image.deleted.jpg). + /// - On restore, the media file will be renamed back to its original name. + /// - A middleware component will be enabled to prevent access to media files in the recycle bin unless the user is authenticated with access to the media section. + /// + [DefaultValue(StaticEnableMediaRecycleBinProtection)] + public bool EnableMediaRecycleBinProtection { get; set; } = StaticEnableMediaRecycleBinProtection; } diff --git a/src/Umbraco.Core/Configuration/Models/ImagingSettings.cs b/src/Umbraco.Core/Configuration/Models/ImagingSettings.cs index a0db029f9d33..9227c3158501 100644 --- a/src/Umbraco.Core/Configuration/Models/ImagingSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/ImagingSettings.cs @@ -11,8 +11,6 @@ namespace Umbraco.Cms.Core.Configuration.Models; [UmbracoOptions(Constants.Configuration.ConfigImaging)] public class ImagingSettings { - private const bool StaticEnableMediaRecycleBinProtection = false; - /// /// Gets or sets a value for the Hash-based Message Authentication Code (HMAC) secret key for request authentication. /// @@ -31,16 +29,4 @@ public class ImagingSettings /// Gets or sets a value for imaging resize settings. /// public ImagingResizeSettings Resize { get; set; } = new(); - - /// - /// Gets or sets a value indicating whether to enable or disable the recycle bin protection for media. - /// - /// - /// When set to true, this will: - /// - Rename media moved to the recycle bin to have a .deleted suffice (e.g. image.jpg will be renamed to image.deleted.jpg). - /// - On restore, the media file will be renamed back to its original name. - /// - A middleware component will be enabled to prevent access to media files in the recycle bin unless the user is authenticated with access to the media section. - /// - [DefaultValue(StaticEnableMediaRecycleBinProtection)] - public bool EnableMediaRecycleBinProtection { get; set; } = StaticEnableMediaRecycleBinProtection; } diff --git a/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs b/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs index 4ca80dab8823..1af39f76851b 100644 --- a/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs +++ b/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs @@ -42,12 +42,10 @@ public class ImageCropperPropertyEditor : DataEditor, IMediaUrlGenerator, private readonly MediaFileManager _mediaFileManager; private ContentSettings _contentSettings; private readonly IJsonSerializer _jsonSerializer; - private ImagingSettings _imagingSettings; /// /// Initializes a new instance of the class. /// - [Obsolete("Please use the constructor taking all parameters. Scheduled for removal in Umbraco 18.")] public ImageCropperPropertyEditor( IDataValueEditorFactory dataValueEditorFactory, ILoggerFactory loggerFactory, @@ -57,32 +55,6 @@ public ImageCropperPropertyEditor( UploadAutoFillProperties uploadAutoFillProperties, IContentService contentService, IJsonSerializer jsonSerializer) - : this( - dataValueEditorFactory, - loggerFactory, - mediaFileManager, - contentSettings, - ioHelper, - uploadAutoFillProperties, - contentService, - jsonSerializer, - StaticServiceProvider.Instance.GetRequiredService>()) - { - } - - /// - /// Initializes a new instance of the class. - /// - public ImageCropperPropertyEditor( - IDataValueEditorFactory dataValueEditorFactory, - ILoggerFactory loggerFactory, - MediaFileManager mediaFileManager, - IOptionsMonitor contentSettings, - IIOHelper ioHelper, - UploadAutoFillProperties uploadAutoFillProperties, - IContentService contentService, - IJsonSerializer jsonSerializer, - IOptionsMonitor imagingSettings) : base(dataValueEditorFactory) { _mediaFileManager = mediaFileManager ?? throw new ArgumentNullException(nameof(mediaFileManager)); @@ -93,10 +65,8 @@ public ImageCropperPropertyEditor( _contentService = contentService; _jsonSerializer = jsonSerializer; _logger = loggerFactory.CreateLogger(); - _imagingSettings = imagingSettings.CurrentValue; contentSettings.OnChange(x => _contentSettings = x); - imagingSettings.OnChange(x => _imagingSettings = x); SupportsReadOnly = true; } @@ -175,7 +145,7 @@ public void Handle(MediaSavingNotification notification) /// public void Handle(MediaMovedToRecycleBinNotification notification) { - if (_imagingSettings.EnableMediaRecycleBinProtection is false) + if (_contentSettings.EnableMediaRecycleBinProtection is false) { return; } @@ -188,7 +158,7 @@ public void Handle(MediaMovedToRecycleBinNotification notification) /// public void Handle(MediaMovedNotification notification) { - if (_imagingSettings.EnableMediaRecycleBinProtection is false) + if (_contentSettings.EnableMediaRecycleBinProtection is false) { return; } diff --git a/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs b/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs index 69a791feb24f..1c36bea04df8 100644 --- a/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs +++ b/src/Umbraco.Infrastructure/PropertyEditors/NotificationHandlers/FileUploadContentDeletedNotificationHandler.cs @@ -29,7 +29,7 @@ internal sealed class FileUploadContentDeletedNotificationHandler : FileUploadNo { private readonly BlockEditorValues _blockListEditorValues; private readonly BlockEditorValues _blockGridEditorValues; - private ImagingSettings _imagingSettings; + private ContentSettings _contentSettings; /// /// Initializes a new instance of the class. @@ -39,14 +39,14 @@ public FileUploadContentDeletedNotificationHandler( MediaFileManager mediaFileManager, IBlockEditorElementTypeCache elementTypeCache, ILogger logger, - IOptionsMonitor imagingSettings) + IOptionsMonitor contentSettngs) : base(jsonSerializer, mediaFileManager, elementTypeCache) { _blockListEditorValues = new(new BlockListEditorDataConverter(jsonSerializer), elementTypeCache, logger); _blockGridEditorValues = new(new BlockGridEditorDataConverter(jsonSerializer), elementTypeCache, logger); - _imagingSettings = imagingSettings.CurrentValue; - imagingSettings.OnChange(x => _imagingSettings = x); + _contentSettings = contentSettngs.CurrentValue; + contentSettngs.OnChange(x => _contentSettings = x); } /// @@ -61,7 +61,7 @@ public FileUploadContentDeletedNotificationHandler( /// public void Handle(MediaMovedToRecycleBinNotification notification) { - if (_imagingSettings.EnableMediaRecycleBinProtection is false) + if (_contentSettings.EnableMediaRecycleBinProtection is false) { return; } @@ -74,7 +74,7 @@ public void Handle(MediaMovedToRecycleBinNotification notification) /// public void Handle(MediaMovedNotification notification) { - if (_imagingSettings.EnableMediaRecycleBinProtection is false) + if (_contentSettings.EnableMediaRecycleBinProtection is false) { return; } diff --git a/src/Umbraco.Web.Common/Middleware/ProtectRecycleBinMediaMiddleware.cs b/src/Umbraco.Web.Common/Middleware/ProtectRecycleBinMediaMiddleware.cs index c5a6770bb653..2df70c2de5d6 100644 --- a/src/Umbraco.Web.Common/Middleware/ProtectRecycleBinMediaMiddleware.cs +++ b/src/Umbraco.Web.Common/Middleware/ProtectRecycleBinMediaMiddleware.cs @@ -13,22 +13,22 @@ namespace Umbraco.Cms.Web.Common.Middleware; /// public class ProtectRecycleBinMediaMiddleware : IMiddleware { - private ImagingSettings _imagingSettings; + private ContentSettings _contentSettings; /// /// Initializes a new instance of the class. /// public ProtectRecycleBinMediaMiddleware( - IOptionsMonitor imagingSettings) + IOptionsMonitor contentSettings) { - _imagingSettings = imagingSettings.CurrentValue; - imagingSettings.OnChange(x => _imagingSettings = x); + _contentSettings = contentSettings.CurrentValue; + contentSettings.OnChange(x => _contentSettings = x); } /// public async Task InvokeAsync(HttpContext context, RequestDelegate next) { - if (_imagingSettings.EnableMediaRecycleBinProtection is false) + if (_contentSettings.EnableMediaRecycleBinProtection is false) { await next(context); return; From 97e8632026767e9521d1c64336696c29731b77af Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Tue, 4 Nov 2025 08:02:20 +0100 Subject: [PATCH 16/17] Tidied up comments. --- ...poseBackOfficeAuthenticationOpenIddictServerEventsHandler.cs | 2 +- src/Umbraco.Core/Constants-Security.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Cms.Api.Common/Security/ExposeBackOfficeAuthenticationOpenIddictServerEventsHandler.cs b/src/Umbraco.Cms.Api.Common/Security/ExposeBackOfficeAuthenticationOpenIddictServerEventsHandler.cs index 3ffe13c0a7b3..4f3444ae31a5 100644 --- a/src/Umbraco.Cms.Api.Common/Security/ExposeBackOfficeAuthenticationOpenIddictServerEventsHandler.cs +++ b/src/Umbraco.Cms.Api.Common/Security/ExposeBackOfficeAuthenticationOpenIddictServerEventsHandler.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Security; /// -/// Provides OpenIddict server event handlers to expose back-office authentication via a custom authentication scheme. +/// Provides OpenIddict server event handlers to expose the backoffice authentication token via a custom authentication scheme. /// public class ExposeBackOfficeAuthenticationOpenIddictServerEventsHandler : IOpenIddictServerHandler, IOpenIddictServerHandler diff --git a/src/Umbraco.Core/Constants-Security.cs b/src/Umbraco.Core/Constants-Security.cs index 94a446886042..6567fc99b33e 100644 --- a/src/Umbraco.Core/Constants-Security.cs +++ b/src/Umbraco.Core/Constants-Security.cs @@ -80,7 +80,7 @@ public static class Security public const string BackOfficeExposedAuthenticationType = "UmbracoBackOfficeExposed"; /// - /// Represents the name of the authentication cookie used to expose the backoffice context out of the backoffice context. + /// Represents the name of the authentication cookie used to expose the backoffice authentication token outside of the backoffice context. /// public const string BackOfficeExposedCookieName = "UMB_UCONTEXT_EXPOSED"; From 996435aafcd9e9a74e2842b997697cf3ce333908 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Tue, 4 Nov 2025 08:07:30 +0100 Subject: [PATCH 17/17] Added TODO for 18. --- src/Umbraco.Core/Configuration/Models/ContentSettings.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Umbraco.Core/Configuration/Models/ContentSettings.cs b/src/Umbraco.Core/Configuration/Models/ContentSettings.cs index 5bcfbe678aac..645d21c56711 100644 --- a/src/Umbraco.Core/Configuration/Models/ContentSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/ContentSettings.cs @@ -30,6 +30,8 @@ public class ContentSettings internal const bool StaticAllowEditInvariantFromNonDefault = false; internal const bool StaticShowDomainWarnings = true; internal const bool StaticShowUnroutableContentWarnings = true; + + // TODO (V18): Consider enabling this by default and documenting as a behavioural breaking change. private const bool StaticEnableMediaRecycleBinProtection = false; ///