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

Commit 69e8fd1a authored by Gabriel Engel's avatar Gabriel Engel
Browse files

Merge branch 'develop' into livechat-icon-minimize-maximize

parents 3c11cb65 9a6794c2
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);
+1 −1
Original line number Diff line number Diff line
@@ -73,7 +73,7 @@
			}
		}
		.setting-block {
			.loading {
			.loading-animation {
				top: 30px;
			}
			&:hover {
+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)) {
Loading