/* globals emailSettings, DDPRateLimiter */ /* Send a transcript of the room converstation to the given email */ import moment from 'moment'; Meteor.methods({ 'livechat:sendTranscript'(rid, email) { check(rid, String); check(email, String); const room = RocketChat.models.Rooms.findOneById(rid); const user = Meteor.user(); const userLanguage = user.language || RocketChat.settings.get('language') || 'en'; // allow to only user to send transcripts from their own chats if (!room || room.t !== 'l' || !room.v || !user.profile || room.v.token !== user.profile.token) { throw new Meteor.Error('error-invalid-room', 'Invalid room'); } const messages = RocketChat.models.Messages.findVisibleByRoomId(rid, { sort: { 'ts' : 1 }}); const header = RocketChat.placeholders.replace(RocketChat.settings.get('Email_Header') || ''); const footer = RocketChat.placeholders.replace(RocketChat.settings.get('Email_Footer') || ''); var html = '

'; messages.forEach(message => { if (message.t && ['command', 'livechat-close', 'livechat_video_call'].indexOf(message.t) !== -1) { return; } var author; if (message.u._id === Meteor.userId()) { author = TAPi18n.__('You', { lng: userLanguage }); } else { author = message.u.username; } var datetime = moment(message.ts).locale(userLanguage).format('LLL'); var singleMessage = `

${author} ${datetime}

${message.msg}

`; html = html + singleMessage; }); html = html + '
'; let fromEmail = RocketChat.settings.get('From_Email').match(/\b[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}\b/i); if (fromEmail) { fromEmail = fromEmail[0]; } else { fromEmail = RocketChat.settings.get('From_Email'); } emailSettings = { to: email, from: fromEmail, replyTo: fromEmail, subject: TAPi18n.__('Transcript_of_your_livechat_conversation', { lng: userLanguage }), html: header + html + footer }; Meteor.defer(() => { Email.send(emailSettings); }); Meteor.defer(() => { RocketChat.callbacks.run('livechat.sendTranscript', messages, email); }); return true; } }); DDPRateLimiter.addRule({ type: 'method', name: 'livechat:sendTranscript', connectionId() { return true; } }, 1, 5000);