Loading .meteor/versions +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading packages/rocketchat-api/server/v1/chat.js +2 −10 Original line number Diff line number Diff line Loading @@ -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 }}); Loading Loading @@ -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) { Loading packages/rocketchat-api/server/v1/users.js +7 −1 Original line number Diff line number Diff line Loading @@ -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); Loading packages/rocketchat-integrations/server/processWebhookMessage.js +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) { Loading @@ -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); Loading @@ -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 packages/rocketchat-lib/server/functions/getFullUserData.js +1 −1 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ RocketChat.getFullUserData = function({userId, filter, limit}) { requirePasswordChangeReason: 1, roles: 1 }); } else { } else if (limit !== -1) { limit = 1; } Loading Loading
.meteor/versions +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
packages/rocketchat-api/server/v1/chat.js +2 −10 Original line number Diff line number Diff line Loading @@ -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 }}); Loading Loading @@ -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) { Loading
packages/rocketchat-api/server/v1/users.js +7 −1 Original line number Diff line number Diff line Loading @@ -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); Loading
packages/rocketchat-integrations/server/processWebhookMessage.js +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) { Loading @@ -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); Loading @@ -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
packages/rocketchat-lib/server/functions/getFullUserData.js +1 −1 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ RocketChat.getFullUserData = function({userId, filter, limit}) { requirePasswordChangeReason: 1, roles: 1 }); } else { } else if (limit !== -1) { limit = 1; } Loading