Registrations currently disabled due to spam. Contact me externally if you need an account

Commit 26c5ce07 authored by Gabriel Engel's avatar Gabriel Engel Committed by GitHub
Browse files

Merge pull request #5235 from RocketChat/zapier-additions/fixes

Several changes to allow for easier Integrations from others
parents 5930a48e b8498ad7
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -171,7 +171,7 @@ rocketchat:message-pin@0.0.1
rocketchat:message-snippet@0.0.1
rocketchat:message-star@0.0.1
rocketchat:migrations@0.0.1
rocketchat:oauth2-server@1.4.0
rocketchat:oauth2-server@2.0.0
rocketchat:oauth2-server-config@1.0.0
rocketchat:oembed@0.0.1
rocketchat:otr@0.0.1
+2 −10
Original line number Diff line number Diff line
@@ -2,11 +2,11 @@
RocketChat.API.v1.addRoute('chat.delete', { authRequired: true }, {
	post: function() {
		try {
			check(this.bodyParams, {
			check(this.bodyParams, Match.ObjectIncluding({
				msgId: String,
				roomId: String,
				asUser: Match.Maybe(Boolean)
			});
			}));

			const msg = RocketChat.models.Messages.findOneById(this.bodyParams.msgId, { fields: { u: 1, rid: 1 }});

@@ -35,14 +35,6 @@ RocketChat.API.v1.addRoute('chat.delete', { authRequired: true }, {
RocketChat.API.v1.addRoute('chat.postMessage', { authRequired: true }, {
	post: function() {
		try {
			if (!this.bodyParams.attachments) {
				check(this.bodyParams, {
					channel: String,
					text: String
				});
			}

			//TODO: Completely rewrite this? Seems too "magical"
			const messageReturn = processWebhookMessage(this.bodyParams, this.user)[0];

			if (!messageReturn) {
+7 −1
Original line number Diff line number Diff line
@@ -116,10 +116,16 @@ RocketChat.API.v1.addRoute('users.info', { authRequired: true }, {

RocketChat.API.v1.addRoute('users.list', { authRequired: true }, {
	get: function() {
		let limit = -1;

		if (typeof this.queryParams.limit !== 'undefined') {
			limit = parseInt(this.queryParams.limit);
		}

		let result = undefined;
		try {
			Meteor.runAsUser(this.userId, () => {
				result = Meteor.call('getFullUserData', {});
				result = Meteor.call('getFullUserData', { filter: '', limit });
			});
		} catch (e) {
			return RocketChat.API.v1.failure(e.name + ': ' + e.message);
+61 −33
Original line number Diff line number Diff line
function retrieveRoomInfo({ currentUserId, channel, ignoreEmpty=false }) {
	const room = RocketChat.models.Rooms.findOneByIdOrName(channel);
	if (!_.isObject(room) && !ignoreEmpty) {
		throw new Meteor.Error('invalid-channel');
	}

	if (room && room.t === 'c') {
		Meteor.runAsUser(currentUserId, function() {
			return Meteor.call('joinRoom', room._id);
		});
	}

	return room;
}

function retrieveDirectMessageInfo({ currentUserId, channel, findByUserIdOnly=false }) {
	let roomUser = undefined;

	if (findByUserIdOnly) {
		roomUser = RocketChat.models.Users.findOneById(channel);
	} else {
		roomUser = RocketChat.models.Users.findOne({
			$or: [{ _id: channel }, { username: channel }]
		});
	}

	if (!_.isObject(roomUser)) {
		throw new Meteor.Error('invalid-channel');
	}

	const rid = [currentUserId, roomUser._id].sort().join('');
	let room = RocketChat.models.Rooms.findOneById({ $in: [rid, channel] });

	if (!room) {
		Meteor.runAsUser(currentUserId, function() {
			Meteor.call('createDirectMessage', roomUser.username);
			room = RocketChat.models.Rooms.findOneById(rid);
		});
	}

	return room;
}

this.processWebhookMessage = function(messageObj, user, defaultValues) {
	var attachment, channel, channels, channelType, i, len, message, ref, rid, room, roomUser, ret;
	var attachment, channel, channels, channelType, i, len, message, ref, room, ret;
	ret = [];

	if (!defaultValues) {
@@ -11,7 +54,7 @@ this.processWebhookMessage = function(messageObj, user, defaultValues) {
		};
	}

	channel = messageObj.channel || defaultValues.channel;
	channel = messageObj.channel || messageObj.roomId || defaultValues.channel;

	channels = [].concat(channel);

@@ -22,41 +65,26 @@ this.processWebhookMessage = function(messageObj, user, defaultValues) {

		switch (channelType) {
			case '#':
				room = RocketChat.models.Rooms.findOneByIdOrName(channel);
				if (!_.isObject(room)) {
					throw new Meteor.Error('invalid-channel');
				}
				rid = room._id;
				if (room.t === 'c') {
					Meteor.runAsUser(user._id, function() {
						return Meteor.call('joinRoom', room._id);
					});
				}
				room = retrieveRoomInfo({ currentUserId: user._id, channel });
				break;
			case '@':
				roomUser = RocketChat.models.Users.findOne({
					$or: [
						{
							_id: channel
						}, {
							username: channel
						}
					]
				}) || {};
				rid = [user._id, roomUser._id].sort().join('');
				room = RocketChat.models.Rooms.findOneById({$in: [rid, channel]});
				if (!_.isObject(roomUser) && !_.isObject(room)) {
					throw new Meteor.Error('invalid-channel');
				}
				if (!room) {
					Meteor.runAsUser(user._id, function() {
						Meteor.call('createDirectMessage', roomUser.username);
						room = RocketChat.models.Rooms.findOneById(rid);
					});
				}
				room = retrieveDirectMessageInfo({ currentUserId: user._id, channel });
				break;
			default:
				throw new Meteor.Error('invalid-channel-type');
				//Try to find the room by id or name if they didn't include the prefix.
				room = retrieveRoomInfo({ currentUserId: user._id, channel: channelType + channel, ignoreEmpty: true });
				if (room) {
					break;
				}

				//We didn't get a room, let's try finding direct messages
				room = retrieveDirectMessageInfo({ currentUserId: user._id, channel: channelType + channel, findByUserIdOnly: true });
				if (room) {
					break;
				}

				//No room, so throw an error
				throw new Meteor.Error('invalid-channel');
		}

		if (messageObj.attachments && !_.isArray(messageObj.attachments)) {
+1 −1
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@ RocketChat.getFullUserData = function({userId, filter, limit}) {
			requirePasswordChangeReason: 1,
			roles: 1
		});
	} else {
	} else if (limit !== -1) {
		limit = 1;
	}

Loading