The communications platform that puts data protection first.
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.
 
 
 
 
 
Rocket.Chat/app/lib/server/methods/deleteMessage.js

62 lines
2.0 KiB

import { Meteor } from 'meteor/meteor';
import { Match, check } from 'meteor/check';
import moment from 'moment';
import { hasPermission } from '../../../authorization';
import { settings } from '../../../settings';
import { Messages } from '../../../models';
import { deleteMessage } from '../functions';
Meteor.methods({
deleteMessage(message) {
check(message, Match.ObjectIncluding({
_id: String,
}));
if (!Meteor.userId()) {
throw new Meteor.Error('error-invalid-user', 'Invalid user', {
method: 'deleteMessage',
});
}
const originalMessage = Messages.findOneById(message._id, {
fields: {
u: 1,
rid: 1,
file: 1,
ts: 1,
},
});
if (originalMessage == null) {
throw new Meteor.Error('error-action-not-allowed', 'Not allowed', {
method: 'deleteMessage',
action: 'Delete_message',
});
}
const forceDelete = hasPermission(Meteor.userId(), 'force-delete-message', originalMessage.rid);
const _hasPermission = hasPermission(Meteor.userId(), 'delete-message', originalMessage.rid);
const deleteAllowed = settings.get('Message_AllowDeleting');
const deleteOwn = originalMessage && originalMessage.u && originalMessage.u._id === Meteor.userId();
if (!(_hasPermission || (deleteAllowed && deleteOwn)) && !forceDelete) {
throw new Meteor.Error('error-action-not-allowed', 'Not allowed', {
method: 'deleteMessage',
action: 'Delete_message',
});
}
const blockDeleteInMinutes = settings.get('Message_AllowDeleting_BlockDeleteInMinutes');
if (blockDeleteInMinutes != null && blockDeleteInMinutes !== 0 && !forceDelete) {
if (originalMessage.ts == null) {
return;
}
const msgTs = moment(originalMessage.ts);
if (msgTs == null) {
return;
}
const currentTsDiff = moment().diff(msgTs, 'minutes');
if (currentTsDiff > blockDeleteInMinutes) {
throw new Meteor.Error('error-message-deleting-blocked', 'Message deleting is blocked', {
method: 'deleteMessage',
});
}
}
return deleteMessage(originalMessage, Meteor.user());
},
});