Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions apps/meteor/.mocharc.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ module.exports = {
...base, // see https://github.com/mochajs/mocha/issues/3916
exit: true,
spec: [
'lib/callbacks.spec.ts',
'ee/server/lib/ldap/*.spec.ts',
'ee/tests/**/*.tests.ts',
'ee/tests/**/*.spec.ts',
Expand Down
8 changes: 4 additions & 4 deletions apps/meteor/app/authentication/server/startup/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ const getLinkedInName = ({ firstName, lastName }) => {
};

const onCreateUserAsync = async function (options, user = {}) {
callbacks.run('beforeCreateUser', options, user);
await callbacks.run('beforeCreateUser', options, user);

user.status = 'offline';
user.active = user.active !== undefined ? user.active : !settings.get('Accounts_ManuallyApproveNewUsers');
Expand Down Expand Up @@ -216,7 +216,7 @@ const onCreateUserAsync = async function (options, user = {}) {
await Mailer.send(email);
}

callbacks.run('onCreateUser', options, user);
await callbacks.run('onCreateUser', options, user);

// App IPostUserCreated event hook
await Apps.triggerEvent(AppEvents.IPostUserCreated, { user, performedBy: await safeGetMeteorUser() });
Expand Down Expand Up @@ -321,7 +321,7 @@ Accounts.insertUserDoc = function (...args) {
};

const validateLoginAttemptAsync = async function (login) {
login = callbacks.run('beforeValidateLogin', login);
login = await callbacks.run('beforeValidateLogin', login);

if (!(await isValidLoginAttemptByIp(getClientAddress(login.connection)))) {
throw new Meteor.Error('error-login-blocked-for-ip', 'Login has been temporarily blocked For IP', {
Expand Down Expand Up @@ -368,7 +368,7 @@ const validateLoginAttemptAsync = async function (login) {
}
}

login = callbacks.run('onValidateLogin', login);
login = await callbacks.run('onValidateLogin', login);

await Users.updateLastLoginById(login.user._id);
setImmediate(function () {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,6 @@ export async function saveRoomName(rid, displayName, user, sendMessage = true) {
if (sendMessage) {
await Message.saveSystemMessage('r', rid, displayName, user);
}
callbacks.run('afterRoomNameChange', { rid, name: displayName, oldName: room.name });
await callbacks.run('afterRoomNameChange', { rid, name: displayName, oldName: room.name });
return displayName;
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ export const saveRoomTopic = async function (
if (update && sendMessage) {
await Message.saveSystemMessage('room_changed_topic', rid, roomTopic || '', user);
}
callbacks.run('afterRoomTopicChange', { rid, topic: roomTopic });
await callbacks.run('afterRoomTopicChange', { rid, topic: roomTopic });
return update;
};
6 changes: 3 additions & 3 deletions apps/meteor/app/cloud/server/functions/getWorkspaceLicense.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ import { SystemLogger } from '../../../../server/lib/logger/system';
export async function getWorkspaceLicense(): Promise<{ updated: boolean; license: string }> {
const currentLicense = await Settings.findOne('Cloud_Workspace_License');

const cachedLicenseReturn = () => {
const cachedLicenseReturn = async () => {
const license = currentLicense?.value as string;
if (license) {
callbacks.run('workspaceLicenseChanged', license);
await callbacks.run('workspaceLicenseChanged', license);
}

return { updated: false, license };
Expand Down Expand Up @@ -62,7 +62,7 @@ export async function getWorkspaceLicense(): Promise<{ updated: boolean; license

await Settings.updateValueById('Cloud_Workspace_License', remoteLicense.license);

callbacks.run('workspaceLicenseChanged', remoteLicense.license);
await callbacks.run('workspaceLicenseChanged', remoteLicense.license);

return { updated: true, license: remoteLicense.license };
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ export function saveRegistrationData({
Settings.updateValueById('Cloud_Workspace_PublicKey', publicKey),
Settings.updateValueById('Cloud_Workspace_Registration_Client_Uri', registration_client_uri),
Settings.updateValueById('Cloud_Workspace_License', licenseData.license || ''),
]).then((...results) => {
callbacks.run('workspaceLicenseChanged', licenseData.license);
]).then(async (...results) => {
await callbacks.run('workspaceLicenseChanged', licenseData.license);
return results;
});
}
4 changes: 2 additions & 2 deletions apps/meteor/app/custom-oauth/server/custom_oauth_server.js
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@ export class CustomOAuth {
return;
}

callbacks.run('afterProcessOAuthUser', { serviceName, serviceData, user });
await callbacks.run('afterProcessOAuthUser', { serviceName, serviceData, user });

// User already created or merged and has identical name as before
if (
Expand Down Expand Up @@ -437,7 +437,7 @@ const updateOrCreateUserFromExternalServiceAsync = async function (...args /* se

const user = updateOrCreateUserFromExternalService.apply(this, args);

callbacks.run('afterValidateNewOAuthUser', {
await callbacks.run('afterValidateNewOAuthUser', {
identity: serviceData,
serviceName,
user: await Users.findOneById(user.userId),
Expand Down
2 changes: 1 addition & 1 deletion apps/meteor/app/lib/client/methods/sendMessage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ Meteor.methods<ServerMethods>({
return;
}

message = callbacks.run('beforeSaveMessage', message);
message = await callbacks.run('beforeSaveMessage', message);
await onClientMessageReceived(message as IMessage).then(function (message) {
ChatMessage.insert(message);
return callbacks.run('afterSaveMessage', message);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { Message } from '@rocket.chat/core-services';
import { callbacks } from '../../../../lib/callbacks';

export const addUserToDefaultChannels = async function (user: IUser, silenced?: boolean): Promise<void> {
callbacks.run('beforeJoinDefaultChannels', user);
await callbacks.run('beforeJoinDefaultChannels', user);
const defaultRooms = await Rooms.findByDefaultAndTypes(true, ['c', 'p'], {
projection: { usernames: 0 },
}).toArray();
Expand Down
12 changes: 6 additions & 6 deletions apps/meteor/app/lib/server/functions/addUserToRoom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ export const addUserToRoom = async function (
}

try {
callbacks.run('federation.beforeAddUserToARoom', { user, inviter }, room);
await callbacks.run('federation.beforeAddUserToARoom', { user, inviter }, room);
} catch (error) {
throw new Meteor.Error((error as any)?.message);
}
Expand All @@ -57,10 +57,10 @@ export const addUserToRoom = async function (

if (room.t === 'c' || room.t === 'p' || room.t === 'l') {
// Add a new event, with an optional inviter
callbacks.run('beforeAddedToRoom', { user: userToBeAdded, inviter }, room);
await callbacks.run('beforeAddedToRoom', { user: userToBeAdded, inviter }, room);

// Keep the current event
callbacks.run('beforeJoinRoom', userToBeAdded, room);
await callbacks.run('beforeJoinRoom', userToBeAdded, room);
}
await Apps.triggerEvent(AppEvents.IPreRoomUserJoined, room, userToBeAdded, inviter).catch((error) => {
if (error.name === AppsEngineException.name) {
Expand Down Expand Up @@ -107,12 +107,12 @@ export const addUserToRoom = async function (
}

if (room.t === 'c' || room.t === 'p') {
process.nextTick(function () {
process.nextTick(async function () {
// Add a new event, with an optional inviter
callbacks.run('afterAddedToRoom', { user: userToBeAdded, inviter }, room);
await callbacks.run('afterAddedToRoom', { user: userToBeAdded, inviter }, room);

// Keep the current event
callbacks.run('afterJoinRoom', userToBeAdded, room);
await callbacks.run('afterJoinRoom', userToBeAdded, room);

void Apps.triggerEvent(AppEvents.IPostRoomUserJoined, room, userToBeAdded, inviter);
});
Expand Down
2 changes: 1 addition & 1 deletion apps/meteor/app/lib/server/functions/archiveRoom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@ export const archiveRoom = async function (rid: string, user: IMessage['u']): Pr
await Subscriptions.archiveByRoomId(rid);
await Message.saveSystemMessage('room-archived', rid, '', user);

callbacks.run('afterRoomArchived', await Rooms.findOneById(rid), user);
await callbacks.run('afterRoomArchived', await Rooms.findOneById(rid), user);
};
4 changes: 2 additions & 2 deletions apps/meteor/app/lib/server/functions/createDirectRoom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ export async function createDirectRoom(
if (members.length > (settings.get<number>('DirectMesssage_maxUsers') || 1)) {
throw new Error('error-direct-message-max-user-exceeded');
}
callbacks.run('beforeCreateDirectRoom', members);
await callbacks.run('beforeCreateDirectRoom', members);

const membersUsernames: string[] = members
.map((member) => {
Expand Down Expand Up @@ -159,7 +159,7 @@ export async function createDirectRoom(
if (isNewRoom) {
const insertedRoom = await Rooms.findOneById(rid);

callbacks.run('afterCreateDirectRoom', insertedRoom, { members: roomMembers, creatorId: options?.creator });
await callbacks.run('afterCreateDirectRoom', insertedRoom, { members: roomMembers, creatorId: options?.creator });

void Apps.triggerEvent('IPostRoomCreate', insertedRoom);
}
Expand Down
8 changes: 4 additions & 4 deletions apps/meteor/app/lib/server/functions/createRoom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export const createRoom = async <T extends RoomType>(
}
> => {
const { teamId, ...extraData } = roomExtraData || ({} as IRoom);
callbacks.run('beforeCreateRoom', { type, name, owner: ownerUsername, members, readOnly, extraData, options });
await callbacks.run('beforeCreateRoom', { type, name, owner: ownerUsername, members, readOnly, extraData, options });
if (type === 'd') {
return createDirectRoom(members as IUser[], extraData, { ...options, creator: options?.creator || ownerUsername });
}
Expand Down Expand Up @@ -126,7 +126,7 @@ export const createRoom = async <T extends RoomType>(
}

if (type === 'c') {
callbacks.run('beforeCreateChannel', owner, roomProps);
await callbacks.run('beforeCreateChannel', owner, roomProps);
}
const room = await Rooms.createWithFullRoomData(roomProps);
const shouldBeHandledByFederation = room.federated === true || ownerUsername.includes(':');
Expand All @@ -150,7 +150,7 @@ export const createRoom = async <T extends RoomType>(
}

try {
callbacks.run('federation.beforeAddUserToARoom', { user: member, inviter: owner }, room);
await callbacks.run('federation.beforeAddUserToARoom', { user: member, inviter: owner }, room);
} catch (error) {
continue;
}
Expand Down Expand Up @@ -180,7 +180,7 @@ export const createRoom = async <T extends RoomType>(
await Message.saveSystemMessage('user-added-room-to-team', team.roomId, room.name || '', owner);
}
}
callbacks.run('afterCreateChannel', owner, room);
await callbacks.run('afterCreateChannel', owner, room);
} else if (type === 'p') {
callbacks.runAsync('afterCreatePrivateGroup', owner, room);
}
Expand Down
2 changes: 1 addition & 1 deletion apps/meteor/app/lib/server/functions/deleteMessage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ export async function deleteMessage(message: IMessage, user: IUser): Promise<voi
}

const room = await Rooms.findOneById(message.rid, { projection: { lastMessage: 1, prid: 1, mid: 1, federated: 1 } });
callbacks.run('afterDeleteMessage', deletedMsg, room);
await callbacks.run('afterDeleteMessage', deletedMsg, room);

// update last message
if (settings.get('Store_Last_Message')) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ async function getEmailContent({ message, user, room }) {
messageContent = TAPi18n.__('Encrypted_message', { lng });
}

message = callbacks.run('renderMessage', message);
message = await callbacks.run('renderMessage', message);
if (message.tokens && message.tokens.length > 0) {
message.tokens.forEach((token) => {
token.text = token.text.replace(/([^\$])(\$[^\$])/gm, '$1$$$2');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { settings } from '../../../../settings/server';
*
* @param {object} message the message to be parsed
*/
export function parseMessageTextPerUser(messageText: string, message: IMessage, receiver: IUser): string {
export async function parseMessageTextPerUser(messageText: string, message: IMessage, receiver: IUser): Promise<string> {
const lng = receiver.language || settings.get('Language') || 'en';

const firstAttachment = message.attachments?.[0];
Expand Down
4 changes: 2 additions & 2 deletions apps/meteor/app/lib/server/functions/removeUserFromRoom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export const removeUserFromRoom = async function (
throw error;
}

callbacks.run('beforeLeaveRoom', user, room);
await callbacks.run('beforeLeaveRoom', user, room);

const subscription = await Subscriptions.findOneByRoomIdAndUserId(rid, user._id, {
projection: { _id: 1 },
Expand Down Expand Up @@ -65,7 +65,7 @@ export const removeUserFromRoom = async function (
}

// TODO: CACHE: maybe a queue?
callbacks.run('afterLeaveRoom', user, room);
await callbacks.run('afterLeaveRoom', user, room);

await Apps.triggerEvent(AppEvents.IPostRoomUserLeave, room, user);
};
4 changes: 2 additions & 2 deletions apps/meteor/app/lib/server/functions/saveUser.js
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ async function validateUserData(userId, userData) {
}

if (userData.roles) {
callbacks.run('validateUserRoles', userData);
await callbacks.run('validateUserRoles', userData);
}

let nameValidation;
Expand Down Expand Up @@ -419,7 +419,7 @@ export const saveUser = async function (userId, userData) {

await Users.updateOne({ _id: userData._id }, updateUser);

callbacks.run('afterSaveUser', userData);
await callbacks.run('afterSaveUser', userData);

// App IPostUserUpdated event hook
const userUpdated = await Users.findOneById(userId);
Expand Down
2 changes: 1 addition & 1 deletion apps/meteor/app/lib/server/functions/sendMessage.js
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ export const sendMessage = async function (user, message, room, upsert = false)

parseUrlsInMessage(message);

message = callbacks.run('beforeSaveMessage', message, room);
message = await callbacks.run('beforeSaveMessage', message, room);
if (message) {
if (message.t === 'otr') {
const otrStreamer = notifications.streamRoomMessage;
Expand Down
6 changes: 3 additions & 3 deletions apps/meteor/app/lib/server/functions/setUserActiveStatus.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,17 +85,17 @@ export async function setUserActiveStatus(userId: string, active: boolean, confi
}

if (active && !user.active) {
callbacks.run('beforeActivateUser', user);
await callbacks.run('beforeActivateUser', user);
}

await Users.setUserActive(userId, active);

if (active && !user.active) {
callbacks.run('afterActivateUser', user);
await callbacks.run('afterActivateUser', user);
}

if (!active && user.active) {
callbacks.run('afterDeactivateUser', user);
await callbacks.run('afterDeactivateUser', user);
}

if (user.username) {
Expand Down
4 changes: 2 additions & 2 deletions apps/meteor/app/lib/server/functions/updateMessage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ export const updateMessage = async function (message: IMessage, user: IUser, ori

parseUrlsInMessage(message);

message = callbacks.run('beforeSaveMessage', message);
message = await callbacks.run('beforeSaveMessage', message);

const { _id, ...editedMessage } = message;

Expand Down Expand Up @@ -77,7 +77,7 @@ export const updateMessage = async function (message: IMessage, user: IUser, ori
setImmediate(async function () {
const msg = await Messages.findOneById(_id);
if (msg) {
callbacks.run('afterSaveMessage', msg, room, user._id);
await callbacks.run('afterSaveMessage', msg, room, user._id);
}
});
};
6 changes: 3 additions & 3 deletions apps/meteor/app/lib/server/lib/notifyUsersOnMessage.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ function messageContainsHighlight(message, highlights) {
});
}

export function getMentions(message) {
export async function getMentions(message) {
const {
mentions,
u: { _id: senderId },
Expand All @@ -46,7 +46,7 @@ export function getMentions(message) {

const filteredMentions = userMentions.filter(({ _id }) => _id !== senderId && !['all', 'here'].includes(_id)).map(({ _id }) => _id);

const mentionIds = callbacks.run('beforeGetMentions', filteredMentions, {
const mentionIds = await callbacks.run('beforeGetMentions', filteredMentions, {
userMentions,
otherMentions,
message,
Expand Down Expand Up @@ -107,7 +107,7 @@ const getUnreadSettingCount = (roomType) => {
async function updateUsersSubscriptions(message, room) {
// Don't increase unread counter on thread messages
if (room != null && !message.tmid) {
const { toAll, toHere, mentionIds } = getMentions(message);
const { toAll, toHere, mentionIds } = await getMentions(message);

const userIds = new Set(mentionIds);

Expand Down
6 changes: 3 additions & 3 deletions apps/meteor/app/lib/server/lib/sendNotificationsOnMessage.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ export const sendNotification = async ({

const isThread = !!message.tmid && !message.tshow;

notificationMessage = parseMessageTextPerUser(notificationMessage, message, receiver);
notificationMessage = await parseMessageTextPerUser(notificationMessage, message, receiver);

const isHighlighted = messageContainsHighlight(message, subscription.userHighlights);

Expand Down Expand Up @@ -221,7 +221,7 @@ export async function sendMessageNotifications(message, room, usersInThread = []
return message;
}

const { toAll: hasMentionToAll, toHere: hasMentionToHere, mentionIds } = getMentions(message);
const { toAll: hasMentionToAll, toHere: hasMentionToHere, mentionIds } = await getMentions(message);

const mentionIdsWithoutGroups = [...mentionIds];

Expand All @@ -236,7 +236,7 @@ export async function sendMessageNotifications(message, room, usersInThread = []
// add users in thread to mentions array because they follow the same rules
mentionIds.push(...usersInThread);

let notificationMessage = callbacks.run('beforeSendMessageNotifications', message.msg);
let notificationMessage = await callbacks.run('beforeSendMessageNotifications', message.msg);
if (mentionIds.length > 0 && settings.get('UI_Use_Real_Name')) {
notificationMessage = replaceMentionedUsernamesWithFullNames(message.msg, message.mentions);
}
Expand Down
Loading