95656998f7c993b2e0532e8c0976a6aa83f51326
[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 _0x3299=['randomBytes','toString','base64','salt','sha1','provider','Invalid\x20password','makeSalt',':asterisk:','md5secret','util','lodash','./user.attributes','google','context','from-sip','length','format','%s%s','prefix','Set','chanspy','record','push','merge','MixMonitor','${UNIQUEID}.%s,a','recordingFormat','auth','Authenticate','password','ChanSpy','SIP/%s,%s','options','join','StopMixMonitor','wav','WAV','system','extensionMonitor','includes','_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}','Dial','SIP/%s,,tTxXU(xcally-mixmonitor-context)','SIP/%s,,tTxX','name','Hangup','priority','defaults','findAll','then','concat','exports','models','define','User','users','utf8','userProfileId','undefined','resolve','UserProfile','find','privacyEnabled','updateMd5Password','updatePassword','changed','catch','internal','userSetting','createUserSetting','VoiceExtension','bulkCreate','destroy','encryptPassword','function','Missing\x20Callback'];(function(_0x3eb0b0,_0x516e94){var _0x549ae2=function(_0x97383e){while(--_0x97383e){_0x3eb0b0['push'](_0x3eb0b0['shift']());}};_0x549ae2(++_0x516e94);}(_0x3299,0xa4));var _0x9329=function(_0x2a1e53,_0x4cdf5c){_0x2a1e53=_0x2a1e53-0x0;var _0x201f2f=_0x3299[_0x2a1e53];return _0x201f2f;};'use strict';var BPromise=require('bluebird');var crypto=require('crypto');var util=require(_0x9329('0x0'));var md5=require('md5');var _=require(_0x9329('0x1'));var attributes=require(_0x9329('0x2'));var authTypes=[_0x9329('0x3')];var validatePresenceOf=function(_0x2274ce){return _0x2274ce&&_0x2274ce['length'];};var getChanSpyApplications=function(_0x11db6d,_0x1238dd,_0x4152da){var _0x315815={'context':_0x11db6d[_0x9329('0x4')]||_0x9329('0x5'),'type':'system','isApp':![],'UserId':_0x11db6d['id']};var _0x3b02f4=[];for(var _0x56114b=0x0,_0x506855=0x1;_0x56114b<_0x4152da[_0x9329('0x6')];_0x56114b++,_0x506855=0x1){var _0x521507={'exten':util[_0x9329('0x7')](_0x9329('0x8'),_0x4152da[_0x56114b][_0x9329('0x9')],_0x1238dd),'ChanSpyId':_0x4152da[_0x56114b]['id']};_0x3b02f4['push'](_['merge']({'app':_0x9329('0xa'),'appdata':util[_0x9329('0x7')]('CDR(type)=%s',_0x9329('0xb')),'priority':_0x506855++},_0x315815,_0x521507));if(_0x4152da[_0x56114b][_0x9329('0xc')]){_0x3b02f4[_0x9329('0xd')](_[_0x9329('0xe')]({'app':_0x9329('0xf'),'appdata':util[_0x9329('0x7')](_0x9329('0x10'),_0x4152da[_0x56114b][_0x9329('0x11')]),'priority':_0x506855++},_0x315815,_0x521507));}if(_0x4152da[_0x56114b][_0x9329('0x12')]){_0x3b02f4[_0x9329('0xd')](_[_0x9329('0xe')]({'app':_0x9329('0x13'),'appdata':_0x4152da[_0x56114b][_0x9329('0x14')],'priority':_0x506855++},_0x315815,_0x521507));}_0x3b02f4[_0x9329('0xd')](_[_0x9329('0xe')]({'app':_0x9329('0x15'),'appdata':util['format'](_0x9329('0x16'),_0x11db6d['name'],_0x4152da[_0x56114b][_0x9329('0x17')]?_0x4152da[_0x56114b][_0x9329('0x17')][_0x9329('0x18')](''):''),'priority':_0x506855++},_0x315815,_0x521507));if(_0x4152da[_0x56114b]['record']){_0x3b02f4['push'](_['merge']({'app':_0x9329('0x19'),'priority':_0x506855++},_0x315815,_0x521507));}}return _0x3b02f4;};var getUserApplications=function(_0x2768c1,_0x4f0074){var _0x4510d4=[_0x9329('0x1a'),_0x9329('0x1b'),'gsm'];var _0x4962f1={'context':_0x2768c1['context']||_0x9329('0x5'),'exten':_0x4f0074,'type':_0x9329('0x1c'),'isApp':![],'UserId':_0x2768c1['id']};var _0x4e8445=[{'app':_0x9329('0xa'),'appdata':'CDR(type)=internal'}];if(_0x2768c1[_0x9329('0x1d')]&&_[_0x9329('0x1e')](_0x4510d4,_0x2768c1[_0x9329('0x1d')])){_0x4e8445[_0x9329('0xd')]({'app':_0x9329('0xa'),'appdata':_0x9329('0x1f')});_0x4e8445['push']({'app':_0x9329('0xa'),'appdata':util['format']('_XCALLY_MIXMONITOR_FORMAT=%s',_0x2768c1['extensionMonitor'])});_0x4e8445[_0x9329('0xd')]({'app':_0x9329('0x20'),'appdata':util[_0x9329('0x7')](_0x9329('0x21'),_0x2768c1['name'])});}else{_0x4e8445[_0x9329('0xd')]({'app':_0x9329('0x20'),'appdata':util['format'](_0x9329('0x22'),_0x2768c1[_0x9329('0x23')])});}_0x4e8445[_0x9329('0xd')]({'app':_0x9329('0x24')});for(var _0x2681e1=0x0;_0x2681e1<_0x4e8445[_0x9329('0x6')];_0x2681e1++){_0x4e8445[_0x2681e1][_0x9329('0x25')]=_0x2681e1+0x1;_0x4e8445[_0x2681e1]=_[_0x9329('0x26')](_0x4e8445[_0x2681e1],_0x4962f1);}return _0x4e8445;};var getChanSpyPromise=function(_0x793b8c,_0x30fed6){return new BPromise(function(_0xd2c6cf,_0x29df42){return _0x793b8c['VoiceChanSpy'][_0x9329('0x27')]()[_0x9329('0x28')](function(_0x3b3a6e){if(_0x3b3a6e){var _0x381ec1=getChanSpyApplications(_0x30fed6,_0x30fed6['internal'],_0x3b3a6e);if(_0x30fed6['internal']!=_0x30fed6['name']){_0x381ec1=_0x381ec1[_0x9329('0x29')](getChanSpyApplications(_0x30fed6,_0x30fed6['name'],_0x3b3a6e));}return _0xd2c6cf(_0x381ec1);}return _0xd2c6cf([]);})['catch'](function(_0x35d8ad){_0x29df42(_0x35d8ad);});});};module[_0x9329('0x2a')]=function(_0x285b5){var _0x9b2c97=_0x285b5[_0x9329('0x2b')];return _0x285b5[_0x9329('0x2c')](_0x9329('0x2d'),attributes,{'tableName':_0x9329('0x2e'),'charset':_0x9329('0x2f'),'collate':'utf8_bin','hooks':{'beforeCreate':function(_0xea1314,_0xd0e7b9,_0x51ab50){var _0x262c93=typeof _0xea1314[_0x9329('0x30')]===_0x9329('0x31')?BPromise[_0x9329('0x32')](null):_0x9b2c97[_0x9329('0x33')][_0x9329('0x34')]({'where':{'id':_0xea1314[_0x9329('0x30')]}});_0x262c93[_0x9329('0x28')](function(_0x26204c){if(_0x26204c){_0xea1314[_0x9329('0x35')]=_0x26204c['privacyEnabled'];}})[_0x9329('0x28')](function(){_0xea1314[_0x9329('0x36')]();_0xea1314[_0x9329('0x37')](_0x51ab50);})['catch'](function(_0x140274){_0x51ab50(_0x140274);});},'beforeUpdate':function(_0x22fd93,_0x4abb21,_0x44505c){Promise[_0x9329('0x32')]()[_0x9329('0x28')](function(){if(_0x22fd93[_0x9329('0x38')](_0x9329('0x30'))===![])return;return _0x9b2c97[_0x9329('0x33')]['find']({'where':{'id':_0x22fd93[_0x9329('0x30')]}})[_0x9329('0x28')](function(_0x4a99cc){if(_0x4a99cc)_0x22fd93[_0x9329('0x35')]=_0x4a99cc[_0x9329('0x35')];return;});})[_0x9329('0x28')](function(){if(_0x22fd93[_0x9329('0x38')]('password')){_0x22fd93[_0x9329('0x36')]();return _0x22fd93['updatePassword'](_0x44505c);}_0x44505c();})[_0x9329('0x39')](function(_0x20a977){_0x44505c(_0x20a977);});},'afterCreate':function(_0x4d4ac1,_0x313b9c,_0x16b0da){var _0x24c9f3=getUserApplications(_0x4d4ac1,_0x4d4ac1[_0x9329('0x3a')]);if(_0x4d4ac1['internal']!=_0x4d4ac1[_0x9329('0x23')]){_0x24c9f3=_0x24c9f3[_0x9329('0x29')](getUserApplications(_0x4d4ac1,_0x4d4ac1['name']));}return Promise['resolve']()[_0x9329('0x28')](function(){if(!_0x4d4ac1[_0x9329('0x3b')]){return _0x4d4ac1[_0x9329('0x3c')]({'clientSideLoggingLevel':'error','clientSideLoggingEnabled':![]});}})['then'](function(){return _0x9b2c97['VoiceExtension']['bulkCreate'](_0x24c9f3);})[_0x9329('0x28')](function(){if(_0x4d4ac1[_0x9329('0xb')]){return getChanSpyPromise(_0x9b2c97,_0x4d4ac1);}})[_0x9329('0x28')](function(_0x1a185a){if(_0x1a185a&&_0x1a185a[_0x9329('0x6')]){return _0x9b2c97[_0x9329('0x3d')][_0x9329('0x3e')](_0x1a185a);}})['then'](function(){_0x16b0da();})[_0x9329('0x39')](function(_0x435c69){_0x16b0da(_0x435c69);});},'afterUpdate':function(_0x22461d,_0x3bd22b,_0x5e3703){return BPromise['resolve']()[_0x9329('0x28')](function(){if(_0x22461d[_0x9329('0x38')](_0x9329('0xb'))||_0x22461d['changed']('context')){return _0x9b2c97[_0x9329('0x3d')]['destroy']({'where':{'UserId':_0x22461d['id'],'type':'system','ChanSpyId':{'$ne':null}}})[_0x9329('0x28')](function(){if(_0x22461d[_0x9329('0xb')]){return getChanSpyPromise(_0x9b2c97,_0x22461d)[_0x9329('0x28')](function(_0x1af53d){if(_0x1af53d&&_0x1af53d[_0x9329('0x6')]){return _0x9b2c97[_0x9329('0x3d')]['bulkCreate'](_0x1af53d);}});}});}})[_0x9329('0x28')](function(){if(_0x22461d['changed']('extensionMonitor')||_0x22461d[_0x9329('0x38')](_0x9329('0x4'))){return _0x9b2c97[_0x9329('0x3d')][_0x9329('0x3f')]({'where':{'UserId':_0x22461d['id'],'type':_0x9329('0x1c'),'ChanSpyId':null}})[_0x9329('0x28')](function(){var _0x9bcf8=getUserApplications(_0x22461d,_0x22461d[_0x9329('0x3a')]);if(_0x22461d['internal']!=_0x22461d[_0x9329('0x23')]){_0x9bcf8=_0x9bcf8[_0x9329('0x29')](getUserApplications(_0x22461d,_0x22461d[_0x9329('0x23')]));}return _0x9b2c97[_0x9329('0x3d')][_0x9329('0x3e')](_0x9bcf8);});}})[_0x9329('0x28')](function(){_0x5e3703();})[_0x9329('0x39')](function(_0x294306){_0x5e3703(_0x294306);});},'afterDestroy':function(_0x4344e5){return _0x9b2c97[_0x9329('0x3d')]['destroy']({'where':{'UserId':_0x4344e5['id'],'type':_0x9329('0x1c')}});}},'instanceMethods':{'authenticate':function(_0x7f516e,_0x162afb){if(!_0x162afb){return this['password']===this['encryptPassword'](_0x7f516e);}var _0x78de9f=this;this[_0x9329('0x40')](_0x7f516e,function(_0x3ddb5f,_0x4b72d4){if(_0x3ddb5f){_0x162afb(_0x3ddb5f);}if(_0x78de9f[_0x9329('0x14')]===_0x4b72d4){_0x162afb(null,!![]);}else{_0x162afb(null,![]);}});},'makeSalt':function(_0x4f3c20,_0x28ee26){var _0x1a1625=0x10;if(typeof arguments[0x0]===_0x9329('0x41')){_0x28ee26=arguments[0x0];_0x4f3c20=_0x1a1625;}else if(typeof arguments[0x1]===_0x9329('0x41')){_0x28ee26=arguments[0x1];}else{throw new Error(_0x9329('0x42'));}if(!_0x4f3c20){_0x4f3c20=_0x1a1625;}return crypto[_0x9329('0x43')](_0x4f3c20,function(_0x48c833,_0xbebcd7){if(_0x48c833){_0x28ee26(_0x48c833);}return _0x28ee26(null,_0xbebcd7[_0x9329('0x44')](_0x9329('0x45')));});},'encryptPassword':function(_0x4f5517,_0x342c7a){if(!_0x4f5517||!this[_0x9329('0x46')]){return _0x342c7a?_0x342c7a(null):null;}var _0x17cd7a=0x2710;var _0x422be0=0x40;var _0x1b72c6=new Buffer(this[_0x9329('0x46')],'base64');if(!_0x342c7a){return crypto['pbkdf2Sync'](_0x4f5517,_0x1b72c6,_0x17cd7a,_0x422be0,_0x9329('0x47'))[_0x9329('0x44')](_0x9329('0x45'));}return crypto['pbkdf2'](_0x4f5517,_0x1b72c6,_0x17cd7a,_0x422be0,'sha1',function(_0x4c2b5b,_0x515427){if(_0x4c2b5b){_0x342c7a(_0x4c2b5b);}return _0x342c7a(null,_0x515427[_0x9329('0x44')](_0x9329('0x45')));});},'updatePassword':function(_0x352b6a){if(!this[_0x9329('0x14')]){return _0x352b6a(null);}if(!validatePresenceOf(this[_0x9329('0x14')])&&authTypes['indexOf'](this[_0x9329('0x48')])===-0x1){_0x352b6a(new Error(_0x9329('0x49')));}var _0xabccbf=this;this[_0x9329('0x4a')](function(_0x3772d8,_0x3ac3ba){if(_0x3772d8){return _0x352b6a(_0x3772d8);}_0xabccbf[_0x9329('0x46')]=_0x3ac3ba;_0xabccbf[_0x9329('0x40')](_0xabccbf[_0x9329('0x14')],function(_0x57ed14,_0x54086d){if(_0x57ed14){_0x352b6a(_0x57ed14);}_0xabccbf[_0x9329('0x14')]=_0x54086d;_0x352b6a(null);});});},'updateMd5Password':function(){this['md5secret']=md5(this['name']+_0x9329('0x4b')+this['password']);return this[_0x9329('0x4c')];}}});};