diff --git a/app/enum.js b/app/enum.js index 32afee6..c36e891 100644 --- a/app/enum.js +++ b/app/enum.js @@ -10,4 +10,10 @@ const NodeModeType = { Symlink: 40960, } -module.exports = exports = { NodeDescriptorType, NodeModeType } \ No newline at end of file +const DescriptorTypeXNodeType = { + [NodeDescriptorType.File]: NodeModeType.File, + [NodeDescriptorType.Directory]: NodeModeType.Directory, + [NodeDescriptorType.Symlink]: NodeModeType.Symlink, +} + +module.exports = exports = { NodeDescriptorType, NodeModeType, DescriptorTypeXNodeType } \ No newline at end of file diff --git a/app/ws/routes/fs.chmod.js b/app/ws/routes/fs.chmod.js new file mode 100644 index 0000000..277e6b9 --- /dev/null +++ b/app/ws/routes/fs.chmod.js @@ -0,0 +1,34 @@ +const { Errors } = require('../../shared') +const { NodeDescriptorType } = require('../../enum') + +// TODO should this return size info for the temp write file? +module.exports = exports = async (message, di) => { + const Node = di.models.get('fs:Node') + const { path, mode } = 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) + ) + } + + node.mode = mode + await node.save() + + message.send_response( + message.fresh().data({ node: node.to_api() }) + ) +}