From 514edb984fdd9a4078b49ccb4baa5f8409c806dc Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 4 Jul 2018 18:47:58 -0600 Subject: [PATCH] + userHasDeleteRights() + deleteMessage() --- core/message.js | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/core/message.js b/core/message.js index 53b82e73..768cd116 100644 --- a/core/message.js +++ b/core/message.js @@ -137,6 +137,32 @@ module.exports = class Message { return null !== _.get(this, 'meta.System.remote_from_user', null); } + /* + :TODO: finish me + static checkUserHasDeleteRights(user, messageIdOrUuid, cb) { + const isMessageId = _.isNumber(messageIdOrUuid); + const getMetaName = isMessageId ? 'getMetaValuesByMessageId' : 'getMetaValuesByMessageUuid'; + + Message[getMetaName](messageIdOrUuid, 'System', Message.SystemMetaNames.LocalToUserID, (err, localUserId) => { + if(err) { + return cb(err); + } + + // expect single value + if(!_.isString(localUserId)) { + return cb(Errors.Invalid(`Invalid ${Message.SystemMetaNames.LocalToUserID} value: ${localUserId}`)); + } + + localUserId = parseInt(localUserId); + }); + } + */ + + userHasDeleteRights(user) { + const messageLocalUserId = parseInt(this.meta.System[Message.SystemMetaNames.LocalToUserID]); + return (this.isPrivate() && user.userId === messageLocalUserId) || user.isSysOp(); + } + static get WellKnownAreaTags() { return WELL_KNOWN_AREA_TAGS; } @@ -660,6 +686,21 @@ module.exports = class Message { ); } + deleteMessage(requestingUser, cb) { + if(!this.userHasDeleteRights(requestingUser)) { + return cb(Errors.AccessDenied('User does not have rights to delete this message')); + } + + msgDb.run( + `DELETE FROM message + WHERE message_uuid = ?;`, + [ this.messageUuid ], + err => { + return cb(err); + } + ); + } + // :TODO: FTN stuff doesn't have any business here getFTNQuotePrefix(source) { source = source || 'fromUserName';