c324b3a3c02695f794e9538f9be51c29d70939b5
[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 _0x90fa=['gsm','Set','CDR(type)=internal','extensionMonitor','includes','_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}','Dial','SIP/%s,,tTxX','Hangup','priority','defaults','findAll','then','internal','concat','exports','models','define','User','users','updateMd5Password','updatePassword','changed','bulkCreate','VoiceExtension','destroy','catch','encryptPassword','function','Missing\x20Callback','randomBytes','base64','salt','sha1','toString','indexOf','provider','Invalid\x20password','md5secret',':asterisk:','bluebird','util','lodash','./user.attributes','google','length','context','from-sip','system','format','%s%s','push','CDR(type)=%s','chanspy','merge','MixMonitor','${UNIQUEID}.%s,a','auth','Authenticate','password','ChanSpy','SIP/%s,%s','name','options','join','record','StopMixMonitor','wav','WAV'];(function(_0x541260,_0x4c7f2e){var _0x1dd2b5=function(_0x4140de){while(--_0x4140de){_0x541260['push'](_0x541260['shift']());}};_0x1dd2b5(++_0x4c7f2e);}(_0x90fa,0xb2));var _0xa90f=function(_0xb37191,_0x3b207f){_0xb37191=_0xb37191-0x0;var _0x5e7349=_0x90fa[_0xb37191];return _0x5e7349;};'use strict';var BPromise=require(_0xa90f('0x0'));var crypto=require('crypto');var util=require(_0xa90f('0x1'));var md5=require('md5');var _=require(_0xa90f('0x2'));var attributes=require(_0xa90f('0x3'));var authTypes=[_0xa90f('0x4')];var validatePresenceOf=function(_0x57b951){return _0x57b951&&_0x57b951[_0xa90f('0x5')];};var getChanSpyApplications=function(_0x4ccf01,_0x4a8da0,_0x2782fb){var _0x338e51={'context':_0x4ccf01[_0xa90f('0x6')]||_0xa90f('0x7'),'type':_0xa90f('0x8'),'isApp':![],'UserId':_0x4ccf01['id']};var _0x22bbc0=[];for(var _0xd30983=0x0,_0x1b1bf3=0x1;_0xd30983<_0x2782fb[_0xa90f('0x5')];_0xd30983++,_0x1b1bf3=0x1){var _0x49b8c7={'exten':util[_0xa90f('0x9')](_0xa90f('0xa'),_0x2782fb[_0xd30983]['prefix'],_0x4a8da0),'ChanSpyId':_0x2782fb[_0xd30983]['id']};_0x22bbc0[_0xa90f('0xb')](_['merge']({'app':'Set','appdata':util['format'](_0xa90f('0xc'),_0xa90f('0xd')),'priority':_0x1b1bf3++},_0x338e51,_0x49b8c7));if(_0x2782fb[_0xd30983]['record']){_0x22bbc0['push'](_[_0xa90f('0xe')]({'app':_0xa90f('0xf'),'appdata':util[_0xa90f('0x9')](_0xa90f('0x10'),_0x2782fb[_0xd30983]['recordingFormat']),'priority':_0x1b1bf3++},_0x338e51,_0x49b8c7));}if(_0x2782fb[_0xd30983][_0xa90f('0x11')]){_0x22bbc0[_0xa90f('0xb')](_[_0xa90f('0xe')]({'app':_0xa90f('0x12'),'appdata':_0x2782fb[_0xd30983][_0xa90f('0x13')],'priority':_0x1b1bf3++},_0x338e51,_0x49b8c7));}_0x22bbc0[_0xa90f('0xb')](_[_0xa90f('0xe')]({'app':_0xa90f('0x14'),'appdata':util[_0xa90f('0x9')](_0xa90f('0x15'),_0x4ccf01[_0xa90f('0x16')],_0x2782fb[_0xd30983][_0xa90f('0x17')]?_0x2782fb[_0xd30983][_0xa90f('0x17')][_0xa90f('0x18')](''):''),'priority':_0x1b1bf3++},_0x338e51,_0x49b8c7));if(_0x2782fb[_0xd30983][_0xa90f('0x19')]){_0x22bbc0[_0xa90f('0xb')](_[_0xa90f('0xe')]({'app':_0xa90f('0x1a'),'priority':_0x1b1bf3++},_0x338e51,_0x49b8c7));}}return _0x22bbc0;};var getUserApplications=function(_0x3574f6,_0x1966d2){var _0x47f2a4=[_0xa90f('0x1b'),_0xa90f('0x1c'),_0xa90f('0x1d')];var _0x2c60c5={'context':_0x3574f6[_0xa90f('0x6')]||_0xa90f('0x7'),'exten':_0x1966d2,'type':_0xa90f('0x8'),'isApp':![],'UserId':_0x3574f6['id']};var _0x4f1902=[{'app':_0xa90f('0x1e'),'appdata':_0xa90f('0x1f')}];if(_0x3574f6[_0xa90f('0x20')]&&_[_0xa90f('0x21')](_0x47f2a4,_0x3574f6[_0xa90f('0x20')])){_0x4f1902[_0xa90f('0xb')]({'app':_0xa90f('0x1e'),'appdata':_0xa90f('0x22')});_0x4f1902['push']({'app':_0xa90f('0x1e'),'appdata':util['format']('_XCALLY_MIXMONITOR_FORMAT=%s',_0x3574f6[_0xa90f('0x20')])});_0x4f1902[_0xa90f('0xb')]({'app':'Dial','appdata':util[_0xa90f('0x9')]('SIP/%s,,tTxXU(xcally-mixmonitor-context)',_0x3574f6[_0xa90f('0x16')])});}else{_0x4f1902[_0xa90f('0xb')]({'app':_0xa90f('0x23'),'appdata':util['format'](_0xa90f('0x24'),_0x3574f6[_0xa90f('0x16')])});}_0x4f1902['push']({'app':_0xa90f('0x25')});for(var _0x1fd744=0x0;_0x1fd744<_0x4f1902[_0xa90f('0x5')];_0x1fd744++){_0x4f1902[_0x1fd744][_0xa90f('0x26')]=_0x1fd744+0x1;_0x4f1902[_0x1fd744]=_[_0xa90f('0x27')](_0x4f1902[_0x1fd744],_0x2c60c5);}return _0x4f1902;};var getChanSpyPromise=function(_0x26839f,_0xe1c516){return new BPromise(function(_0x325883,_0x35d7b7){return _0x26839f['VoiceChanSpy'][_0xa90f('0x28')]()[_0xa90f('0x29')](function(_0x55dbd2){if(_0x55dbd2){var _0xeef4bf=getChanSpyApplications(_0xe1c516,_0xe1c516[_0xa90f('0x2a')],_0x55dbd2);if(_0xe1c516['internal']!=_0xe1c516[_0xa90f('0x16')]){_0xeef4bf=_0xeef4bf[_0xa90f('0x2b')](getChanSpyApplications(_0xe1c516,_0xe1c516[_0xa90f('0x16')],_0x55dbd2));}return _0x325883(_0xeef4bf);}return _0x325883([]);})['catch'](function(_0x4a2a68){_0x35d7b7(_0x4a2a68);});});};module[_0xa90f('0x2c')]=function(_0x5b7516,_0x3f1dc3){var _0x3148cf=_0x5b7516[_0xa90f('0x2d')];return _0x5b7516[_0xa90f('0x2e')](_0xa90f('0x2f'),attributes,{'tableName':_0xa90f('0x30'),'charset':'utf8','collate':'utf8_bin','hooks':{'beforeCreate':function(_0x484a46,_0x46b57e,_0x4fbfd1){_0x484a46[_0xa90f('0x31')]();_0x484a46[_0xa90f('0x32')](_0x4fbfd1);},'beforeUpdate':function(_0x1904eb,_0x39a0dd,_0x206501){if(_0x1904eb[_0xa90f('0x33')](_0xa90f('0x13'))){_0x1904eb['updateMd5Password']();return _0x1904eb[_0xa90f('0x32')](_0x206501);}_0x206501();},'afterCreate':function(_0x4ce20e,_0x556bc0,_0x59a07a){var _0x3989a4=getUserApplications(_0x4ce20e,_0x4ce20e['internal']);if(_0x4ce20e[_0xa90f('0x2a')]!=_0x4ce20e[_0xa90f('0x16')]){_0x3989a4=_0x3989a4[_0xa90f('0x2b')](getUserApplications(_0x4ce20e,_0x4ce20e[_0xa90f('0x16')]));}return _0x3148cf['VoiceExtension'][_0xa90f('0x34')](_0x3989a4)[_0xa90f('0x29')](function(){if(_0x4ce20e[_0xa90f('0xd')]){return getChanSpyPromise(_0x3148cf,_0x4ce20e);}})[_0xa90f('0x29')](function(_0x39703a){if(_0x39703a&&_0x39703a[_0xa90f('0x5')]){return _0x3148cf[_0xa90f('0x35')]['bulkCreate'](_0x39703a);}})['then'](function(){_0x59a07a();})['catch'](function(_0x1fb4e9){_0x59a07a(_0x1fb4e9);});},'afterUpdate':function(_0x5df6c9,_0x2929bc,_0x1d152a){return BPromise['resolve']()[_0xa90f('0x29')](function(){if(_0x5df6c9[_0xa90f('0x33')](_0xa90f('0xd'))||_0x5df6c9['changed'](_0xa90f('0x6'))){return _0x3148cf['VoiceExtension'][_0xa90f('0x36')]({'where':{'UserId':_0x5df6c9['id'],'type':_0xa90f('0x8'),'ChanSpyId':{'$ne':null}}})[_0xa90f('0x29')](function(){if(_0x5df6c9[_0xa90f('0xd')]){return getChanSpyPromise(_0x3148cf,_0x5df6c9)[_0xa90f('0x29')](function(_0x5cc58f){if(_0x5cc58f&&_0x5cc58f[_0xa90f('0x5')]){return _0x3148cf['VoiceExtension'][_0xa90f('0x34')](_0x5cc58f);}});}});}})[_0xa90f('0x29')](function(){if(_0x5df6c9[_0xa90f('0x33')](_0xa90f('0x20'))||_0x5df6c9[_0xa90f('0x33')]('context')){return _0x3148cf[_0xa90f('0x35')][_0xa90f('0x36')]({'where':{'UserId':_0x5df6c9['id'],'type':_0xa90f('0x8'),'ChanSpyId':null}})['then'](function(){var _0x146a9f=getUserApplications(_0x5df6c9,_0x5df6c9[_0xa90f('0x2a')]);if(_0x5df6c9[_0xa90f('0x2a')]!=_0x5df6c9[_0xa90f('0x16')]){_0x146a9f=_0x146a9f[_0xa90f('0x2b')](getUserApplications(_0x5df6c9,_0x5df6c9[_0xa90f('0x16')]));}return _0x3148cf[_0xa90f('0x35')][_0xa90f('0x34')](_0x146a9f);});}})['then'](function(){_0x1d152a();})[_0xa90f('0x37')](function(_0x5028c9){_0x1d152a(_0x5028c9);});},'afterDestroy':function(_0x283817,_0x5bbe22){return _0x3148cf[_0xa90f('0x35')][_0xa90f('0x36')]({'where':{'UserId':_0x283817['id'],'type':_0xa90f('0x8')}});}},'instanceMethods':{'authenticate':function(_0x270c8e,_0x2d1eea){if(!_0x2d1eea){return this['password']===this['encryptPassword'](_0x270c8e);}var _0xedb1a5=this;this[_0xa90f('0x38')](_0x270c8e,function(_0x34ba5e,_0x443fbb){if(_0x34ba5e){_0x2d1eea(_0x34ba5e);}if(_0xedb1a5[_0xa90f('0x13')]===_0x443fbb){_0x2d1eea(null,!![]);}else{_0x2d1eea(null,![]);}});},'makeSalt':function(_0x39ae33,_0x5d2b8d){var _0x1fe564=0x10;if(typeof arguments[0x0]===_0xa90f('0x39')){_0x5d2b8d=arguments[0x0];_0x39ae33=_0x1fe564;}else if(typeof arguments[0x1]==='function'){_0x5d2b8d=arguments[0x1];}else{throw new Error(_0xa90f('0x3a'));}if(!_0x39ae33){_0x39ae33=_0x1fe564;}return crypto[_0xa90f('0x3b')](_0x39ae33,function(_0x323379,_0x478deb){if(_0x323379){_0x5d2b8d(_0x323379);}return _0x5d2b8d(null,_0x478deb['toString'](_0xa90f('0x3c')));});},'encryptPassword':function(_0x90baec,_0xb1cc2){if(!_0x90baec||!this['salt']){return _0xb1cc2?_0xb1cc2(null):null;}var _0xc4ecec=0x2710;var _0x36c893=0x40;var _0x2dd986=new Buffer(this[_0xa90f('0x3d')],_0xa90f('0x3c'));if(!_0xb1cc2){return crypto['pbkdf2Sync'](_0x90baec,_0x2dd986,_0xc4ecec,_0x36c893,_0xa90f('0x3e'))[_0xa90f('0x3f')](_0xa90f('0x3c'));}return crypto['pbkdf2'](_0x90baec,_0x2dd986,_0xc4ecec,_0x36c893,_0xa90f('0x3e'),function(_0x306fcc,_0x36b945){if(_0x306fcc){_0xb1cc2(_0x306fcc);}return _0xb1cc2(null,_0x36b945['toString'](_0xa90f('0x3c')));});},'updatePassword':function(_0xa5c92){if(!this['password']){return _0xa5c92(null);}if(!validatePresenceOf(this[_0xa90f('0x13')])&&authTypes[_0xa90f('0x40')](this[_0xa90f('0x41')])===-0x1){_0xa5c92(new Error(_0xa90f('0x42')));}var _0x190672=this;this['makeSalt'](function(_0x372da4,_0x17f051){if(_0x372da4){return _0xa5c92(_0x372da4);}_0x190672['salt']=_0x17f051;_0x190672[_0xa90f('0x38')](_0x190672[_0xa90f('0x13')],function(_0x48ab4f,_0x3731c1){if(_0x48ab4f){_0xa5c92(_0x48ab4f);}_0x190672[_0xa90f('0x13')]=_0x3731c1;_0xa5c92(null);});});},'updateMd5Password':function(){this[_0xa90f('0x43')]=md5(this[_0xa90f('0x16')]+_0xa90f('0x44')+this[_0xa90f('0x13')]);return this['md5secret'];}}});};