diff --git a/packages/core/upload/server/controllers/utils/folders.js b/packages/core/upload/server/controllers/utils/folders.js new file mode 100644 index 0000000000..52b63b477c --- /dev/null +++ b/packages/core/upload/server/controllers/utils/folders.js @@ -0,0 +1,8 @@ +'use strict'; + +const isFolderOrChild = (folderOrChild, folder) => + folderOrChild.path === folder.path || folderOrChild.path.startsWith(`${folder.path}/`); + +module.exports = { + isFolderOrChild, +}; diff --git a/packages/core/upload/server/controllers/validation/admin/folder-file.js b/packages/core/upload/server/controllers/validation/admin/folder-file.js index 8efbb999a5..d28df91c05 100644 --- a/packages/core/upload/server/controllers/validation/admin/folder-file.js +++ b/packages/core/upload/server/controllers/validation/admin/folder-file.js @@ -4,6 +4,7 @@ const { intersection, map, isEmpty } = require('lodash/fp'); const { yup, validateYupSchema } = require('@strapi/utils'); const { FOLDER_MODEL_UID } = require('../../../constants'); const { folderExists } = require('./utils'); +const { isFolderOrChild } = require('../../utils/folders'); const validateDeleteManyFoldersFilesSchema = yup .object() @@ -75,11 +76,7 @@ const validateMoveFoldersNotInsideThemselvesSchema = yup }); const unmovableFoldersNames = folders - .filter( - (folder) => - destinationFolder.path === folder.path || - destinationFolder.path.startsWith(`${folder.path}/`) - ) + .filter((folder) => isFolderOrChild(destinationFolder, folder)) .map((f) => f.name); if (unmovableFoldersNames.length > 0) { return this.createError({ diff --git a/packages/core/upload/server/controllers/validation/admin/folder.js b/packages/core/upload/server/controllers/validation/admin/folder.js index 9dfb0edbea..a457edd7b5 100644 --- a/packages/core/upload/server/controllers/validation/admin/folder.js +++ b/packages/core/upload/server/controllers/validation/admin/folder.js @@ -5,6 +5,7 @@ const { yup, validateYupSchema } = require('@strapi/utils'); const { getService } = require('../../../utils'); const { FOLDER_MODEL_UID } = require('../../../constants'); const { folderExists } = require('./utils'); +const { isFolderOrChild } = require('../../utils/folders'); const NO_SLASH_REGEX = /^[^/]+$/; const NO_SPACES_AROUND = /^(?! ).+(? if (!destinationFolder || !currentFolder) return true; - const isUnMovable = - destinationFolder.path === currentFolder.path || - destinationFolder.path.startsWith(`${currentFolder.path}/`); - - return !isUnMovable; + return !isFolderOrChild(destinationFolder, currentFolder); } ), })