Built motion from commit (unavailable).|2.5.14
[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 _0x0c60=['record','MixMonitor','recordingFormat','auth','Authenticate','password','ChanSpy','name','options','join','StopMixMonitor','wav','WAV','gsm','CDR(type)=internal','includes','extensionMonitor','Dial','SIP/%s,,tTxX','priority','findAll','then','internal','concat','models','define','User','utf8','utf8_bin','updateMd5Password','updatePassword','changed','VoiceExtension','bulkCreate','catch','destroy','encryptPassword','function','Missing\x20Callback','randomBytes','toString','base64','salt','pbkdf2Sync','sha1','pbkdf2','indexOf','provider','makeSalt','md5secret',':asterisk:','bluebird','crypto','md5','lodash','google','length','context','from-sip','system','format','prefix','push','merge','Set','CDR(type)=%s','chanspy'];(function(_0x139a3c,_0x4fc883){var _0x2b375b=function(_0x525dbf){while(--_0x525dbf){_0x139a3c['push'](_0x139a3c['shift']());}};_0x2b375b(++_0x4fc883);}(_0x0c60,0x182));var _0x00c6=function(_0x4a47cd,_0x58b202){_0x4a47cd=_0x4a47cd-0x0;var _0x48d5b4=_0x0c60[_0x4a47cd];return _0x48d5b4;};'use strict';var BPromise=require(_0x00c6('0x0'));var crypto=require(_0x00c6('0x1'));var util=require('util');var md5=require(_0x00c6('0x2'));var _=require(_0x00c6('0x3'));var attributes=require('./user.attributes');var authTypes=[_0x00c6('0x4')];var validatePresenceOf=function(_0x2f5977){return _0x2f5977&&_0x2f5977[_0x00c6('0x5')];};var getChanSpyApplications=function(_0x574b44,_0x38bbd4,_0x4f09f3){var _0x202a62={'context':_0x574b44[_0x00c6('0x6')]||_0x00c6('0x7'),'type':_0x00c6('0x8'),'isApp':![],'UserId':_0x574b44['id']};var _0x3de5a0=[];for(var _0xa43338=0x0,_0x5efb46=0x1;_0xa43338<_0x4f09f3[_0x00c6('0x5')];_0xa43338++,_0x5efb46=0x1){var _0x10ab2b={'exten':util[_0x00c6('0x9')]('%s%s',_0x4f09f3[_0xa43338][_0x00c6('0xa')],_0x38bbd4),'ChanSpyId':_0x4f09f3[_0xa43338]['id']};_0x3de5a0[_0x00c6('0xb')](_[_0x00c6('0xc')]({'app':_0x00c6('0xd'),'appdata':util[_0x00c6('0x9')](_0x00c6('0xe'),_0x00c6('0xf')),'priority':_0x5efb46++},_0x202a62,_0x10ab2b));if(_0x4f09f3[_0xa43338][_0x00c6('0x10')]){_0x3de5a0[_0x00c6('0xb')](_[_0x00c6('0xc')]({'app':_0x00c6('0x11'),'appdata':util[_0x00c6('0x9')]('${UNIQUEID}.%s,a',_0x4f09f3[_0xa43338][_0x00c6('0x12')]),'priority':_0x5efb46++},_0x202a62,_0x10ab2b));}if(_0x4f09f3[_0xa43338][_0x00c6('0x13')]){_0x3de5a0[_0x00c6('0xb')](_[_0x00c6('0xc')]({'app':_0x00c6('0x14'),'appdata':_0x4f09f3[_0xa43338][_0x00c6('0x15')],'priority':_0x5efb46++},_0x202a62,_0x10ab2b));}_0x3de5a0['push'](_[_0x00c6('0xc')]({'app':_0x00c6('0x16'),'appdata':util['format']('SIP/%s,%s',_0x574b44[_0x00c6('0x17')],_0x4f09f3[_0xa43338][_0x00c6('0x18')]?_0x4f09f3[_0xa43338]['options'][_0x00c6('0x19')](''):''),'priority':_0x5efb46++},_0x202a62,_0x10ab2b));if(_0x4f09f3[_0xa43338][_0x00c6('0x10')]){_0x3de5a0[_0x00c6('0xb')](_[_0x00c6('0xc')]({'app':_0x00c6('0x1a'),'priority':_0x5efb46++},_0x202a62,_0x10ab2b));}}return _0x3de5a0;};var getUserApplications=function(_0x4ac344,_0x3e77df){var _0x546039=[_0x00c6('0x1b'),_0x00c6('0x1c'),_0x00c6('0x1d')];var _0x3160f0={'context':_0x4ac344[_0x00c6('0x6')]||_0x00c6('0x7'),'exten':_0x3e77df,'type':'system','isApp':![],'UserId':_0x4ac344['id']};var _0x1e05b5=[{'app':_0x00c6('0xd'),'appdata':_0x00c6('0x1e')}];if(_0x4ac344['extensionMonitor']&&_[_0x00c6('0x1f')](_0x546039,_0x4ac344[_0x00c6('0x20')])){_0x1e05b5[_0x00c6('0xb')]({'app':'Set','appdata':'_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}'});_0x1e05b5[_0x00c6('0xb')]({'app':_0x00c6('0xd'),'appdata':util[_0x00c6('0x9')]('_XCALLY_MIXMONITOR_FORMAT=%s',_0x4ac344['extensionMonitor'])});_0x1e05b5[_0x00c6('0xb')]({'app':_0x00c6('0x21'),'appdata':util[_0x00c6('0x9')]('SIP/%s,,tTxXU(xcally-mixmonitor-context)',_0x4ac344[_0x00c6('0x17')])});}else{_0x1e05b5[_0x00c6('0xb')]({'app':_0x00c6('0x21'),'appdata':util[_0x00c6('0x9')](_0x00c6('0x22'),_0x4ac344[_0x00c6('0x17')])});}_0x1e05b5['push']({'app':'Hangup'});for(var _0x5a9306=0x0;_0x5a9306<_0x1e05b5[_0x00c6('0x5')];_0x5a9306++){_0x1e05b5[_0x5a9306][_0x00c6('0x23')]=_0x5a9306+0x1;_0x1e05b5[_0x5a9306]=_['defaults'](_0x1e05b5[_0x5a9306],_0x3160f0);}return _0x1e05b5;};var getChanSpyPromise=function(_0x2ad601,_0x177ae2){return new BPromise(function(_0x54ee70,_0x3a4bae){return _0x2ad601['VoiceChanSpy'][_0x00c6('0x24')]()[_0x00c6('0x25')](function(_0x221e14){if(_0x221e14){var _0x514c07=getChanSpyApplications(_0x177ae2,_0x177ae2[_0x00c6('0x26')],_0x221e14);if(_0x177ae2['internal']!=_0x177ae2['name']){_0x514c07=_0x514c07[_0x00c6('0x27')](getChanSpyApplications(_0x177ae2,_0x177ae2['name'],_0x221e14));}return _0x54ee70(_0x514c07);}return _0x54ee70([]);})['catch'](function(_0x7e5922){_0x3a4bae(_0x7e5922);});});};module['exports']=function(_0x37f5b4,_0x19d234){var _0x1d9edd=_0x37f5b4[_0x00c6('0x28')];return _0x37f5b4[_0x00c6('0x29')](_0x00c6('0x2a'),attributes,{'tableName':'users','charset':_0x00c6('0x2b'),'collate':_0x00c6('0x2c'),'hooks':{'beforeCreate':function(_0x3748aa,_0x5275fe,_0x492dc9){_0x3748aa[_0x00c6('0x2d')]();_0x3748aa[_0x00c6('0x2e')](_0x492dc9);},'beforeUpdate':function(_0x99e400,_0x9a9ba2,_0x4baaea){if(_0x99e400[_0x00c6('0x2f')](_0x00c6('0x15'))){_0x99e400[_0x00c6('0x2d')]();return _0x99e400[_0x00c6('0x2e')](_0x4baaea);}_0x4baaea();},'afterCreate':function(_0x343b4d,_0x58fdcc,_0x2ee390){var _0x595e2d=getUserApplications(_0x343b4d,_0x343b4d[_0x00c6('0x26')]);if(_0x343b4d['internal']!=_0x343b4d['name']){_0x595e2d=_0x595e2d[_0x00c6('0x27')](getUserApplications(_0x343b4d,_0x343b4d['name']));}return _0x1d9edd[_0x00c6('0x30')][_0x00c6('0x31')](_0x595e2d)[_0x00c6('0x25')](function(){if(_0x343b4d['chanspy']){return getChanSpyPromise(_0x1d9edd,_0x343b4d);}})['then'](function(_0x42b905){if(_0x42b905&&_0x42b905[_0x00c6('0x5')]){return _0x1d9edd['VoiceExtension'][_0x00c6('0x31')](_0x42b905);}})['then'](function(){_0x2ee390();})[_0x00c6('0x32')](function(_0x2412f5){_0x2ee390(_0x2412f5);});},'afterUpdate':function(_0x14fad2,_0x168750,_0x52e29f){return BPromise['resolve']()['then'](function(){if(_0x14fad2[_0x00c6('0x2f')](_0x00c6('0xf'))||_0x14fad2[_0x00c6('0x2f')](_0x00c6('0x6'))){return _0x1d9edd['VoiceExtension'][_0x00c6('0x33')]({'where':{'UserId':_0x14fad2['id'],'type':_0x00c6('0x8'),'ChanSpyId':{'$ne':null}}})['then'](function(){if(_0x14fad2['chanspy']){return getChanSpyPromise(_0x1d9edd,_0x14fad2)['then'](function(_0x8035a0){if(_0x8035a0&&_0x8035a0[_0x00c6('0x5')]){return _0x1d9edd['VoiceExtension'][_0x00c6('0x31')](_0x8035a0);}});}});}})[_0x00c6('0x25')](function(){if(_0x14fad2[_0x00c6('0x2f')]('extensionMonitor')||_0x14fad2['changed'](_0x00c6('0x6'))){return _0x1d9edd['VoiceExtension'][_0x00c6('0x33')]({'where':{'UserId':_0x14fad2['id'],'type':_0x00c6('0x8'),'ChanSpyId':null}})[_0x00c6('0x25')](function(){var _0x3a9707=getUserApplications(_0x14fad2,_0x14fad2[_0x00c6('0x26')]);if(_0x14fad2[_0x00c6('0x26')]!=_0x14fad2[_0x00c6('0x17')]){_0x3a9707=_0x3a9707['concat'](getUserApplications(_0x14fad2,_0x14fad2['name']));}return _0x1d9edd['VoiceExtension'][_0x00c6('0x31')](_0x3a9707);});}})[_0x00c6('0x25')](function(){_0x52e29f();})['catch'](function(_0x3f3825){_0x52e29f(_0x3f3825);});},'afterDestroy':function(_0x3e952f,_0x35b1a4){return _0x1d9edd[_0x00c6('0x30')][_0x00c6('0x33')]({'where':{'UserId':_0x3e952f['id'],'type':_0x00c6('0x8')}});}},'instanceMethods':{'authenticate':function(_0x9a86b5,_0x37081b){if(!_0x37081b){return this['password']===this['encryptPassword'](_0x9a86b5);}var _0x5ef5b8=this;this[_0x00c6('0x34')](_0x9a86b5,function(_0x4cd9bb,_0x4b9e39){if(_0x4cd9bb){_0x37081b(_0x4cd9bb);}if(_0x5ef5b8['password']===_0x4b9e39){_0x37081b(null,!![]);}else{_0x37081b(null,![]);}});},'makeSalt':function(_0x2be8d0,_0x42f37e){var _0x1352d1=0x10;if(typeof arguments[0x0]===_0x00c6('0x35')){_0x42f37e=arguments[0x0];_0x2be8d0=_0x1352d1;}else if(typeof arguments[0x1]==='function'){_0x42f37e=arguments[0x1];}else{throw new Error(_0x00c6('0x36'));}if(!_0x2be8d0){_0x2be8d0=_0x1352d1;}return crypto[_0x00c6('0x37')](_0x2be8d0,function(_0x4c285b,_0x225d54){if(_0x4c285b){_0x42f37e(_0x4c285b);}return _0x42f37e(null,_0x225d54[_0x00c6('0x38')](_0x00c6('0x39')));});},'encryptPassword':function(_0x366c51,_0x48d122){if(!_0x366c51||!this[_0x00c6('0x3a')]){return _0x48d122?_0x48d122(null):null;}var _0x1bc9cd=0x2710;var _0x15c960=0x40;var _0x4a7f7d=new Buffer(this[_0x00c6('0x3a')],'base64');if(!_0x48d122){return crypto[_0x00c6('0x3b')](_0x366c51,_0x4a7f7d,_0x1bc9cd,_0x15c960,_0x00c6('0x3c'))[_0x00c6('0x38')](_0x00c6('0x39'));}return crypto[_0x00c6('0x3d')](_0x366c51,_0x4a7f7d,_0x1bc9cd,_0x15c960,_0x00c6('0x3c'),function(_0x16011f,_0x225b25){if(_0x16011f){_0x48d122(_0x16011f);}return _0x48d122(null,_0x225b25['toString'](_0x00c6('0x39')));});},'updatePassword':function(_0x2db703){if(!this['password']){return _0x2db703(null);}if(!validatePresenceOf(this[_0x00c6('0x15')])&&authTypes[_0x00c6('0x3e')](this[_0x00c6('0x3f')])===-0x1){_0x2db703(new Error('Invalid\x20password'));}var _0x59de65=this;this[_0x00c6('0x40')](function(_0x24f535,_0x4bb5e9){if(_0x24f535){return _0x2db703(_0x24f535);}_0x59de65['salt']=_0x4bb5e9;_0x59de65['encryptPassword'](_0x59de65['password'],function(_0x506793,_0x6bee06){if(_0x506793){_0x2db703(_0x506793);}_0x59de65[_0x00c6('0x15')]=_0x6bee06;_0x2db703(null);});});},'updateMd5Password':function(){this[_0x00c6('0x41')]=md5(this[_0x00c6('0x17')]+_0x00c6('0x42')+this[_0x00c6('0x15')]);return this[_0x00c6('0x41')];}}});};