|
|
@@ -122,6 +122,9 @@ module.exports = ProjectEntityMongoUpdateHandler = self =
|
|
|
return callback(err) if err?
|
|
|
ProjectLocator.findElement {project, element_id: entity_id, type: entityType}, (err, entity, entityPath)->
|
|
|
return callback(err) if err?
|
|
|
+ # Prevent top-level docs/files with reserved names (to match v1 behaviour)
|
|
|
+ if self._blockedFilename entityPath, entityType
|
|
|
+ return callback new Errors.InvalidNameError("blocked element name")
|
|
|
self._checkValidMove project, entityType, entity, entityPath, destFolderId, (error) ->
|
|
|
return callback(error) if error?
|
|
|
ProjectEntityHandler.getAllEntitiesFromProject project, (error, oldDocs, oldFiles) ->
|
|
|
@@ -153,10 +156,13 @@ module.exports = ProjectEntityMongoUpdateHandler = self =
|
|
|
return callback(error) if error?
|
|
|
ProjectLocator.findElement {project:project, element_id:entity_id, type:entityType}, (error, entity, entPath, parentFolder)=>
|
|
|
return callback(error) if error?
|
|
|
+ endPath = path.join(path.dirname(entPath.fileSystem), newName)
|
|
|
+ # Prevent top-level docs/files with reserved names (to match v1 behaviour)
|
|
|
+ if self._blockedFilename {fileSystem: endPath}, entityType
|
|
|
+ return callback new Errors.InvalidNameError("blocked element name")
|
|
|
# check if the new name already exists in the current folder
|
|
|
self._checkValidElementName parentFolder, newName, (error) =>
|
|
|
return callback(error) if error?
|
|
|
- endPath = path.join(path.dirname(entPath.fileSystem), newName)
|
|
|
conditions = {_id:project_id}
|
|
|
update = "$set":{}, "$inc":{}
|
|
|
namePath = entPath.mongo+".name"
|
|
|
@@ -257,6 +263,9 @@ module.exports = ProjectEntityMongoUpdateHandler = self =
|
|
|
# check if the path would be too long
|
|
|
if not SafePath.isAllowedLength newPath.fileSystem
|
|
|
return callback new Errors.InvalidNameError("path too long")
|
|
|
+ # Prevent top-level docs/files with reserved names (to match v1 behaviour)
|
|
|
+ if self._blockedFilename newPath, type
|
|
|
+ return callback new Errors.InvalidNameError("blocked element name")
|
|
|
self._checkValidElementName folder, element.name, (err) =>
|
|
|
return callback(err) if err?
|
|
|
id = element._id+''
|
|
|
@@ -276,6 +285,18 @@ module.exports = ProjectEntityMongoUpdateHandler = self =
|
|
|
return callback(err)
|
|
|
callback(err, {path:newPath}, newProject)
|
|
|
|
|
|
+ _blockedFilename: (entityPath, entityType) ->
|
|
|
+ # check if name would be blocked in v1
|
|
|
+ # javascript reserved names are forbidden for docs and files
|
|
|
+ # at the top-level (but folders with reserved names are allowed).
|
|
|
+ isFolder = (entityType in ['folder', 'folders'])
|
|
|
+ [dir, file] = [path.dirname(entityPath.fileSystem), path.basename(entityPath.fileSystem)]
|
|
|
+ isTopLevel = dir is '/'
|
|
|
+ if isTopLevel and !isFolder && SafePath.isBlockedFilename file
|
|
|
+ return true
|
|
|
+ else
|
|
|
+ return false
|
|
|
+
|
|
|
_checkValidElementName: (folder, name, callback = (err) ->) ->
|
|
|
# check if the name is already taken by a doc, file or
|
|
|
# folder. If so, return an error "file already exists".
|