58167f45b76bd7d0f3f452d8bb071445431954e8
[motion2.git] / server / api / user / user.model.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 _0x33c5=['channel','MemberReport','map','YYYY-MM-DD\x20HH:mm:ss','all','voicePause','mailPause','faxPause','whatsappPause','Pause','../../config/utils','forEach','Status','setDataValue','crypto','util','moment','lodash','jayson/promise','./user.attributes','google','length','context','from-sip','system','format','%s%s','prefix','merge','Set','CDR(type)=%s','chanspy','record','MixMonitor','${UNIQUEID}.%s,a','recordingFormat','auth','push','password','ChanSpy','SIP/%s,%s','name','options','join','StopMixMonitor','wav','WAV','gsm','extensionMonitor','includes','_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}','_XCALLY_MIXMONITOR_FORMAT=%s','Dial','SIP/%s,,tTxXU(xcally-mixmonitor-context)','SIP/%s,,tTxX','Hangup','priority','defaults','VoiceChanSpy','findAll','then','internal','concat','catch','exports','models','define','User','users','utf8','utf8_bin','userProfileId','undefined','resolve','find','privacyEnabled','changed','UserProfile','updateMd5Password','updatePassword','userSetting','error','VoiceExtension','bulkCreate','destroy','encryptPassword','function','Missing\x20Callback','toString','base64','salt','sha1','indexOf','provider',':asterisk:','md5secret','http','client','request','Agents','Unable\x20to\x20retrieve\x20RPC\x20agent\x20(AMI)','result','Unable\x20to\x20retrieve\x20RPC\x20agent\x20(Routing)','manual','voice','QueuePause','UserVoiceQueueRt','update'];(function(_0x1ec4b4,_0x2d02d5){var _0x14c6b6=function(_0x595f28){while(--_0x595f28){_0x1ec4b4['push'](_0x1ec4b4['shift']());}};_0x14c6b6(++_0x2d02d5);}(_0x33c5,0xe6));var _0x533c=function(_0x4c9d00,_0x5092d5){_0x4c9d00=_0x4c9d00-0x0;var _0x4a73f5=_0x33c5[_0x4c9d00];return _0x4a73f5;};'use strict';var BPromise=require('bluebird');var crypto=require(_0x533c('0x0'));var util=require(_0x533c('0x1'));var md5=require('md5');var moment=require(_0x533c('0x2'));var _=require(_0x533c('0x3'));var jayson=require(_0x533c('0x4'));var attributes=require(_0x533c('0x5'));var authTypes=[_0x533c('0x6')];var validatePresenceOf=function(_0x49609e){return _0x49609e&&_0x49609e[_0x533c('0x7')];};var getChanSpyApplications=function(_0x364b16,_0x31d912,_0x151732){var _0x34ca89={'context':_0x364b16[_0x533c('0x8')]||_0x533c('0x9'),'type':_0x533c('0xa'),'isApp':![],'UserId':_0x364b16['id']};var _0x2c297c=[];for(var _0x1b929b=0x0,_0x1782eb=0x1;_0x1b929b<_0x151732[_0x533c('0x7')];_0x1b929b++,_0x1782eb=0x1){var _0x2c0214={'exten':util[_0x533c('0xb')](_0x533c('0xc'),_0x151732[_0x1b929b][_0x533c('0xd')],_0x31d912),'ChanSpyId':_0x151732[_0x1b929b]['id']};_0x2c297c['push'](_[_0x533c('0xe')]({'app':_0x533c('0xf'),'appdata':util[_0x533c('0xb')](_0x533c('0x10'),_0x533c('0x11')),'priority':_0x1782eb++},_0x34ca89,_0x2c0214));if(_0x151732[_0x1b929b][_0x533c('0x12')]){_0x2c297c['push'](_[_0x533c('0xe')]({'app':_0x533c('0x13'),'appdata':util[_0x533c('0xb')](_0x533c('0x14'),_0x151732[_0x1b929b][_0x533c('0x15')]),'priority':_0x1782eb++},_0x34ca89,_0x2c0214));}if(_0x151732[_0x1b929b][_0x533c('0x16')]){_0x2c297c[_0x533c('0x17')](_[_0x533c('0xe')]({'app':'Authenticate','appdata':_0x151732[_0x1b929b][_0x533c('0x18')],'priority':_0x1782eb++},_0x34ca89,_0x2c0214));}_0x2c297c[_0x533c('0x17')](_[_0x533c('0xe')]({'app':_0x533c('0x19'),'appdata':util['format'](_0x533c('0x1a'),_0x364b16[_0x533c('0x1b')],_0x151732[_0x1b929b][_0x533c('0x1c')]?_0x151732[_0x1b929b][_0x533c('0x1c')][_0x533c('0x1d')](''):''),'priority':_0x1782eb++},_0x34ca89,_0x2c0214));if(_0x151732[_0x1b929b][_0x533c('0x12')]){_0x2c297c[_0x533c('0x17')](_[_0x533c('0xe')]({'app':_0x533c('0x1e'),'priority':_0x1782eb++},_0x34ca89,_0x2c0214));}}return _0x2c297c;};var getUserApplications=function(_0x12e126,_0x287b9e){var _0x2c41e9=[_0x533c('0x1f'),_0x533c('0x20'),_0x533c('0x21')];var _0x3de9fa={'context':_0x12e126[_0x533c('0x8')]||_0x533c('0x9'),'exten':_0x287b9e,'type':'system','isApp':![],'UserId':_0x12e126['id']};var _0xce8d9=[{'app':'Set','appdata':'CDR(type)=internal'}];if(_0x12e126[_0x533c('0x22')]&&_[_0x533c('0x23')](_0x2c41e9,_0x12e126['extensionMonitor'])){_0xce8d9[_0x533c('0x17')]({'app':_0x533c('0xf'),'appdata':_0x533c('0x24')});_0xce8d9[_0x533c('0x17')]({'app':'Set','appdata':util[_0x533c('0xb')](_0x533c('0x25'),_0x12e126[_0x533c('0x22')])});_0xce8d9[_0x533c('0x17')]({'app':_0x533c('0x26'),'appdata':util[_0x533c('0xb')](_0x533c('0x27'),_0x12e126[_0x533c('0x1b')])});}else{_0xce8d9[_0x533c('0x17')]({'app':_0x533c('0x26'),'appdata':util['format'](_0x533c('0x28'),_0x12e126[_0x533c('0x1b')])});}_0xce8d9['push']({'app':_0x533c('0x29')});for(var _0x4f9f4a=0x0;_0x4f9f4a<_0xce8d9[_0x533c('0x7')];_0x4f9f4a++){_0xce8d9[_0x4f9f4a][_0x533c('0x2a')]=_0x4f9f4a+0x1;_0xce8d9[_0x4f9f4a]=_[_0x533c('0x2b')](_0xce8d9[_0x4f9f4a],_0x3de9fa);}return _0xce8d9;};var getChanSpyPromise=function(_0x8dd7f1,_0x425f60){return new BPromise(function(_0x146a8e,_0x212d1b){return _0x8dd7f1[_0x533c('0x2c')][_0x533c('0x2d')]()[_0x533c('0x2e')](function(_0x441680){if(_0x441680){var _0x73c0=getChanSpyApplications(_0x425f60,_0x425f60['internal'],_0x441680);if(_0x425f60[_0x533c('0x2f')]!=_0x425f60['name']){_0x73c0=_0x73c0[_0x533c('0x30')](getChanSpyApplications(_0x425f60,_0x425f60[_0x533c('0x1b')],_0x441680));}return _0x146a8e(_0x73c0);}return _0x146a8e([]);})[_0x533c('0x31')](function(_0xa42b78){_0x212d1b(_0xa42b78);});});};module[_0x533c('0x32')]=function(_0x397ad3){var _0x41aba0=_0x397ad3[_0x533c('0x33')];return _0x397ad3[_0x533c('0x34')](_0x533c('0x35'),attributes,{'tableName':_0x533c('0x36'),'charset':_0x533c('0x37'),'collate':_0x533c('0x38'),'hooks':{'beforeCreate':function(_0x14dd9d,_0x3803d0,_0x5ac6b4){var _0x2b801e=typeof _0x14dd9d[_0x533c('0x39')]===_0x533c('0x3a')?BPromise[_0x533c('0x3b')](null):_0x41aba0['UserProfile'][_0x533c('0x3c')]({'where':{'id':_0x14dd9d[_0x533c('0x39')]}});_0x2b801e[_0x533c('0x2e')](function(_0x40f077){if(_0x40f077){_0x14dd9d[_0x533c('0x3d')]=_0x40f077['privacyEnabled'];}})['then'](function(){_0x14dd9d['updateMd5Password']();_0x14dd9d['updatePassword'](_0x5ac6b4);})['catch'](function(_0xf21fa4){_0x5ac6b4(_0xf21fa4);});},'beforeUpdate':function(_0x4b6c22,_0x42994d,_0x55726a){Promise[_0x533c('0x3b')]()[_0x533c('0x2e')](function(){if(_0x4b6c22[_0x533c('0x3e')]('userProfileId')===![])return;return _0x41aba0[_0x533c('0x3f')][_0x533c('0x3c')]({'where':{'id':_0x4b6c22[_0x533c('0x39')]}})['then'](function(_0x160d4b){if(_0x160d4b)_0x4b6c22[_0x533c('0x3d')]=_0x160d4b[_0x533c('0x3d')];return;});})['then'](function(){if(_0x4b6c22[_0x533c('0x3e')](_0x533c('0x18'))){_0x4b6c22[_0x533c('0x40')]();return _0x4b6c22[_0x533c('0x41')](_0x55726a);}_0x55726a();})[_0x533c('0x31')](function(_0x4154f9){_0x55726a(_0x4154f9);});},'afterCreate':function(_0x6523bc,_0x2dbd81,_0x40f830){var _0x2c03fa=getUserApplications(_0x6523bc,_0x6523bc[_0x533c('0x2f')]);if(_0x6523bc['internal']!=_0x6523bc[_0x533c('0x1b')]){_0x2c03fa=_0x2c03fa[_0x533c('0x30')](getUserApplications(_0x6523bc,_0x6523bc[_0x533c('0x1b')]));}return Promise[_0x533c('0x3b')]()[_0x533c('0x2e')](function(){if(!_0x6523bc[_0x533c('0x42')]){return _0x6523bc['createUserSetting']({'clientSideLoggingLevel':_0x533c('0x43'),'clientSideLoggingEnabled':![]});}})[_0x533c('0x2e')](function(){return _0x41aba0[_0x533c('0x44')]['bulkCreate'](_0x2c03fa);})[_0x533c('0x2e')](function(){if(_0x6523bc[_0x533c('0x11')]){return getChanSpyPromise(_0x41aba0,_0x6523bc);}})[_0x533c('0x2e')](function(_0x1abd47){if(_0x1abd47&&_0x1abd47['length']){return _0x41aba0[_0x533c('0x44')]['bulkCreate'](_0x1abd47);}})[_0x533c('0x2e')](function(){_0x40f830();})[_0x533c('0x31')](function(_0x55a372){_0x40f830(_0x55a372);});},'afterUpdate':function(_0x3f4015,_0x3f1e47,_0x115d79){return BPromise['resolve']()['then'](function(){if(_0x3f4015['changed']('chanspy')||_0x3f4015[_0x533c('0x3e')]('context')){return _0x41aba0[_0x533c('0x44')]['destroy']({'where':{'UserId':_0x3f4015['id'],'type':_0x533c('0xa'),'ChanSpyId':{'$ne':null}}})['then'](function(){if(_0x3f4015[_0x533c('0x11')]){return getChanSpyPromise(_0x41aba0,_0x3f4015)[_0x533c('0x2e')](function(_0x4c17b1){if(_0x4c17b1&&_0x4c17b1[_0x533c('0x7')]){return _0x41aba0[_0x533c('0x44')][_0x533c('0x45')](_0x4c17b1);}});}});}})[_0x533c('0x2e')](function(){if(_0x3f4015[_0x533c('0x3e')]('extensionMonitor')||_0x3f4015[_0x533c('0x3e')](_0x533c('0x8'))){return _0x41aba0[_0x533c('0x44')][_0x533c('0x46')]({'where':{'UserId':_0x3f4015['id'],'type':'system','ChanSpyId':null}})[_0x533c('0x2e')](function(){var _0x5080a6=getUserApplications(_0x3f4015,_0x3f4015['internal']);if(_0x3f4015['internal']!=_0x3f4015[_0x533c('0x1b')]){_0x5080a6=_0x5080a6['concat'](getUserApplications(_0x3f4015,_0x3f4015[_0x533c('0x1b')]));}return _0x41aba0[_0x533c('0x44')][_0x533c('0x45')](_0x5080a6);});}})[_0x533c('0x2e')](function(){_0x115d79();})[_0x533c('0x31')](function(_0x2d690f){_0x115d79(_0x2d690f);});},'afterDestroy':function(_0xa34f64){return _0x41aba0[_0x533c('0x44')]['destroy']({'where':{'UserId':_0xa34f64['id'],'type':_0x533c('0xa')}});}},'instanceMethods':{'authenticate':function(_0x6b16e1,_0xaaf682){if(!_0xaaf682){return this['password']===this[_0x533c('0x47')](_0x6b16e1);}var _0x30f457=this;this['encryptPassword'](_0x6b16e1,function(_0x1d081c,_0x56610e){if(_0x1d081c){_0xaaf682(_0x1d081c);}if(_0x30f457[_0x533c('0x18')]===_0x56610e){_0xaaf682(null,!![]);}else{_0xaaf682(null,![]);}});},'makeSalt':function(_0x2d1f93,_0x3837d6){var _0x23b2ef=0x10;if(typeof arguments[0x0]===_0x533c('0x48')){_0x3837d6=arguments[0x0];_0x2d1f93=_0x23b2ef;}else if(typeof arguments[0x1]===_0x533c('0x48')){_0x3837d6=arguments[0x1];}else{throw new Error(_0x533c('0x49'));}if(!_0x2d1f93){_0x2d1f93=_0x23b2ef;}return crypto['randomBytes'](_0x2d1f93,function(_0x16ff01,_0x24c2f4){if(_0x16ff01){_0x3837d6(_0x16ff01);}return _0x3837d6(null,_0x24c2f4[_0x533c('0x4a')](_0x533c('0x4b')));});},'encryptPassword':function(_0x24ca50,_0x1558ef){if(!_0x24ca50||!this[_0x533c('0x4c')]){return _0x1558ef?_0x1558ef(null):null;}var _0x50d5a2=0x2710;var _0x58d607=0x40;var _0x57efa5=Buffer['from'](this[_0x533c('0x4c')],_0x533c('0x4b'));if(!_0x1558ef){return crypto['pbkdf2Sync'](_0x24ca50,_0x57efa5,_0x50d5a2,_0x58d607,_0x533c('0x4d'))[_0x533c('0x4a')](_0x533c('0x4b'));}return crypto['pbkdf2'](_0x24ca50,_0x57efa5,_0x50d5a2,_0x58d607,_0x533c('0x4d'),function(_0x564a31,_0x50cfbc){if(_0x564a31){_0x1558ef(_0x564a31);}return _0x1558ef(null,_0x50cfbc[_0x533c('0x4a')](_0x533c('0x4b')));});},'updatePassword':function(_0x37b901){if(!this[_0x533c('0x18')]){return _0x37b901(null);}if(!validatePresenceOf(this[_0x533c('0x18')])&&authTypes[_0x533c('0x4e')](this[_0x533c('0x4f')])===-0x1){_0x37b901(new Error('Invalid\x20password'));}var _0x1ec3d0=this;this['makeSalt'](function(_0x5b3fe6,_0x26645d){if(_0x5b3fe6){return _0x37b901(_0x5b3fe6);}_0x1ec3d0[_0x533c('0x4c')]=_0x26645d;_0x1ec3d0[_0x533c('0x47')](_0x1ec3d0[_0x533c('0x18')],function(_0x178ef7,_0x4118fe){if(_0x178ef7){_0x37b901(_0x178ef7);}_0x1ec3d0[_0x533c('0x18')]=_0x4118fe;_0x37b901(null);});});},'updateMd5Password':function(){this['md5secret']=md5(this[_0x533c('0x1b')]+_0x533c('0x50')+this[_0x533c('0x18')]);return this[_0x533c('0x51')];},'getRealtimeData':function(){var _0x37ea57={'id':this['id']};var _0x25182f=jayson['client'][_0x533c('0x52')]({'port':0x232a});var _0x554a9f=jayson[_0x533c('0x53')][_0x533c('0x52')]({'port':0x232c});var _0x15f70={};var _0x9b28b8={};return _0x25182f[_0x533c('0x54')](_0x533c('0x55'),_0x37ea57)['then'](function(_0x591985){if(_0x591985[_0x533c('0x43')]){throw new Error(_0x533c('0x56'));}_0x15f70=_0x591985[_0x533c('0x57')];return _0x554a9f[_0x533c('0x54')]('Agents',_0x37ea57);})[_0x533c('0x2e')](function(_0x301cba){if(_0x301cba[_0x533c('0x43')]){throw new Error(_0x533c('0x58'));}_0x9b28b8=_0x301cba[_0x533c('0x57')];var _0x2f2863=_[_0x533c('0xe')]({},_0x15f70,_0x9b28b8);return _0x2f2863;})[_0x533c('0x31')](function(_0x10689d){throw _0x10689d;});},'unpause':function(_0x3aba19,_0x404a93=_0x533c('0x59')){var _0x13a7f2=this;var _0xea6ea2={};return Promise[_0x533c('0x3b')]()[_0x533c('0x2e')](function(){if(!_0x3aba19||_0x3aba19===_0x533c('0x5a')&&_0x404a93==='manual'){var _0x31bba1=jayson['client']['http']({'port':0x232a});return _0x31bba1[_0x533c('0x54')](_0x533c('0x5b'),{'id':_0x13a7f2['id'],'name':_0x13a7f2[_0x533c('0x1b')],'pause':![]})[_0x533c('0x2e')](function(_0x417158){if(_0x417158[_0x533c('0x43')]){throw new Error(util[_0x533c('0xb')]('Unable\x20to\x20unpause\x20agent\x20%s:$s',_0x13a7f2['id'],_0x13a7f2[_0x533c('0x1b')]));}return _0x417158[_0x533c('0x57')]['message'];});}})[_0x533c('0x2e')](function(){if(!_0x3aba19||_0x3aba19===_0x533c('0x5a')){return _0x41aba0[_0x533c('0x5c')][_0x533c('0x5d')]({'paused':0x0},{'where':{'UserId':_0x13a7f2['id']},'individualHooks':!![]});}})['then'](function(){var _0x1d4c79=!_0x3aba19?_0x533c('0x2d'):'findOne';var _0x1589b0={'membername':_0x13a7f2[_0x533c('0x1b')],'type':'PAUSE','exitAt':null};if(_0x3aba19){_0x1589b0[_0x533c('0x5e')]=_0x3aba19;}return _0x41aba0[_0x533c('0x5f')][_0x1d4c79]({'where':_0x1589b0});})['then'](function(_0x444f46){if(_0x444f46){var _0x5183e2=Array['isArray'](_0x444f46)?_0x444f46:[_0x444f46];var _0xf36c93=_0x5183e2[_0x533c('0x60')](function(_0x451def){return _0x451def[_0x533c('0x5d')]({'exitAt':moment()['format'](_0x533c('0x61')),'data2':_0x404a93});});return Promise[_0x533c('0x62')](_0xf36c93);}})[_0x533c('0x2e')](function(){if(!_0x3aba19){_0xea6ea2[_0x533c('0x63')]=![];_0xea6ea2[_0x533c('0x64')]=![];_0xea6ea2['chatPause']=![];_0xea6ea2[_0x533c('0x65')]=![];_0xea6ea2['smsPause']=![];_0xea6ea2[_0x533c('0x66')]=![];_0xea6ea2['openchannelPause']=![];}else{_0xea6ea2[_0x3aba19+_0x533c('0x67')]=![];}return _0x13a7f2['getRealtimeData']();})['then'](function(_0x511f74){var _0x3283bb=require(_0x533c('0x68'));var _0x191a3b=_0x3283bb['getChannels']();_0x191a3b[_0x533c('0x69')](function(_0x24a00c){var _0x3fbb08=_0x24a00c+_0x533c('0x6a');_0x13a7f2[_0x533c('0x6b')]([_0x3fbb08],_0x511f74[_0x3fbb08]);});return _0x13a7f2['update'](_0xea6ea2);})['catch'](function(_0x42c389){throw _0x42c389;});}}});};