From 02bc5ecb2fa331900b7cefca2d93ce41f63e92a8 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Fri, 31 Aug 2018 15:41:54 -0300 Subject: [PATCH] [FIX] Hipchat importer was not importing users without emails and uploaded files (#11910) --- .../server/importer.js | 53 +++++++++++++------ .../server/classes/ImporterBase.js | 5 ++ 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/packages/rocketchat-importer-hipchat-enterprise/server/importer.js b/packages/rocketchat-importer-hipchat-enterprise/server/importer.js index 914d14e5117..9fb1d380531 100644 --- a/packages/rocketchat-importer-hipchat-enterprise/server/importer.js +++ b/packages/rocketchat-importer-hipchat-enterprise/server/importer.js @@ -51,9 +51,9 @@ export class HipChatEnterpriseImporter extends Base { if (info.base === 'users.json') { super.updateProgress(ProgressStep.PREPARING_USERS); for (const u of file) { - if (!u.User.email) { - continue; - } + // if (!u.User.email) { + // // continue; + // } tempUsers.push({ id: u.User.id, email: u.User.email, @@ -91,6 +91,8 @@ export class HipChatEnterpriseImporter extends Base { receiverId: m.PrivateUserMessage.receiver.id, text: m.PrivateUserMessage.message.indexOf('/me ') === -1 ? m.PrivateUserMessage.message : `${ m.PrivateUserMessage.message.replace(/\/me /, '_') }_`, ts: new Date(m.PrivateUserMessage.timestamp.split(' ')[0]), + attachment: m.PrivateUserMessage.attachment, + attachment_path: m.PrivateUserMessage.attachment_path, }); } } @@ -272,7 +274,11 @@ export class HipChatEnterpriseImporter extends Base { } Meteor.runAsUser(startedByUserId, () => { - let existantUser = RocketChat.models.Users.findOneByEmailAddress(u.email); + let existantUser; + + if (u.email) { + RocketChat.models.Users.findOneByEmailAddress(u.email); + } // If we couldn't find one by their email address, try to find an existing user by their username if (!existantUser) { @@ -284,7 +290,13 @@ export class HipChatEnterpriseImporter extends Base { u.rocketId = existantUser._id; RocketChat.models.Users.update({ _id: u.rocketId }, { $addToSet: { importIds: u.id } }); } else { - const userId = Accounts.createUser({ email: u.email, password: Random.id() }); + const user = { email: u.email, password: Random.id() }; + if (!user.email) { + delete user.email; + user.username = u.username; + } + + const userId = Accounts.createUser(user); Meteor.runAsUser(userId, () => { Meteor.call('setUsername', u.username, { joinDefaultChannelsSilenced: true }); // TODO: Use moment timezone to calc the time offset - Meteor.call 'userSetUtcOffset', user.tz_offset / 3600 @@ -435,16 +447,27 @@ export class HipChatEnterpriseImporter extends Base { } Meteor.runAsUser(sender._id, () => { - RocketChat.sendMessage(sender, { - _id: msg.id, - ts: msg.ts, - msg: msg.text, - rid: room._id, - u: { - _id: sender._id, - username: sender.username, - }, - }, room, true); + if (msg.attachment_path) { + const details = { + message_id: msg.id, + name: msg.attachment.name, + size: msg.attachment.size, + userId: sender._id, + rid: room._id, + }; + this.uploadFile(details, msg.attachment.url, sender, room, msg.ts); + } else { + RocketChat.sendMessage(sender, { + _id: msg.id, + ts: msg.ts, + msg: msg.text, + rid: room._id, + u: { + _id: sender._id, + username: sender.username, + }, + }, room, true); + } }); } } diff --git a/packages/rocketchat-importer/server/classes/ImporterBase.js b/packages/rocketchat-importer/server/classes/ImporterBase.js index 9d39a36017b..bdd83c48ff1 100644 --- a/packages/rocketchat-importer/server/classes/ImporterBase.js +++ b/packages/rocketchat-importer/server/classes/ImporterBase.js @@ -271,6 +271,11 @@ export class Base { const fileStore = FileUpload.getStore('Uploads'); return requestModule.get(fileUrl, Meteor.bindEnvironment(function(res) { + const contentType = res.headers['content-type']; + if (!details.type && contentType) { + details.type = contentType; + } + const rawData = []; res.on('data', (chunk) => rawData.push(chunk)); res.on('end', Meteor.bindEnvironment(() => {