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/functions/helpers.js

62 lines
1.6 KiB

import { Settings, Subscriptions, Users } from '../../../models/server';
export const getNameAndDomain = (fullyQualifiedName) => fullyQualifiedName.split('@');
export const isFullyQualified = (name) => name.indexOf('@') !== -1;
export function updateStatus(status) {
Settings.updateValueById('FEDERATION_Status', status);
}
export function updateEnabled(enabled) {
Settings.updateValueById('FEDERATION_Enabled', enabled);
}
export const isFederated = (resource) => !!resource.federation;
export const hasExternalDomain = ({ federation }) => {
// same test as isFederated(room)
if (!federation) {
return false;
}
return federation.domains
.some((domain) => domain !== federation.origin);
};
export const isLocalUser = ({ federation }, localDomain) =>
!federation || federation.origin === localDomain;
export const getFederatedRoomData = (room) => {
let hasFederatedUser = false;
let users = null;
let subscriptions = null;
if (room.t === 'd') {
// Check if there is a federated user on this room
hasFederatedUser = room.usernames.find((u) => u.indexOf('@') !== -1);
} else {
// Find all subscriptions of this room
subscriptions = Subscriptions.findByRoomIdWhenUsernameExists(room._id).fetch();
subscriptions = subscriptions.reduce((acc, s) => {
acc[s.u._id] = s;
return acc;
}, {});
// Get all user ids
const userIds = Object.keys(subscriptions);
// Load all the users
users = Users.findUsersWithUsernameByIds(userIds).fetch();
// Check if there is a federated user on this room
hasFederatedUser = users.find((u) => u.username.indexOf('@') !== -1);
}
return {
hasFederatedUser,
users,
subscriptions,
};
};