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/utils/server/lib/normalizeMessagesForUser.js

57 lines
1.6 KiB

import { Users } from '../../../models/server';
import { settings } from '../../../settings/server';
const filterStarred = (message, uid) => {
// only return starred field if user has it starred
if (message.starred && Array.isArray(message.starred)) {
message.starred = message.starred.filter((star) => star._id === uid);
}
return message;
};
// TODO: we should let clients get user names on demand instead of doing this
export const normalizeMessagesForUser = (messages, uid) => {
// if not using real names, there is nothing else to do
if (!settings.get('UI_Use_Real_Name')) {
return messages.map((message) => filterStarred(message, uid));
}
const usernames = new Set();
messages.forEach((message) => {
message = filterStarred(message, uid);
usernames.add(message.u.username);
(message.mentions || []).forEach(({ username }) => { usernames.add(username); });
Object.values(message.reactions || {})
.forEach((reaction) => reaction.usernames.forEach((username) => usernames.add(username)));
});
const users = {};
Users.findUsersByUsernames([...usernames.values()], {
fields: {
username: 1,
name: 1,
},
}).forEach((user) => {
users[user.username] = user.name;
});
messages.forEach((message) => {
message.u.name = users[message.u.username];
(message.mentions || []).forEach((mention) => { mention.name = users[mention.username]; });
Object.keys(message.reactions || {}).forEach((reaction) => {
const names = message.reactions[reaction].usernames.map((username) => users[username]);
message.reactions[reaction].names = names;
});
});
return messages;
};