8d1a102edaf15fd13b51f61c08c8c5d9cae76b60
[motion2.git] / server / api / mailInteraction / mailInteraction.controller.js
1 // *************************************************************************
2 // *                                                                       *
3 // * xCALLY Motion -  The Omnichannel Contact Center                       *
4 // * Copyright (c) Xenialab s.r.l. All Rights Reserved                     *
5 // *                                                                       *
6 // *************************************************************************
7 // *                                                                       *
8 // * Email: info@xcally.com                                                *
9 // * Website: https://www.xcally.com                                       *
10 // *                                                                       *
11 // *************************************************************************
12 // *                                                                       *
13 // * The SOFTWARE PRODUCT is protected by copyright laws and international *
14 // * copyright treaties, as well as other intellectual property laws and   *
15 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                         *
16 // *                                                                       *
17 // *************************************************************************
18 var _0x8c70=['hasOwnProperty','nolimit','order','sort','where','filter','$gte','split','format','YYYY-MM-DD\x20HH:mm:ss','inlineCss','true','length','rows','setTags','spread','Tag','color','removeTags','join','root','files','tmp','attachments','push','Attachment','Attachments','Messages','from','bcc','subject','createdAt','get','mkdirSync','each','decode','ddd,\x20DD\x20MMM\x20YYYY\x20HH:mm:ss\x20ZZ','headers','Bcc','build','writeFileSync','download','unlinkSync','sendStatus','eml-format','rimraf','zip-dir','moment','bluebird','path','juice','ioredis','../../components/interaction/service','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./mailInteraction.socket','register','status','end','json','offset','undefined','limit','count','Content-Range','update','destroy','then','error','stack','name','send','index','map','MailInteraction','rawAttributes','fieldName','key','getOptions','findAll','query','show','keys','filters','intersection','model','fields','attributes','includeAll','include','merge','options','find','create','body','catch','params','describe','addMessage','MailMessage','ids','findOne'];(function(_0x549278,_0x450754){var _0x1ea9a1=function(_0x2e559d){while(--_0x2e559d){_0x549278['push'](_0x549278['shift']());}};_0x1ea9a1(++_0x450754);}(_0x8c70,0x99));var _0x08c7=function(_0x484e36,_0x4482d8){_0x484e36=_0x484e36-0x0;var _0xafc85d=_0x8c70[_0x484e36];return _0xafc85d;};'use strict';var emlformat=require(_0x08c7('0x0'));var rimraf=require(_0x08c7('0x1'));var zipdir=require(_0x08c7('0x2'));var moment=require(_0x08c7('0x3'));var BPromise=require(_0x08c7('0x4'));var util=require('util');var path=require(_0x08c7('0x5'));var fs=require('fs');var _=require('lodash');var juice=require(_0x08c7('0x6'));var Redis=require(_0x08c7('0x7'));var interaction=require(_0x08c7('0x8'));var qs=require(_0x08c7('0x9'));var logger=require(_0x08c7('0xa'))(_0x08c7('0xb'));var config=require(_0x08c7('0xc'));var db=require(_0x08c7('0xd'))['db'];var htmlEntities=require('html-entities');config[_0x08c7('0xe')]=_[_0x08c7('0xf')](config[_0x08c7('0xe')],{'host':_0x08c7('0x10'),'port':0x18eb});var socket=require(_0x08c7('0x11'))(new Redis(config[_0x08c7('0xe')]));require(_0x08c7('0x12'))[_0x08c7('0x13')](socket);function respondWithStatusCode(_0x5d5aa7,_0x29bcb1){_0x29bcb1=_0x29bcb1||0xcc;return function(_0x763368){if(_0x763368){return _0x5d5aa7['sendStatus'](_0x29bcb1);}return _0x5d5aa7[_0x08c7('0x14')](_0x29bcb1)[_0x08c7('0x15')]();};}function respondWithResult(_0x5d79a2,_0x19e40d){_0x19e40d=_0x19e40d||0xc8;return function(_0xbee954){if(_0xbee954){return _0x5d79a2[_0x08c7('0x14')](_0x19e40d)[_0x08c7('0x16')](_0xbee954);}};}function respondWithFilteredResult(_0x2c1f6e,_0x34c633){return function(_0x3abcb6){if(_0x3abcb6){var _0x32fa90=typeof _0x34c633[_0x08c7('0x17')]===_0x08c7('0x18')&&typeof _0x34c633[_0x08c7('0x19')]===_0x08c7('0x18');var _0x316579=_0x3abcb6[_0x08c7('0x1a')];var _0x43243c=_0x32fa90?0x0:_0x34c633[_0x08c7('0x17')];var _0x33da38=_0x32fa90?_0x3abcb6[_0x08c7('0x1a')]:_0x34c633['offset']+_0x34c633['limit'];var _0x5a551e;if(_0x33da38>=_0x316579){_0x33da38=_0x316579;_0x5a551e=0xc8;}else{_0x5a551e=0xce;}_0x2c1f6e[_0x08c7('0x14')](_0x5a551e);return _0x2c1f6e['set'](_0x08c7('0x1b'),_0x43243c+'-'+_0x33da38+'/'+_0x316579)[_0x08c7('0x16')](_0x3abcb6);}return null;};}function saveUpdates(_0x55ece2){return function(_0x37dbf6){if(_0x37dbf6){return _0x37dbf6[_0x08c7('0x1c')](_0x55ece2)['then'](function(_0x248c9c){return _0x248c9c;});}return null;};}function removeEntity(_0x326e21){return function(_0xf81b1c){if(_0xf81b1c){return _0xf81b1c[_0x08c7('0x1d')]()[_0x08c7('0x1e')](function(){_0x326e21['status'](0xcc)[_0x08c7('0x15')]();});}};}function handleEntityNotFound(_0xe7a0b4){return function(_0x2a8a96){if(!_0x2a8a96){_0xe7a0b4['sendStatus'](0x194);}return _0x2a8a96;};}function handleError(_0x339f02,_0x98cbb9){_0x98cbb9=_0x98cbb9||0x1f4;return function(_0x651860){logger[_0x08c7('0x1f')](_0x651860[_0x08c7('0x20')]);if(_0x651860[_0x08c7('0x21')]){delete _0x651860[_0x08c7('0x21')];}_0x339f02[_0x08c7('0x14')](_0x98cbb9)[_0x08c7('0x22')](_0x651860);};}exports[_0x08c7('0x23')]=function(_0x396221,_0x3f6e35){var _0x4947e4={};var _0x21414c=_[_0x08c7('0x24')](db[_0x08c7('0x25')][_0x08c7('0x26')],function(_0x47f7a1){return{'name':_0x47f7a1[_0x08c7('0x27')],'type':_0x47f7a1['type'][_0x08c7('0x28')]};});_0x4947e4=qs[_0x08c7('0x29')](_0x21414c,_0x396221);return interaction[_0x08c7('0x2a')]('mail',_0x396221[_0x08c7('0x2b')],_0x396221['user'],_0x4947e4,_0x21414c)['then'](respondWithFilteredResult(_0x3f6e35,_0x4947e4))['catch'](handleError(_0x3f6e35,null));};exports[_0x08c7('0x2c')]=function(_0x428d99,_0x518b8c){var _0x435594={'raw':![],'where':{'id':_0x428d99['params']['id']}},_0x290c6c={};_0x290c6c['model']=_['keys'](db[_0x08c7('0x25')][_0x08c7('0x26')]);_0x290c6c['query']=_[_0x08c7('0x2d')](_0x428d99[_0x08c7('0x2b')]);_0x290c6c[_0x08c7('0x2e')]=_[_0x08c7('0x2f')](_0x290c6c[_0x08c7('0x30')],_0x290c6c[_0x08c7('0x2b')]);_0x435594['attributes']=_['intersection'](_0x290c6c[_0x08c7('0x30')],qs['fields'](_0x428d99[_0x08c7('0x2b')][_0x08c7('0x31')]));_0x435594[_0x08c7('0x32')]=_0x435594[_0x08c7('0x32')]['length']?_0x435594[_0x08c7('0x32')]:_0x290c6c[_0x08c7('0x30')];if(_0x428d99['query'][_0x08c7('0x33')]){_0x435594[_0x08c7('0x34')]=[{'all':!![]}];}_0x435594=_[_0x08c7('0x35')]({},_0x435594,_0x428d99[_0x08c7('0x36')]);return db['MailInteraction'][_0x08c7('0x37')](_0x435594)[_0x08c7('0x1e')](handleEntityNotFound(_0x518b8c,null))[_0x08c7('0x1e')](respondWithResult(_0x518b8c,null))['catch'](handleError(_0x518b8c,null));};exports[_0x08c7('0x38')]=function(_0x5ad374,_0x2e4cd1){return db[_0x08c7('0x25')]['create'](_0x5ad374[_0x08c7('0x39')],{})[_0x08c7('0x1e')](respondWithResult(_0x2e4cd1,0xc9))[_0x08c7('0x3a')](handleError(_0x2e4cd1,null));};exports[_0x08c7('0x1c')]=function(_0x438d12,_0x155141){if(_0x438d12[_0x08c7('0x39')]['id']){delete _0x438d12[_0x08c7('0x39')]['id'];}return db['MailInteraction'][_0x08c7('0x37')]({'where':{'id':_0x438d12[_0x08c7('0x3b')]['id']}})[_0x08c7('0x1e')](handleEntityNotFound(_0x155141,null))[_0x08c7('0x1e')](saveUpdates(_0x438d12[_0x08c7('0x39')],null))['then'](respondWithResult(_0x155141,null))['catch'](handleError(_0x155141,null));};exports[_0x08c7('0x1d')]=function(_0x258b2d,_0x3ee067){return db[_0x08c7('0x25')][_0x08c7('0x37')]({'where':{'id':_0x258b2d[_0x08c7('0x3b')]['id']}})[_0x08c7('0x1e')](handleEntityNotFound(_0x3ee067,null))[_0x08c7('0x1e')](removeEntity(_0x3ee067,null))['catch'](handleError(_0x3ee067,null));};exports[_0x08c7('0x3c')]=function(_0x17a1e4,_0x571bf7){return db['MailInteraction'][_0x08c7('0x3c')]()[_0x08c7('0x1e')](respondWithResult(_0x571bf7,null))[_0x08c7('0x3a')](handleError(_0x571bf7,null));};exports[_0x08c7('0x3d')]=function(_0x4b9704,_0x4cad50){return db[_0x08c7('0x3e')]['find']({'where':{'id':_0x4b9704['params']['id']}})[_0x08c7('0x1e')](handleEntityNotFound(_0x4cad50,null))['then'](function(_0x42a848){if(_0x42a848){return _0x42a848['addMessage'](_0x4b9704['body'][_0x08c7('0x3f')],_['omit'](_0x4b9704[_0x08c7('0x39')],[_0x08c7('0x3f'),'id'])||{});}})[_0x08c7('0x1e')](respondWithResult(_0x4cad50,null))[_0x08c7('0x3a')](handleError(_0x4cad50,null));};exports['getMessages']=function(_0x4682b2,_0x2ddc9e){var _0x4e7d75={'raw':![],'where':{}};var _0x59deb8={};var _0x1b1ca2={'count':0x0,'rows':[]};return db[_0x08c7('0x25')][_0x08c7('0x40')]({'where':{'id':_0x4682b2[_0x08c7('0x3b')]['id']}})['then'](handleEntityNotFound(_0x2ddc9e,null))[_0x08c7('0x1e')](function(_0x3a2321){if(_0x3a2321){_0x59deb8[_0x08c7('0x30')]=_[_0x08c7('0x2d')](db[_0x08c7('0x3e')][_0x08c7('0x26')]);_0x59deb8['query']=_[_0x08c7('0x2d')](_0x4682b2[_0x08c7('0x2b')]);_0x59deb8[_0x08c7('0x2e')]=_[_0x08c7('0x2f')](_0x59deb8[_0x08c7('0x30')],_0x59deb8[_0x08c7('0x2b')]);_0x4e7d75[_0x08c7('0x32')]=_[_0x08c7('0x2f')](_0x59deb8[_0x08c7('0x30')],qs[_0x08c7('0x31')](_0x4682b2[_0x08c7('0x2b')][_0x08c7('0x31')]));_0x4e7d75[_0x08c7('0x32')]=_0x4e7d75[_0x08c7('0x32')]['length']?_0x4e7d75[_0x08c7('0x32')]:_0x59deb8['model'];if(!_0x4682b2[_0x08c7('0x2b')][_0x08c7('0x41')](_0x08c7('0x42'))){_0x4e7d75[_0x08c7('0x19')]=qs[_0x08c7('0x19')](_0x4682b2[_0x08c7('0x2b')][_0x08c7('0x19')]);_0x4e7d75[_0x08c7('0x17')]=qs[_0x08c7('0x17')](_0x4682b2[_0x08c7('0x2b')][_0x08c7('0x17')]);}_0x4e7d75[_0x08c7('0x43')]=qs[_0x08c7('0x44')](_0x4682b2[_0x08c7('0x2b')][_0x08c7('0x44')]);_0x4e7d75['where']=qs[_0x08c7('0x2e')](_['pick'](_0x4682b2[_0x08c7('0x2b')],_0x59deb8['filters']));_0x4e7d75[_0x08c7('0x45')]['MailInteractionId']=_0x3a2321['id'];if(_0x4682b2[_0x08c7('0x2b')]['filter']){_0x4e7d75['where']=_[_0x08c7('0x35')](_0x4e7d75[_0x08c7('0x45')],{'$or':_[_0x08c7('0x24')](_0x4e7d75[_0x08c7('0x32')],function(_0x211c42){var _0x240b4d={};_0x240b4d[_0x211c42]={'$like':'%'+_0x4682b2[_0x08c7('0x2b')][_0x08c7('0x46')]+'%'};return _0x240b4d;})});}if(_0x4682b2[_0x08c7('0x2b')]['$gte']){var _0x20eedc=_0x4682b2['query'][_0x08c7('0x47')][_0x08c7('0x48')](',');var _0x131f85={};_0x131f85[_0x20eedc[0x0]]={'$gte':moment(_0x20eedc[0x1])[_0x08c7('0x49')](_0x08c7('0x4a'))};_0x4e7d75['where']=_[_0x08c7('0x35')](_0x4e7d75[_0x08c7('0x45')],_0x131f85);}_0x4e7d75=_[_0x08c7('0x35')]({},_0x4e7d75,_0x4682b2[_0x08c7('0x36')]);return db['MailMessage'][_0x08c7('0x1a')]({'where':_0x4e7d75[_0x08c7('0x45')]})[_0x08c7('0x1e')](function(_0x513aea){_0x1b1ca2['count']=_0x513aea;if(_0x4682b2[_0x08c7('0x2b')]['includeAll']){_0x4e7d75[_0x08c7('0x34')]=[{'all':!![]}];}return db[_0x08c7('0x3e')][_0x08c7('0x2a')](_0x4e7d75);})[_0x08c7('0x1e')](function(_0x514f09){if(_0x4682b2[_0x08c7('0x2b')][_0x08c7('0x4b')]===_0x08c7('0x4c')){for(var _0x2a4e9a=0x0;_0x2a4e9a<_0x514f09[_0x08c7('0x4d')];_0x2a4e9a++){_0x514f09[_0x2a4e9a][_0x08c7('0x39')]=juice(_0x514f09[_0x2a4e9a][_0x08c7('0x39')]);}}_0x1b1ca2[_0x08c7('0x4e')]=_0x514f09;return _0x1b1ca2;});}})[_0x08c7('0x1e')](respondWithFilteredResult(_0x2ddc9e,_0x4e7d75))[_0x08c7('0x3a')](handleError(_0x2ddc9e,null));};exports['addTags']=function(_0x771baf,_0x222853){return db[_0x08c7('0x25')][_0x08c7('0x37')]({'where':{'id':_0x771baf[_0x08c7('0x3b')]['id']}})[_0x08c7('0x1e')](handleEntityNotFound(_0x222853,null))[_0x08c7('0x1e')](function(_0x26c151){if(_0x26c151){return _0x26c151[_0x08c7('0x4f')](_0x771baf[_0x08c7('0x39')][_0x08c7('0x3f')],_['omit'](_0x771baf[_0x08c7('0x39')],[_0x08c7('0x3f'),'id'])||{})[_0x08c7('0x50')](function(){return db[_0x08c7('0x51')][_0x08c7('0x2a')]({'attributes':['id',_0x08c7('0x21'),_0x08c7('0x52')],'where':{'id':_0x771baf[_0x08c7('0x39')][_0x08c7('0x3f')]}});})[_0x08c7('0x1e')](function(_0x5d0abb){socket['emit']('mailInteractionTags:save',{'id':Number(_0x771baf[_0x08c7('0x3b')]['id']),'tags':_0x5d0abb||[]});return{'id':Number(_0x771baf[_0x08c7('0x3b')]['id']),'tags':_0x5d0abb||[]};});}})[_0x08c7('0x1e')](respondWithResult(_0x222853,null))[_0x08c7('0x3a')](handleError(_0x222853,null));};exports[_0x08c7('0x53')]=function(_0x3bd49d,_0x2af727){return db[_0x08c7('0x25')]['find']({'where':{'id':_0x3bd49d['params']['id']}})[_0x08c7('0x1e')](handleEntityNotFound(_0x2af727,null))[_0x08c7('0x1e')](function(_0x1f5671){if(_0x1f5671){return _0x1f5671[_0x08c7('0x53')](_0x3bd49d['query'][_0x08c7('0x3f')]);}})[_0x08c7('0x1e')](respondWithStatusCode(_0x2af727,null))[_0x08c7('0x3a')](handleError(_0x2af727,null));};exports['download']=function(_0x123c39,_0x47d083){var _0x1e5342=moment()['unix']()['toString']();var _0x11a029=path[_0x08c7('0x54')](config[_0x08c7('0x55')],'server',_0x08c7('0x56'),_0x08c7('0x57'));var _0x5628a2=path[_0x08c7('0x54')](config[_0x08c7('0x55')],'server',_0x08c7('0x56'),_0x08c7('0x58'));var _0x455e4e=path[_0x08c7('0x54')](_0x11a029,_0x1e5342);var _0x7fe8e3=util[_0x08c7('0x49')]('transcript-%d-%s.zip',_0x123c39[_0x08c7('0x3b')]['id'],_0x1e5342);var _0x2d17e3=path[_0x08c7('0x54')](_0x11a029,_0x7fe8e3);var _0x496826=[];if(_0x123c39[_0x08c7('0x2b')]['attachments']){_0x496826[_0x08c7('0x59')]({'model':db[_0x08c7('0x5a')],'as':_0x08c7('0x5b'),'raw':!![]});}var _0x4be5b6=[{'model':db[_0x08c7('0x3e')],'as':_0x08c7('0x5c'),'attributes':['id',_0x08c7('0x39'),_0x08c7('0x5d'),'to','cc',_0x08c7('0x5e'),_0x08c7('0x5f'),_0x08c7('0x60')],'where':{'secret':![]},'order':qs[_0x08c7('0x44')]('id'),'include':_0x496826}];return db['MailInteraction'][_0x08c7('0x37')]({'where':{'id':_0x123c39[_0x08c7('0x3b')]['id']},'include':_0x4be5b6})[_0x08c7('0x1e')](handleEntityNotFound(_0x47d083,null))[_0x08c7('0x1e')](function(_0x40f57e){if(_0x40f57e&&_0x40f57e[_0x08c7('0x5c')]){var _0x1723d0=_0x40f57e[_0x08c7('0x61')]({'plain':!![]});fs[_0x08c7('0x62')](_0x455e4e);return BPromise[_0x08c7('0x63')](_0x1723d0['Messages'],function(_0x24069a,_0x49ce14){var _0x32421a={'from':_0x24069a[_0x08c7('0x5d')],'to':_0x24069a['to']||'missing.recipient@your.company.com','subject':_0x24069a[_0x08c7('0x5f')],'html':htmlEntities[_0x08c7('0x64')](_0x24069a['body']),'headers':{'Date':moment(_0x24069a['createdAt'])[_0x08c7('0x49')](_0x08c7('0x65'))},'attachments':[]};if(_0x24069a['cc']){_0x32421a[_0x08c7('0x66')]['Cc']=_0x24069a['cc'];}if(_0x24069a['bcc']){_0x32421a[_0x08c7('0x66')][_0x08c7('0x67')]=_0x24069a[_0x08c7('0x5e')];}return new BPromise(function(_0x15d9de,_0x195681){if(_0x24069a[_0x08c7('0x5b')]){for(var _0xa920fa=0x0;_0xa920fa<_0x24069a['Attachments']['length'];_0xa920fa++){var _0x1f51e5=_0x24069a['Attachments'][_0xa920fa];var _0x276527=path[_0x08c7('0x54')](_0x5628a2,_0x1f51e5['basename']);if(fs['existsSync'](_0x276527)){_0x32421a[_0x08c7('0x58')]['push']({'name':_0x1f51e5['name'],'contentType':_0x1f51e5['type'],'data':fs['readFileSync'](_0x276527)});}}}emlformat[_0x08c7('0x68')](_0x32421a,function(_0x225c15,_0x54cb13){if(_0x225c15)return _0x195681(_0x225c15);fs[_0x08c7('0x69')](path['join'](_0x455e4e,util[_0x08c7('0x49')]('message%d.eml',_0x49ce14)),_0x54cb13);return _0x15d9de(_0x54cb13);});});})[_0x08c7('0x1e')](function(){return new BPromise(function(_0x4884b7,_0xe1500e){zipdir(_0x455e4e,{'saveTo':_0x2d17e3},function(_0x2fb751,_0x665d67){if(_0x2fb751)return _0xe1500e(_0x2fb751);return _0x4884b7(_0x665d67);});})['then'](function(){return new BPromise(function(_0x4011cc,_0x386a9b){rimraf(_0x455e4e,function(_0x340d75){if(_0x340d75)_0x386a9b(_0x340d75);return _0x4011cc();});});})['then'](function(){return _0x47d083[_0x08c7('0x6a')](_0x2d17e3,_0x7fe8e3,function(_0x1d0e25){if(!_0x1d0e25)fs[_0x08c7('0x6b')](_0x2d17e3);});});});}else{return _0x47d083[_0x08c7('0x6c')](0xc8);}})[_0x08c7('0x3a')](handleError(_0x47d083,null));};