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/packages/rocketchat-lib/server/functions/getRoomByNameOrIdWithOption...

81 lines
2.5 KiB

Enhance outgoing webhooks and add history (#5823) * Convert the majority of the integrations package to JavaScript * Move the trigger handler to it's own class * Start trying to generalize integration items * Yay, additional events trigger outgoing webhooks * Silence codacy and fix eslint problems. * Started work on user created event for outgoing integrations * Finish the outgoing integration work on the user created event. * Add user join and leave room events for outgoing webhooks * Add fields to the rest api integration creation and clean up the processWebhookMessage * Add the HTTP to the incoming webhook context * Don't check for property on result if it isn't there. Closes #4175, #5762, and #5896. * Add archive room and file upload events for the webhooks * Disable integrations when the user to run/post as gets deleted. * Try to fix the tests failing due to the requird events property * Add history of integration which get fired * Add the missing file for the IntegrationHistory * Fix deleting users being broke due to my code * Add the outgoing webhook integration history viewing page along with v1 rest api to retrieve it * Integration history replays are now enabled along with advanced settings * Work on the advanced settings and enable paging on the integration history * Enable i18n for the history and advanced settings * Update the wording on the word placement * Move migration to be 88 now. * Add missing translations for the webhooks * Fix en.i18n.json identation * Fix integrations.html indentation * Fix more identations * Fix identation of integrationsOutgoing.html
9 years ago
/* globals RocketChat */
import _ from 'underscore';
Enhance outgoing webhooks and add history (#5823) * Convert the majority of the integrations package to JavaScript * Move the trigger handler to it's own class * Start trying to generalize integration items * Yay, additional events trigger outgoing webhooks * Silence codacy and fix eslint problems. * Started work on user created event for outgoing integrations * Finish the outgoing integration work on the user created event. * Add user join and leave room events for outgoing webhooks * Add fields to the rest api integration creation and clean up the processWebhookMessage * Add the HTTP to the incoming webhook context * Don't check for property on result if it isn't there. Closes #4175, #5762, and #5896. * Add archive room and file upload events for the webhooks * Disable integrations when the user to run/post as gets deleted. * Try to fix the tests failing due to the requird events property * Add history of integration which get fired * Add the missing file for the IntegrationHistory * Fix deleting users being broke due to my code * Add the outgoing webhook integration history viewing page along with v1 rest api to retrieve it * Integration history replays are now enabled along with advanced settings * Work on the advanced settings and enable paging on the integration history * Enable i18n for the history and advanced settings * Update the wording on the word placement * Move migration to be 88 now. * Add missing translations for the webhooks * Fix en.i18n.json identation * Fix integrations.html indentation * Fix more identations * Fix identation of integrationsOutgoing.html
9 years ago
RocketChat.getRoomByNameOrIdWithOptionToJoin = function _getRoomByNameOrIdWithOptionToJoin({ currentUserId, nameOrId, type='', tryDirectByUserIdOnly=false, joinChannel=true, errorOnEmpty=true }) {
let room;
//If the nameOrId starts with #, then let's try to find a channel or group
if (nameOrId.startsWith('#')) {
nameOrId = nameOrId.substring(1);
room = RocketChat.models.Rooms.findOneByIdOrName(nameOrId);
} else if (nameOrId.startsWith('@') || type === 'd') {
//If the nameOrId starts with @ OR type is 'd', then let's try just a direct message
nameOrId = nameOrId.replace('@', '');
let roomUser;
if (tryDirectByUserIdOnly) {
roomUser = RocketChat.models.Users.findOneById(nameOrId);
} else {
roomUser = RocketChat.models.Users.findOne({
$or: [{ _id: nameOrId }, { username: nameOrId }]
});
}
const rid = _.isObject(roomUser) ? [currentUserId, roomUser._id].sort().join('') : nameOrId;
room = RocketChat.models.Rooms.findOneById(rid);
//If the room hasn't been found yet, let's try some more
if (!_.isObject(room)) {
//If the roomUser wasn't found, then there's no destination to point towards
//so return out based upon errorOnEmpty
if (!_.isObject(roomUser)) {
if (errorOnEmpty) {
throw new Meteor.Error('invalid-channel');
} else {
return;
}
}
room = Meteor.runAsUser(currentUserId, function() {
const {rid} = Meteor.call('createDirectMessage', roomUser.username);
return RocketChat.models.Rooms.findOneById(rid);
});
}
} else {
//Otherwise, we'll treat this as a channel or group.
room = RocketChat.models.Rooms.findOneByIdOrName(nameOrId);
}
//If no room was found, handle the room return based upon errorOnEmpty
if (!room && errorOnEmpty) {
throw new Meteor.Error('invalid-channel');
} else if (!room) {
return;
}
//If a room was found and they provided a type to search, then check
//and if the type found isn't what we're looking for then handle
//the return based upon errorOnEmpty
if (type && room.t !== type) {
if (errorOnEmpty) {
throw new Meteor.Error('invalid-channel');
} else {
return;
}
}
//If the room type is channel and joinChannel has been passed, try to join them
//if they can't join the room, this will error out!
if (room.t === 'c' && joinChannel) {
const sub = RocketChat.models.Subscriptions.findOneByRoomIdAndUserId(room._id, currentUserId);
if (!sub) {
Meteor.runAsUser(currentUserId, function() {
return Meteor.call('joinRoom', room._id);
});
}
}
return room;
};