Add support for extended attributes

This commit is contained in:
2020-11-27 12:15:11 -06:00
parent ba8e0396b8
commit bb4a786b41
5 changed files with 106 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
const { Errors } = require('../../shared')
module.exports = exports = async (message, di) => {
const Node = di.models.get('fs:Node')
const { path, name } = message.data()
const node = await Node.get_path(path, message.socket.session.overlay_name || 'mainline')
if ( !node ) {
return message.send_response(
message.fresh().error(Errors.NodeDoesNotExist)
)
}
message.send_response(
message.fresh().data({ node: node.to_api(), value: node.get_xattr(name)?.value })
)
}

View File

@@ -0,0 +1,19 @@
const { Errors } = require('../../shared')
module.exports = exports = async (message, di) => {
const Node = di.models.get('fs:Node')
const { path } = message.data()
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.guarantee_xattrs()
message.send_response(
message.fresh().data({ node: node.to_api(), names: node.extended_attributes.map(x => x.name) })
)
}

View File

@@ -0,0 +1,20 @@
const { Errors } = require('../../shared')
module.exports = exports = async (message, di) => {
const Node = di.models.get('fs:Node')
const { path, name } = message.data()
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.remove_xattr(name)
await node.save()
message.send_response(
message.fresh().data({ node: node.to_api() })
)
}

View File

@@ -0,0 +1,20 @@
const { Errors } = require('../../shared')
module.exports = exports = async (message, di) => {
const Node = di.models.get('fs:Node')
const { path, name, value } = message.data()
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.set_xattr(name, value)
await node.save()
message.send_response(
message.fresh().data({ node: node.to_api() })
)
}