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/federation/server/hooks/beforeDeleteRoom.js

37 lines
1.1 KiB

import { logger } from '../lib/logger';
import { FederationRoomEvents, Rooms } from '../../../models/server';
import { hasExternalDomain } from '../functions/helpers';
import { getFederationDomain } from '../lib/getFederationDomain';
import { dispatchEvent } from '../handler';
async function beforeDeleteRoom(roomId) {
const room = Rooms.findOneById(roomId, { fields: { federation: 1 } });
// If room does not exist, skip
if (!room) { return roomId; }
// If there are not federated users on this room, ignore it
if (!hasExternalDomain(room)) { return roomId; }
logger.client.debug(() => `beforeDeleteRoom => room=${ JSON.stringify(room, null, 2) }`);
try {
// Create the message event
const event = await FederationRoomEvents.createDeleteRoomEvent(getFederationDomain(), room._id);
// Dispatch event (async)
dispatchEvent(room.federation.domains, event);
} catch (err) {
logger.client.error('beforeDeleteRoom => Could not remove room:', err);
throw err;
}
return roomId;
}
export const definition = {
hook: 'beforeDeleteRoom',
callback: (roomId) => Promise.await(beforeDeleteRoom(roomId)),
id: 'federation-before-delete-room',
};