From 63d105c752d238e39336fd1069c45154596b7dd9 Mon Sep 17 00:00:00 2001 From: garrettmills Date: Fri, 27 Nov 2020 13:45:22 -0600 Subject: [PATCH] Add support for chmod, descriptor type to mode type mapping --- app/enum.js | 8 +++++++- app/ws/routes/fs.chmod.js | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 app/ws/routes/fs.chmod.js 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() }) + ) +}