479ea3d69ccbbe08d4af39185dffae87f15b2c56
[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 _0x2229=['find','create','body','update','describe','addMessage','MailMessage','ids','getMessages','findOne','length','hasOwnProperty','nolimit','order','sort','pick','where','MailInteractionId','filter','$gte','split','YYYY-MM-DD\x20HH:mm:ss','findAll','inlineCss','true','rows','addTags','setTags','spread','color','emit','removeTags','download','unix','toString','root','server','files','tmp','attachments','join','format','push','Attachment','Attachments','from','bcc','subject','createdAt','Messages','get','mkdirSync','ddd,\x20DD\x20MMM\x20YYYY\x20HH:mm:ss\x20ZZ','headers','Bcc','basename','existsSync','readFileSync','build','writeFileSync','unlinkSync','eml-format','moment','bluebird','util','path','juice','ioredis','../../config/logger','api','html-entities','redis','defaults','localhost','socket.io-emitter','./mailInteraction.socket','register','sendStatus','status','json','undefined','limit','count','offset','set','Content-Range','then','destroy','end','error','stack','name','send','index','map','rawAttributes','fieldName','type','key','mail','query','user','catch','params','model','keys','MailInteraction','filters','intersection','attributes','fields','includeAll','include','merge','options'];(function(_0x2cfd73,_0x50ea71){var _0x5e1a1d=function(_0x4326f9){while(--_0x4326f9){_0x2cfd73['push'](_0x2cfd73['shift']());}};_0x5e1a1d(++_0x50ea71);}(_0x2229,0x196));var _0x9222=function(_0x412572,_0x37e9e2){_0x412572=_0x412572-0x0;var _0x20881f=_0x2229[_0x412572];return _0x20881f;};'use strict';var emlformat=require(_0x9222('0x0'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var moment=require(_0x9222('0x1'));var BPromise=require(_0x9222('0x2'));var util=require(_0x9222('0x3'));var path=require(_0x9222('0x4'));var fs=require('fs');var _=require('lodash');var juice=require(_0x9222('0x5'));var Redis=require(_0x9222('0x6'));var interaction=require('../../components/interaction/service');var qs=require('../../components/parsers/qs');var logger=require(_0x9222('0x7'))(_0x9222('0x8'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];var htmlEntities=require(_0x9222('0x9'));config[_0x9222('0xa')]=_[_0x9222('0xb')](config[_0x9222('0xa')],{'host':_0x9222('0xc'),'port':0x18eb});var socket=require(_0x9222('0xd'))(new Redis(config[_0x9222('0xa')]));require(_0x9222('0xe'))[_0x9222('0xf')](socket);function respondWithStatusCode(_0x59c62b,_0x5917f4){_0x5917f4=_0x5917f4||0xcc;return function(_0x4fe165){if(_0x4fe165){return _0x59c62b[_0x9222('0x10')](_0x5917f4);}return _0x59c62b[_0x9222('0x11')](_0x5917f4)['end']();};}function respondWithResult(_0x149e53,_0xffb4ed){_0xffb4ed=_0xffb4ed||0xc8;return function(_0x17e599){if(_0x17e599){return _0x149e53['status'](_0xffb4ed)[_0x9222('0x12')](_0x17e599);}};}function respondWithFilteredResult(_0x3742e9,_0x438a03){return function(_0x265be0){if(_0x265be0){var _0x1c5f21=typeof _0x438a03['offset']===_0x9222('0x13')&&typeof _0x438a03[_0x9222('0x14')]===_0x9222('0x13');var _0x1a9eec=_0x265be0[_0x9222('0x15')];var _0x4fc904=_0x1c5f21?0x0:_0x438a03[_0x9222('0x16')];var _0x4a604a=_0x1c5f21?_0x265be0['count']:_0x438a03[_0x9222('0x16')]+_0x438a03['limit'];var _0xac0ae1;if(_0x4a604a>=_0x1a9eec){_0x4a604a=_0x1a9eec;_0xac0ae1=0xc8;}else{_0xac0ae1=0xce;}_0x3742e9[_0x9222('0x11')](_0xac0ae1);return _0x3742e9[_0x9222('0x17')](_0x9222('0x18'),_0x4fc904+'-'+_0x4a604a+'/'+_0x1a9eec)['json'](_0x265be0);}return null;};}function saveUpdates(_0x4e7c94){return function(_0x339f49){if(_0x339f49){return _0x339f49['update'](_0x4e7c94)[_0x9222('0x19')](function(_0x5a1ed3){return _0x5a1ed3;});}return null;};}function removeEntity(_0x497eec){return function(_0x34618e){if(_0x34618e){return _0x34618e[_0x9222('0x1a')]()[_0x9222('0x19')](function(){_0x497eec[_0x9222('0x11')](0xcc)[_0x9222('0x1b')]();});}};}function handleEntityNotFound(_0x2a397b){return function(_0x43ea5e){if(!_0x43ea5e){_0x2a397b[_0x9222('0x10')](0x194);}return _0x43ea5e;};}function handleError(_0x27d26c,_0x49ee96){_0x49ee96=_0x49ee96||0x1f4;return function(_0x43c58a){logger[_0x9222('0x1c')](_0x43c58a[_0x9222('0x1d')]);if(_0x43c58a[_0x9222('0x1e')]){delete _0x43c58a[_0x9222('0x1e')];}_0x27d26c[_0x9222('0x11')](_0x49ee96)[_0x9222('0x1f')](_0x43c58a);};}exports[_0x9222('0x20')]=function(_0x2adc0d,_0x596d1d){var _0x51441b={};var _0x448a3f=_[_0x9222('0x21')](db['MailInteraction'][_0x9222('0x22')],function(_0x36ba01){return{'name':_0x36ba01[_0x9222('0x23')],'type':_0x36ba01[_0x9222('0x24')][_0x9222('0x25')]};});_0x51441b=qs['getOptions'](_0x448a3f,_0x2adc0d);return interaction['findAll'](_0x9222('0x26'),_0x2adc0d[_0x9222('0x27')],_0x2adc0d[_0x9222('0x28')],_0x51441b,_0x448a3f)[_0x9222('0x19')](respondWithFilteredResult(_0x596d1d,_0x51441b))[_0x9222('0x29')](handleError(_0x596d1d,null));};exports['show']=function(_0x438241,_0x399456){var _0x413977={'raw':![],'where':{'id':_0x438241[_0x9222('0x2a')]['id']}},_0x2def77={};_0x2def77[_0x9222('0x2b')]=_[_0x9222('0x2c')](db[_0x9222('0x2d')][_0x9222('0x22')]);_0x2def77[_0x9222('0x27')]=_['keys'](_0x438241['query']);_0x2def77[_0x9222('0x2e')]=_[_0x9222('0x2f')](_0x2def77[_0x9222('0x2b')],_0x2def77[_0x9222('0x27')]);_0x413977[_0x9222('0x30')]=_[_0x9222('0x2f')](_0x2def77['model'],qs[_0x9222('0x31')](_0x438241[_0x9222('0x27')][_0x9222('0x31')]));_0x413977[_0x9222('0x30')]=_0x413977[_0x9222('0x30')]['length']?_0x413977['attributes']:_0x2def77[_0x9222('0x2b')];if(_0x438241[_0x9222('0x27')][_0x9222('0x32')]){_0x413977[_0x9222('0x33')]=[{'all':!![]}];}_0x413977=_[_0x9222('0x34')]({},_0x413977,_0x438241[_0x9222('0x35')]);return db[_0x9222('0x2d')][_0x9222('0x36')](_0x413977)[_0x9222('0x19')](handleEntityNotFound(_0x399456,null))[_0x9222('0x19')](respondWithResult(_0x399456,null))[_0x9222('0x29')](handleError(_0x399456,null));};exports[_0x9222('0x37')]=function(_0x392c5c,_0x24da55){return db[_0x9222('0x2d')][_0x9222('0x37')](_0x392c5c[_0x9222('0x38')],{})['then'](respondWithResult(_0x24da55,0xc9))[_0x9222('0x29')](handleError(_0x24da55,null));};exports[_0x9222('0x39')]=function(_0x26be91,_0xea4a0e){if(_0x26be91[_0x9222('0x38')]['id']){delete _0x26be91[_0x9222('0x38')]['id'];}return db[_0x9222('0x2d')]['find']({'where':{'id':_0x26be91[_0x9222('0x2a')]['id']}})[_0x9222('0x19')](handleEntityNotFound(_0xea4a0e,null))[_0x9222('0x19')](saveUpdates(_0x26be91[_0x9222('0x38')],null))[_0x9222('0x19')](respondWithResult(_0xea4a0e,null))[_0x9222('0x29')](handleError(_0xea4a0e,null));};exports[_0x9222('0x1a')]=function(_0x4c45d5,_0x25c347){return db[_0x9222('0x2d')][_0x9222('0x36')]({'where':{'id':_0x4c45d5[_0x9222('0x2a')]['id']}})[_0x9222('0x19')](handleEntityNotFound(_0x25c347,null))[_0x9222('0x19')](removeEntity(_0x25c347,null))['catch'](handleError(_0x25c347,null));};exports['describe']=function(_0x4b5722,_0x4abf6f){return db[_0x9222('0x2d')][_0x9222('0x3a')]()['then'](respondWithResult(_0x4abf6f,null))['catch'](handleError(_0x4abf6f,null));};exports[_0x9222('0x3b')]=function(_0x7ae3fd,_0x2fb3f2){return db[_0x9222('0x3c')][_0x9222('0x36')]({'where':{'id':_0x7ae3fd[_0x9222('0x2a')]['id']}})['then'](handleEntityNotFound(_0x2fb3f2,null))[_0x9222('0x19')](function(_0x279fa8){if(_0x279fa8){return _0x279fa8[_0x9222('0x3b')](_0x7ae3fd[_0x9222('0x38')][_0x9222('0x3d')],_['omit'](_0x7ae3fd[_0x9222('0x38')],[_0x9222('0x3d'),'id'])||{});}})[_0x9222('0x19')](respondWithResult(_0x2fb3f2,null))[_0x9222('0x29')](handleError(_0x2fb3f2,null));};exports[_0x9222('0x3e')]=function(_0x190c92,_0x409b9b){var _0x40fe2e={'raw':![],'where':{}};var _0x2cb1e0={};var _0x548379={'count':0x0,'rows':[]};return db[_0x9222('0x2d')][_0x9222('0x3f')]({'where':{'id':_0x190c92[_0x9222('0x2a')]['id']}})[_0x9222('0x19')](handleEntityNotFound(_0x409b9b,null))['then'](function(_0x320da2){if(_0x320da2){_0x2cb1e0[_0x9222('0x2b')]=_[_0x9222('0x2c')](db['MailMessage'][_0x9222('0x22')]);_0x2cb1e0['query']=_[_0x9222('0x2c')](_0x190c92[_0x9222('0x27')]);_0x2cb1e0[_0x9222('0x2e')]=_[_0x9222('0x2f')](_0x2cb1e0[_0x9222('0x2b')],_0x2cb1e0[_0x9222('0x27')]);_0x40fe2e[_0x9222('0x30')]=_['intersection'](_0x2cb1e0['model'],qs['fields'](_0x190c92['query'][_0x9222('0x31')]));_0x40fe2e[_0x9222('0x30')]=_0x40fe2e[_0x9222('0x30')][_0x9222('0x40')]?_0x40fe2e[_0x9222('0x30')]:_0x2cb1e0[_0x9222('0x2b')];if(!_0x190c92[_0x9222('0x27')][_0x9222('0x41')](_0x9222('0x42'))){_0x40fe2e[_0x9222('0x14')]=qs[_0x9222('0x14')](_0x190c92['query'][_0x9222('0x14')]);_0x40fe2e[_0x9222('0x16')]=qs[_0x9222('0x16')](_0x190c92[_0x9222('0x27')][_0x9222('0x16')]);}_0x40fe2e[_0x9222('0x43')]=qs[_0x9222('0x44')](_0x190c92[_0x9222('0x27')][_0x9222('0x44')]);_0x40fe2e['where']=qs['filters'](_[_0x9222('0x45')](_0x190c92[_0x9222('0x27')],_0x2cb1e0['filters']));_0x40fe2e[_0x9222('0x46')][_0x9222('0x47')]=_0x320da2['id'];if(_0x190c92[_0x9222('0x27')][_0x9222('0x48')]){_0x40fe2e[_0x9222('0x46')]=_['merge'](_0x40fe2e[_0x9222('0x46')],{'$or':_[_0x9222('0x21')](_0x40fe2e[_0x9222('0x30')],function(_0x32e988){var _0x30eb95={};_0x30eb95[_0x32e988]={'$like':'%'+_0x190c92[_0x9222('0x27')][_0x9222('0x48')]+'%'};return _0x30eb95;})});}if(_0x190c92[_0x9222('0x27')][_0x9222('0x49')]){var _0x503454=_0x190c92[_0x9222('0x27')][_0x9222('0x49')][_0x9222('0x4a')](',');var _0x19bddf={};_0x19bddf[_0x503454[0x0]]={'$gte':moment(_0x503454[0x1])['format'](_0x9222('0x4b'))};_0x40fe2e[_0x9222('0x46')]=_[_0x9222('0x34')](_0x40fe2e[_0x9222('0x46')],_0x19bddf);}_0x40fe2e=_[_0x9222('0x34')]({},_0x40fe2e,_0x190c92[_0x9222('0x35')]);return db[_0x9222('0x3c')][_0x9222('0x15')]({'where':_0x40fe2e[_0x9222('0x46')]})[_0x9222('0x19')](function(_0x5a07d4){_0x548379['count']=_0x5a07d4;if(_0x190c92['query']['includeAll']){_0x40fe2e[_0x9222('0x33')]=[{'all':!![]}];}return db['MailMessage'][_0x9222('0x4c')](_0x40fe2e);})['then'](function(_0x3280e7){if(_0x190c92['query'][_0x9222('0x4d')]===_0x9222('0x4e')){for(var _0x300b30=0x0;_0x300b30<_0x3280e7['length'];_0x300b30++){_0x3280e7[_0x300b30][_0x9222('0x38')]=juice(_0x3280e7[_0x300b30][_0x9222('0x38')]);}}_0x548379[_0x9222('0x4f')]=_0x3280e7;return _0x548379;});}})['then'](respondWithFilteredResult(_0x409b9b,_0x40fe2e))['catch'](handleError(_0x409b9b,null));};exports[_0x9222('0x50')]=function(_0x4a95d1,_0x52c3a2){return db[_0x9222('0x2d')][_0x9222('0x36')]({'where':{'id':_0x4a95d1[_0x9222('0x2a')]['id']}})[_0x9222('0x19')](handleEntityNotFound(_0x52c3a2,null))[_0x9222('0x19')](function(_0xb9e0b3){if(_0xb9e0b3){return _0xb9e0b3[_0x9222('0x51')](_0x4a95d1[_0x9222('0x38')][_0x9222('0x3d')],_['omit'](_0x4a95d1[_0x9222('0x38')],[_0x9222('0x3d'),'id'])||{})[_0x9222('0x52')](function(){return db['Tag'][_0x9222('0x4c')]({'attributes':['id',_0x9222('0x1e'),_0x9222('0x53')],'where':{'id':_0x4a95d1['body'][_0x9222('0x3d')]}});})[_0x9222('0x19')](function(_0x55150a){socket[_0x9222('0x54')]('mailInteractionTags:save',{'id':Number(_0x4a95d1[_0x9222('0x2a')]['id']),'tags':_0x55150a||[]});return{'id':Number(_0x4a95d1[_0x9222('0x2a')]['id']),'tags':_0x55150a||[]};});}})['then'](respondWithResult(_0x52c3a2,null))['catch'](handleError(_0x52c3a2,null));};exports[_0x9222('0x55')]=function(_0x425aae,_0x5b4997){return db['MailInteraction'][_0x9222('0x36')]({'where':{'id':_0x425aae['params']['id']}})[_0x9222('0x19')](handleEntityNotFound(_0x5b4997,null))[_0x9222('0x19')](function(_0x3cd948){if(_0x3cd948){return _0x3cd948[_0x9222('0x55')](_0x425aae[_0x9222('0x27')][_0x9222('0x3d')]);}})[_0x9222('0x19')](respondWithStatusCode(_0x5b4997,null))[_0x9222('0x29')](handleError(_0x5b4997,null));};exports[_0x9222('0x56')]=function(_0x1fe269,_0xf6a499){var _0x3109a3=moment()[_0x9222('0x57')]()[_0x9222('0x58')]();var _0x299102=path['join'](config[_0x9222('0x59')],_0x9222('0x5a'),_0x9222('0x5b'),_0x9222('0x5c'));var _0xedc9be=path['join'](config[_0x9222('0x59')],_0x9222('0x5a'),_0x9222('0x5b'),_0x9222('0x5d'));var _0x4a608d=path[_0x9222('0x5e')](_0x299102,_0x3109a3);var _0x2ac9ba=util[_0x9222('0x5f')]('transcript-%d-%s.zip',_0x1fe269[_0x9222('0x2a')]['id'],_0x3109a3);var _0x565611=path[_0x9222('0x5e')](_0x299102,_0x2ac9ba);var _0x27c230=[];if(_0x1fe269['query'][_0x9222('0x5d')]){_0x27c230[_0x9222('0x60')]({'model':db[_0x9222('0x61')],'as':_0x9222('0x62'),'raw':!![]});}var _0x1cd77e=[{'model':db['MailMessage'],'as':'Messages','attributes':['id',_0x9222('0x38'),_0x9222('0x63'),'to','cc',_0x9222('0x64'),_0x9222('0x65'),_0x9222('0x66')],'where':{'secret':![]},'order':qs['sort']('id'),'include':_0x27c230}];return db['MailInteraction'][_0x9222('0x36')]({'where':{'id':_0x1fe269[_0x9222('0x2a')]['id']},'include':_0x1cd77e})['then'](handleEntityNotFound(_0xf6a499,null))['then'](function(_0x65ef4f){if(_0x65ef4f&&_0x65ef4f[_0x9222('0x67')]){var _0x46df98=_0x65ef4f[_0x9222('0x68')]({'plain':!![]});fs[_0x9222('0x69')](_0x4a608d);return BPromise['each'](_0x46df98[_0x9222('0x67')],function(_0x9a3fd1,_0x3ccab2){var _0x5aa1cf={'from':_0x9a3fd1[_0x9222('0x63')],'to':_0x9a3fd1['to']||'missing.recipient@your.company.com','subject':_0x9a3fd1[_0x9222('0x65')],'html':htmlEntities['decode'](_0x9a3fd1['body']),'headers':{'Date':moment(_0x9a3fd1[_0x9222('0x66')])[_0x9222('0x5f')](_0x9222('0x6a'))},'attachments':[]};if(_0x9a3fd1['cc']){_0x5aa1cf[_0x9222('0x6b')]['Cc']=_0x9a3fd1['cc'];}if(_0x9a3fd1[_0x9222('0x64')]){_0x5aa1cf['headers'][_0x9222('0x6c')]=_0x9a3fd1[_0x9222('0x64')];}return new BPromise(function(_0x1387d5,_0xf3e766){if(_0x9a3fd1[_0x9222('0x62')]){for(var _0x30c576=0x0;_0x30c576<_0x9a3fd1[_0x9222('0x62')]['length'];_0x30c576++){var _0x56dd48=_0x9a3fd1[_0x9222('0x62')][_0x30c576];var _0x64f19=path['join'](_0xedc9be,_0x56dd48[_0x9222('0x6d')]);if(fs[_0x9222('0x6e')](_0x64f19)){_0x5aa1cf[_0x9222('0x5d')][_0x9222('0x60')]({'name':_0x56dd48[_0x9222('0x1e')],'contentType':_0x56dd48[_0x9222('0x24')],'data':fs[_0x9222('0x6f')](_0x64f19)});}}}emlformat[_0x9222('0x70')](_0x5aa1cf,function(_0x7297dd,_0x5633cd){if(_0x7297dd)return _0xf3e766(_0x7297dd);fs[_0x9222('0x71')](path[_0x9222('0x5e')](_0x4a608d,util['format']('message%d.eml',_0x3ccab2)),_0x5633cd);return _0x1387d5(_0x5633cd);});});})[_0x9222('0x19')](function(){return new BPromise(function(_0x5eb0a1,_0x184e78){zipdir(_0x4a608d,{'saveTo':_0x565611},function(_0x4e8a5b,_0x1d68f0){if(_0x4e8a5b)return _0x184e78(_0x4e8a5b);return _0x5eb0a1(_0x1d68f0);});})[_0x9222('0x19')](function(){return new BPromise(function(_0x1a79a0,_0xb898c6){rimraf(_0x4a608d,function(_0x1d36bb){if(_0x1d36bb)_0xb898c6(_0x1d36bb);return _0x1a79a0();});});})[_0x9222('0x19')](function(){return _0xf6a499[_0x9222('0x56')](_0x565611,_0x2ac9ba,function(_0x3bbc97){if(!_0x3bbc97)fs[_0x9222('0x72')](_0x565611);});});});}else{return _0xf6a499['sendStatus'](0xc8);}})[_0x9222('0x29')](handleError(_0xf6a499,null));};