b9082fbcb041e1e830e57e306d9d718ddecfbb2d
[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 _0x7f8b=['VoiceExtension','bulkCreate','resolve','changed','context','destroy','encryptPassword','function','Missing\x20Callback','randomBytes','base64','salt','pbkdf2Sync','toString','pbkdf2','sha1','indexOf','provider','makeSalt','md5secret',':asterisk:','crypto','util','md5','lodash','./user.attributes','google','length','format','%s%s','prefix','push','merge','Set','CDR(type)=%s','chanspy','record','MixMonitor','auth','Authenticate','password','ChanSpy','SIP/%s,%s','options','join','StopMixMonitor','wav','WAV','from-sip','system','CDR(type)=internal','extensionMonitor','includes','_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}','Dial','name','SIP/%s,,tTxX','priority','findAll','then','internal','concat','catch','exports','User','users','utf8','utf8_bin','updateMd5Password','updatePassword'];(function(_0xe8c2d1,_0x5c5af8){var _0x1e3037=function(_0x5dc983){while(--_0x5dc983){_0xe8c2d1['push'](_0xe8c2d1['shift']());}};_0x1e3037(++_0x5c5af8);}(_0x7f8b,0x12d));var _0xb7f8=function(_0x174ef5,_0x256e8e){_0x174ef5=_0x174ef5-0x0;var _0x1cc379=_0x7f8b[_0x174ef5];return _0x1cc379;};'use strict';var BPromise=require('bluebird');var crypto=require(_0xb7f8('0x0'));var util=require(_0xb7f8('0x1'));var md5=require(_0xb7f8('0x2'));var _=require(_0xb7f8('0x3'));var attributes=require(_0xb7f8('0x4'));var authTypes=[_0xb7f8('0x5')];var validatePresenceOf=function(_0x2382ee){return _0x2382ee&&_0x2382ee[_0xb7f8('0x6')];};var getChanSpyApplications=function(_0x3f7696,_0x1e2f64,_0x3c1ace){var _0x109dd9={'context':_0x3f7696['context']||'from-sip','type':'system','isApp':![],'UserId':_0x3f7696['id']};var _0x5935b1=[];for(var _0x679593=0x0,_0x147f23=0x1;_0x679593<_0x3c1ace[_0xb7f8('0x6')];_0x679593++,_0x147f23=0x1){var _0x46ce9a={'exten':util[_0xb7f8('0x7')](_0xb7f8('0x8'),_0x3c1ace[_0x679593][_0xb7f8('0x9')],_0x1e2f64),'ChanSpyId':_0x3c1ace[_0x679593]['id']};_0x5935b1[_0xb7f8('0xa')](_[_0xb7f8('0xb')]({'app':_0xb7f8('0xc'),'appdata':util['format'](_0xb7f8('0xd'),_0xb7f8('0xe')),'priority':_0x147f23++},_0x109dd9,_0x46ce9a));if(_0x3c1ace[_0x679593][_0xb7f8('0xf')]){_0x5935b1['push'](_[_0xb7f8('0xb')]({'app':_0xb7f8('0x10'),'appdata':util[_0xb7f8('0x7')]('${UNIQUEID}.%s,a',_0x3c1ace[_0x679593]['recordingFormat']),'priority':_0x147f23++},_0x109dd9,_0x46ce9a));}if(_0x3c1ace[_0x679593][_0xb7f8('0x11')]){_0x5935b1[_0xb7f8('0xa')](_['merge']({'app':_0xb7f8('0x12'),'appdata':_0x3c1ace[_0x679593][_0xb7f8('0x13')],'priority':_0x147f23++},_0x109dd9,_0x46ce9a));}_0x5935b1[_0xb7f8('0xa')](_[_0xb7f8('0xb')]({'app':_0xb7f8('0x14'),'appdata':util['format'](_0xb7f8('0x15'),_0x3f7696['name'],_0x3c1ace[_0x679593]['options']?_0x3c1ace[_0x679593][_0xb7f8('0x16')][_0xb7f8('0x17')](''):''),'priority':_0x147f23++},_0x109dd9,_0x46ce9a));if(_0x3c1ace[_0x679593][_0xb7f8('0xf')]){_0x5935b1[_0xb7f8('0xa')](_['merge']({'app':_0xb7f8('0x18'),'priority':_0x147f23++},_0x109dd9,_0x46ce9a));}}return _0x5935b1;};var getUserApplications=function(_0x5620bc,_0x3c778b){var _0x28cbbf=[_0xb7f8('0x19'),_0xb7f8('0x1a'),'gsm'];var _0x829a5a={'context':_0x5620bc['context']||_0xb7f8('0x1b'),'exten':_0x3c778b,'type':_0xb7f8('0x1c'),'isApp':![],'UserId':_0x5620bc['id']};var _0x15a2ea=[{'app':_0xb7f8('0xc'),'appdata':_0xb7f8('0x1d')}];if(_0x5620bc[_0xb7f8('0x1e')]&&_[_0xb7f8('0x1f')](_0x28cbbf,_0x5620bc[_0xb7f8('0x1e')])){_0x15a2ea[_0xb7f8('0xa')]({'app':'Set','appdata':_0xb7f8('0x20')});_0x15a2ea[_0xb7f8('0xa')]({'app':_0xb7f8('0xc'),'appdata':util[_0xb7f8('0x7')]('_XCALLY_MIXMONITOR_FORMAT=%s',_0x5620bc['extensionMonitor'])});_0x15a2ea[_0xb7f8('0xa')]({'app':_0xb7f8('0x21'),'appdata':util[_0xb7f8('0x7')]('SIP/%s,,tTxXU(xcally-mixmonitor-context)',_0x5620bc[_0xb7f8('0x22')])});}else{_0x15a2ea[_0xb7f8('0xa')]({'app':_0xb7f8('0x21'),'appdata':util[_0xb7f8('0x7')](_0xb7f8('0x23'),_0x5620bc[_0xb7f8('0x22')])});}_0x15a2ea[_0xb7f8('0xa')]({'app':'Hangup'});for(var _0x564de6=0x0;_0x564de6<_0x15a2ea[_0xb7f8('0x6')];_0x564de6++){_0x15a2ea[_0x564de6][_0xb7f8('0x24')]=_0x564de6+0x1;_0x15a2ea[_0x564de6]=_['defaults'](_0x15a2ea[_0x564de6],_0x829a5a);}return _0x15a2ea;};var getChanSpyPromise=function(_0x58ac6b,_0x3450cb){return new BPromise(function(_0x3175f5,_0x55ab5e){return _0x58ac6b['VoiceChanSpy'][_0xb7f8('0x25')]()[_0xb7f8('0x26')](function(_0x1eb0d8){if(_0x1eb0d8){var _0x183fb8=getChanSpyApplications(_0x3450cb,_0x3450cb['internal'],_0x1eb0d8);if(_0x3450cb[_0xb7f8('0x27')]!=_0x3450cb[_0xb7f8('0x22')]){_0x183fb8=_0x183fb8[_0xb7f8('0x28')](getChanSpyApplications(_0x3450cb,_0x3450cb[_0xb7f8('0x22')],_0x1eb0d8));}return _0x3175f5(_0x183fb8);}return _0x3175f5([]);})[_0xb7f8('0x29')](function(_0x30e5cd){_0x55ab5e(_0x30e5cd);});});};module[_0xb7f8('0x2a')]=function(_0x4ab60c,_0x1a53c7){var _0x19a873=_0x4ab60c['models'];return _0x4ab60c['define'](_0xb7f8('0x2b'),attributes,{'tableName':_0xb7f8('0x2c'),'charset':_0xb7f8('0x2d'),'collate':_0xb7f8('0x2e'),'hooks':{'beforeCreate':function(_0x2ca28b,_0x31269c,_0x226179){_0x2ca28b[_0xb7f8('0x2f')]();_0x2ca28b[_0xb7f8('0x30')](_0x226179);},'beforeUpdate':function(_0x27c321,_0x905e25,_0xbade9){if(_0x27c321['changed'](_0xb7f8('0x13'))){_0x27c321['updateMd5Password']();return _0x27c321[_0xb7f8('0x30')](_0xbade9);}_0xbade9();},'afterCreate':function(_0x320801,_0x39deba,_0x56262f){var _0x4360c0=getUserApplications(_0x320801,_0x320801[_0xb7f8('0x27')]);if(_0x320801[_0xb7f8('0x27')]!=_0x320801[_0xb7f8('0x22')]){_0x4360c0=_0x4360c0['concat'](getUserApplications(_0x320801,_0x320801[_0xb7f8('0x22')]));}return _0x19a873[_0xb7f8('0x31')][_0xb7f8('0x32')](_0x4360c0)[_0xb7f8('0x26')](function(){if(_0x320801['chanspy']){return getChanSpyPromise(_0x19a873,_0x320801);}})[_0xb7f8('0x26')](function(_0x105556){if(_0x105556&&_0x105556['length']){return _0x19a873[_0xb7f8('0x31')][_0xb7f8('0x32')](_0x105556);}})['then'](function(){_0x56262f();})[_0xb7f8('0x29')](function(_0x5c9344){_0x56262f(_0x5c9344);});},'afterUpdate':function(_0x5cafb4,_0x188131,_0x55c21e){return BPromise[_0xb7f8('0x33')]()[_0xb7f8('0x26')](function(){if(_0x5cafb4[_0xb7f8('0x34')](_0xb7f8('0xe'))||_0x5cafb4['changed'](_0xb7f8('0x35'))){return _0x19a873[_0xb7f8('0x31')][_0xb7f8('0x36')]({'where':{'UserId':_0x5cafb4['id'],'type':'system','ChanSpyId':{'$ne':null}}})[_0xb7f8('0x26')](function(){if(_0x5cafb4[_0xb7f8('0xe')]){return getChanSpyPromise(_0x19a873,_0x5cafb4)[_0xb7f8('0x26')](function(_0x304caa){if(_0x304caa&&_0x304caa[_0xb7f8('0x6')]){return _0x19a873[_0xb7f8('0x31')][_0xb7f8('0x32')](_0x304caa);}});}});}})['then'](function(){if(_0x5cafb4[_0xb7f8('0x34')](_0xb7f8('0x1e'))||_0x5cafb4[_0xb7f8('0x34')](_0xb7f8('0x35'))){return _0x19a873['VoiceExtension'][_0xb7f8('0x36')]({'where':{'UserId':_0x5cafb4['id'],'type':'system','ChanSpyId':null}})[_0xb7f8('0x26')](function(){var _0x30e947=getUserApplications(_0x5cafb4,_0x5cafb4[_0xb7f8('0x27')]);if(_0x5cafb4[_0xb7f8('0x27')]!=_0x5cafb4[_0xb7f8('0x22')]){_0x30e947=_0x30e947[_0xb7f8('0x28')](getUserApplications(_0x5cafb4,_0x5cafb4['name']));}return _0x19a873[_0xb7f8('0x31')][_0xb7f8('0x32')](_0x30e947);});}})[_0xb7f8('0x26')](function(){_0x55c21e();})['catch'](function(_0x395bdf){_0x55c21e(_0x395bdf);});},'afterDestroy':function(_0x3ed93a,_0x1f738){return _0x19a873[_0xb7f8('0x31')][_0xb7f8('0x36')]({'where':{'UserId':_0x3ed93a['id'],'type':_0xb7f8('0x1c')}});}},'instanceMethods':{'authenticate':function(_0x4413d0,_0x548290){if(!_0x548290){return this[_0xb7f8('0x13')]===this[_0xb7f8('0x37')](_0x4413d0);}var _0x251fa7=this;this[_0xb7f8('0x37')](_0x4413d0,function(_0x1c86a2,_0x2b0f5b){if(_0x1c86a2){_0x548290(_0x1c86a2);}if(_0x251fa7[_0xb7f8('0x13')]===_0x2b0f5b){_0x548290(null,!![]);}else{_0x548290(null,![]);}});},'makeSalt':function(_0x371f0d,_0xd847dd){var _0x41d63e=0x10;if(typeof arguments[0x0]===_0xb7f8('0x38')){_0xd847dd=arguments[0x0];_0x371f0d=_0x41d63e;}else if(typeof arguments[0x1]==='function'){_0xd847dd=arguments[0x1];}else{throw new Error(_0xb7f8('0x39'));}if(!_0x371f0d){_0x371f0d=_0x41d63e;}return crypto[_0xb7f8('0x3a')](_0x371f0d,function(_0x48ea3b,_0x3fa543){if(_0x48ea3b){_0xd847dd(_0x48ea3b);}return _0xd847dd(null,_0x3fa543['toString'](_0xb7f8('0x3b')));});},'encryptPassword':function(_0x265873,_0x5cf26a){if(!_0x265873||!this[_0xb7f8('0x3c')]){return _0x5cf26a?_0x5cf26a(null):null;}var _0x3effcd=0x2710;var _0x56929d=0x40;var _0x5519ee=new Buffer(this[_0xb7f8('0x3c')],_0xb7f8('0x3b'));if(!_0x5cf26a){return crypto[_0xb7f8('0x3d')](_0x265873,_0x5519ee,_0x3effcd,_0x56929d,'sha1')[_0xb7f8('0x3e')]('base64');}return crypto[_0xb7f8('0x3f')](_0x265873,_0x5519ee,_0x3effcd,_0x56929d,_0xb7f8('0x40'),function(_0x4320f8,_0x54e52e){if(_0x4320f8){_0x5cf26a(_0x4320f8);}return _0x5cf26a(null,_0x54e52e[_0xb7f8('0x3e')](_0xb7f8('0x3b')));});},'updatePassword':function(_0x3021eb){if(!this[_0xb7f8('0x13')]){return _0x3021eb(null);}if(!validatePresenceOf(this['password'])&&authTypes[_0xb7f8('0x41')](this[_0xb7f8('0x42')])===-0x1){_0x3021eb(new Error('Invalid\x20password'));}var _0x92c3ca=this;this[_0xb7f8('0x43')](function(_0x40d5ea,_0x1e6760){if(_0x40d5ea){return _0x3021eb(_0x40d5ea);}_0x92c3ca[_0xb7f8('0x3c')]=_0x1e6760;_0x92c3ca[_0xb7f8('0x37')](_0x92c3ca[_0xb7f8('0x13')],function(_0x5c9097,_0x4751c0){if(_0x5c9097){_0x3021eb(_0x5c9097);}_0x92c3ca[_0xb7f8('0x13')]=_0x4751c0;_0x3021eb(null);});});},'updateMd5Password':function(){this[_0xb7f8('0x44')]=md5(this[_0xb7f8('0x22')]+_0xb7f8('0x45')+this['password']);return this[_0xb7f8('0x44')];}}});};