You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
1.3 KiB

const { Errors } = require('../../shared')
const { NodeDescriptorType } = require('../../enum')
module.exports = exports = async (message, di) => {
const Node = di.models.get('fs:Node')
const { path } = message.data()
if ( !path ) {
return message.send_response(
message.fresh().error(Errors.NodeDoesNotExist)
)
}
if ( path === '/' ) {
return message.send_response(
message.fresh.error(Errors.NodePermissionFail)
)
}
const node = await Node.get_path(path, message.socket.session.overlay_name || 'mainline')
if ( !node ) {
return message.send_response(
message.fresh().error(Errors.NodeDoesNotExist)
)
}
if ( node.descriptor_type !== NodeDescriptorType.Directory ) {
return message.send_response(
message.fresh().error(Errors.NotDirectoryDescriptor)
)
}
const child = await Node.findOne({
pied_parent_path: path,
overlay_name: message.socket.session.overlay_name || 'mainline',
deleted: false,
})
if ( child ) {
return message.send_response(
message.fresh().error(Errors.NodeNotEmpty)
)
}
node.deleted = true
await node.save()
message.send_response(
message.fresh()
)
}