Built motion from commit 10af8726.|2.6.34
[motion2.git] / server / components / auth / service.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 _0xed54=['motion.token','/dashboards/general','send','retrieveApiKey','isNil','apiKeyIat','generateApiKey','Please\x20use\x20the\x20previous\x20API\x20access\x20key\x20to\x20generate\x20a\x20new\x20one','test','ValidationError','validatePasswordHistory','decryptString','toLowerCase','format','The\x20password\x20must\x20be\x20different\x20from\x20the\x20previous\x20%d\x20passwords.\x20Please\x20choose\x20another\x20one.','The\x20password\x20must\x20be\x20different\x20from\x20the\x20last\x20one.\x20Please\x20choose\x20another\x20one.','Sequelize','updatePasswordsHistory','length','splice','unshift','encryptString','join','promisify','sign','secret','options','verify','randomBytes','toString','floor','now','HS512','../../config/environment','../../config/license/hardware','../../config/license/util','../encryptor','lodash','jsonwebtoken','express-jwt','composable-middleware','basic-auth','crypto','util','secrets','session','role','fullname','name','internal','email','userpic','md5secret','voicePause','mailPause','faxPause','smsPause','pauseType','lastLoginAt','lastPauseAt','crudPermissions','allowmessenger','passwordResetAt','alias','phoneBarAutoAnswer','phoneBarDnd','phoneBarEnableRecording','phoneBarEnableDtmfTone','phoneBarExpires','phoneBarRemoteControl','phoneBarRemoteControlPort','hotdesk','interface','privacyEnabled','downloadVoiceRecordings','downloadOmnichannelInteractions','downloadAttachments','ignorePauseForPreviewCalls','selectRecallMeCampaign','chatAutoanswer','chatAutoanswerDelay','smsAutoanswer','openchannelAutoanswer','openchannelAutoanswerDelay','whatsappAutoanswer','whatsappAutoanswerDelay','messengerSoundNotification','isChatInteractionAuthorized','isAuthenticated','use','params','closed','status','disposition','unmanaged','json','Unmanaged.','catch','headers','authorization','User','find','then','authenticate','Wrong\x20credentials.','user','query','apikey','getUuid','sub','Setting','findOne','allowedLoginAttempts','blockDuration','isEqual','apiKeyNonce','nonce','API\x20access\x20key\x20is\x20not\x20valid\x20anymore','disabled','Invalid\x20API\x20access\x20key','blockedAt','add','minutes','Unknown\x20authorization\x20format','User\x20object\x20not\x20found.','update','Forbidden','isWebrtcLicence','getLicense','webrtc','isMiddleware','signToken','setTokenCookie','It\x20looks\x20like\x20you\x20aren\x27t\x20logged\x20in,\x20please\x20try\x20again.'];(function(_0x1a0e1b,_0x1ed3d6){var _0x541bf6=function(_0x52521a){while(--_0x52521a){_0x1a0e1b['push'](_0x1a0e1b['shift']());}};_0x541bf6(++_0x1ed3d6);}(_0xed54,0x12d));var _0x4ed5=function(_0x35fbe5,_0x59199f){_0x35fbe5=_0x35fbe5-0x0;var _0x2e259e=_0xed54[_0x35fbe5];return _0x2e259e;};'use strict';var db=require('../../mysqldb')['db'];var config=require(_0x4ed5('0x0'));var hardwareConf=require(_0x4ed5('0x1'));var licenseUtil=require(_0x4ed5('0x2'));var encryptor=require(_0x4ed5('0x3'));var _=require(_0x4ed5('0x4'));var jwt=require(_0x4ed5('0x5'));var expressJwt=require(_0x4ed5('0x6'));var compose=require(_0x4ed5('0x7'));var basicAuth=require(_0x4ed5('0x8'));var crypto=require(_0x4ed5('0x9'));var BPromise=require('bluebird');var util=require(_0x4ed5('0xa'));var moment=require('moment');var validateJwt=expressJwt({'secret':config[_0x4ed5('0xb')][_0x4ed5('0xc')]});var userAttributes=['id',_0x4ed5('0xd'),_0x4ed5('0xe'),_0x4ed5('0xf'),_0x4ed5('0x10'),_0x4ed5('0x11'),_0x4ed5('0x12'),'permissions',_0x4ed5('0x13'),_0x4ed5('0x14'),'chatPause',_0x4ed5('0x15'),_0x4ed5('0x16'),_0x4ed5('0x17'),'openchannelPause',_0x4ed5('0x18'),'showWebBar',_0x4ed5('0x19'),_0x4ed5('0x1a'),_0x4ed5('0x1b'),_0x4ed5('0x1c'),_0x4ed5('0x1d'),_0x4ed5('0x1e'),_0x4ed5('0x1f'),'phoneBarAutoAnswerDelay',_0x4ed5('0x20'),_0x4ed5('0x21'),_0x4ed5('0x22'),'phoneBarEnableSettings',_0x4ed5('0x23'),'phoneBarPrefixRequired',_0x4ed5('0x24'),_0x4ed5('0x25'),_0x4ed5('0x26'),_0x4ed5('0x27'),'userProfileId',_0x4ed5('0x28'),'settingsEnabled','wssPort',_0x4ed5('0x29'),_0x4ed5('0x2a'),_0x4ed5('0x2b'),_0x4ed5('0x2c'),_0x4ed5('0x2d'),_0x4ed5('0x2e'),_0x4ed5('0x2f'),'emailAutoanswer','emailAutoanswerDelay',_0x4ed5('0x30'),'smsAutoanswerDelay',_0x4ed5('0x31'),_0x4ed5('0x32'),'faxAutoanswer','faxAutoanswerDelay',_0x4ed5('0x33'),_0x4ed5('0x34'),_0x4ed5('0x35')];exports[_0x4ed5('0x36')]=function(){return this[_0x4ed5('0x37')](!![])[_0x4ed5('0x38')](function(_0x48cee0,_0x3c5c41,_0x39fff0){if(_0x48cee0['user']){_0x39fff0();}else{return db['ChatInteraction']['findOne']({'where':{'id':_0x48cee0[_0x4ed5('0x39')]['id']},'attributes':['id',_0x4ed5('0x3a'),'disposition'],'raw':!![]})['then'](function(_0x25998a){if(_0x25998a&&_0x25998a['closed']&&!_0x48cee0['query']['forceDownload']){return _0x3c5c41[_0x4ed5('0x3b')](_0x25998a[_0x4ed5('0x3c')]===_0x4ed5('0x3d')?0x195:0x193)[_0x4ed5('0x3e')]({'message':_0x25998a[_0x4ed5('0x3c')]===_0x4ed5('0x3d')?_0x4ed5('0x3f'):'Forbidden.'});}else{_0x39fff0();}})[_0x4ed5('0x40')](function(_0x210e6c){_0x39fff0(_0x210e6c);});}});};exports['isAuthenticated']=function isAuthenticated(_0x34aa17){return compose()[_0x4ed5('0x38')](function(_0x14d7c2,_0x44a696,_0x3b06be){var _0x556078;if(_0x14d7c2[_0x4ed5('0x41')][_0x4ed5('0x42')]){if(_['startsWith'](_0x14d7c2['headers'][_0x4ed5('0x42')],'Basic')){var _0x5ea39b=basicAuth(_0x14d7c2);db[_0x4ed5('0x43')][_0x4ed5('0x44')]({'where':{'name':_0x5ea39b[_0x4ed5('0xf')]}})[_0x4ed5('0x45')](function(_0xaf540c){if(!_0xaf540c||!_0xaf540c[_0x4ed5('0x46')](_0x5ea39b['pass'])){return _0x44a696['status'](0x191)[_0x4ed5('0x3e')]({'message':_0x4ed5('0x47')});}_0x14d7c2[_0x4ed5('0x48')]={'id':_0xaf540c['id']};_0x3b06be();})[_0x4ed5('0x40')](function(_0x2a3493){_0x3b06be(_0x2a3493);});}else if(_['startsWith'](_0x14d7c2[_0x4ed5('0x41')][_0x4ed5('0x42')],'Bearer')){validateJwt(_0x14d7c2,_0x44a696,_0x3b06be);}else{if(_0x34aa17){_0x3b06be();}else{return _0x44a696['status'](0x193)[_0x4ed5('0x3e')]({'message':'Unknown\x20authorization\x20format'});}}}else if(_0x14d7c2[_0x4ed5('0x49')][_0x4ed5('0x4a')]){try{var _0x244ddc={'audience':hardwareConf[_0x4ed5('0x4b')](),'issuer':hardwareConf[_0x4ed5('0x4b')]()};verifyJwt(_0x14d7c2[_0x4ed5('0x49')][_0x4ed5('0x4a')],_0x244ddc)[_0x4ed5('0x45')](function(_0x247257){return db[_0x4ed5('0x43')][_0x4ed5('0x44')]({'where':{'id':_0x247257[_0x4ed5('0x4c')]}})['then'](function(_0x4c4f15){_0x556078=_0x4c4f15;return db[_0x4ed5('0x4d')][_0x4ed5('0x4e')]({'where':{'id':0x1},'attributes':[_0x4ed5('0x4f'),_0x4ed5('0x50')],'raw':!![]});})[_0x4ed5('0x45')](function(_0x29e152){if(!_0x556078||!_[_0x4ed5('0x51')](_0x556078[_0x4ed5('0x52')],_0x247257[_0x4ed5('0x53')])){return _0x44a696['status'](0x191)['json']({'message':_0x4ed5('0x54')});}if(_0x556078[_0x4ed5('0x55')]){return _0x44a696[_0x4ed5('0x3b')](0x191)[_0x4ed5('0x3e')]({'message':_0x4ed5('0x56')});}if(_0x556078['blocked']){if(_0x29e152['blockDuration']>0x0){if(moment(_0x556078[_0x4ed5('0x57')])[_0x4ed5('0x58')](_0x29e152[_0x4ed5('0x50')],_0x4ed5('0x59'))>moment()){return _0x44a696[_0x4ed5('0x3b')](0x191)[_0x4ed5('0x3e')]({'message':_0x4ed5('0x56')});}}else{return _0x44a696[_0x4ed5('0x3b')](0x191)[_0x4ed5('0x3e')]({'message':_0x4ed5('0x56')});}}_0x14d7c2['user']={'id':_0x556078['id']};_0x3b06be();});})[_0x4ed5('0x40')](function(){return _0x44a696['status'](0x191)['json']({'message':_0x4ed5('0x56')});});}catch(_0x5bd920){_0x3b06be(_0x5bd920);}}else if(_0x34aa17){_0x3b06be();}else{return _0x44a696[_0x4ed5('0x3b')](0x193)[_0x4ed5('0x3e')]({'message':_0x4ed5('0x5a')});}})[_0x4ed5('0x38')](function(_0x1c4671,_0x2495a9,_0x4595fd){if(_0x1c4671[_0x4ed5('0x48')]){db['User'][_0x4ed5('0x44')]({'where':{'id':_0x1c4671[_0x4ed5('0x48')]['id']},'attributes':userAttributes})[_0x4ed5('0x45')](function(_0x2f524e){if(!_0x2f524e){return _0x2495a9['status'](0x194)[_0x4ed5('0x3e')]({'message':'User\x20not\x20found.'});}_0x1c4671[_0x4ed5('0x48')]=_0x2f524e;_0x4595fd();})[_0x4ed5('0x40')](function(_0x58cbb9){_0x4595fd(_0x58cbb9);});}else if(_0x34aa17){_0x4595fd();}else{return _0x2495a9[_0x4ed5('0x3b')](0x194)[_0x4ed5('0x3e')]({'message':_0x4ed5('0x5b')});}});};exports['canUpdate']=function canUpdate(){return compose()[_0x4ed5('0x38')](function(_0x44e1e9,_0x5a567b,_0x30cb2a){return licenseUtil['getLicense']()[_0x4ed5('0x45')](function(_0x32a798){if(_0x32a798[_0x4ed5('0x5c')]){_0x30cb2a();}else{return _0x5a567b[_0x4ed5('0x3b')](0x193)[_0x4ed5('0x3e')]({'message':_0x4ed5('0x5d')});}})[_0x4ed5('0x40')](function(_0x1c55c0){_0x30cb2a(_0x1c55c0);});});};exports[_0x4ed5('0x5e')]=function isWebrtcLicence(){return compose()[_0x4ed5('0x38')](function(_0x34beeb,_0x4356b9,_0x433cd3){return licenseUtil[_0x4ed5('0x5f')]()[_0x4ed5('0x45')](function(_0x30286d){if(_0x30286d[_0x4ed5('0x60')]){_0x433cd3();}else{return _0x4356b9[_0x4ed5('0x3b')](0x193)[_0x4ed5('0x3e')]({'message':_0x4ed5('0x5d')});}})[_0x4ed5('0x40')](function(_0x4cd109){_0x433cd3(_0x4cd109);});});};exports['isMiddleware']=function(_0x27bc63,_0x180cbc,_0x59c5e9){_0x27bc63[_0x4ed5('0x61')]=!![];return _0x59c5e9();};exports[_0x4ed5('0x62')]=function signToken(_0x2faa4e){return signJwt(_0x2faa4e);};exports[_0x4ed5('0x63')]=function(_0x2f38fd,_0x546d21){if(!_0x2f38fd['user']){return _0x546d21[_0x4ed5('0x3b')](0x194)[_0x4ed5('0x3e')]({'message':_0x4ed5('0x64')});}var _0x530fe8={'payload':{'id':_0x2f38fd[_0x4ed5('0x48')]['id'],'role':_0x2f38fd[_0x4ed5('0x48')][_0x4ed5('0xd')]},'options':{'expiresIn':0x15180}};return signJwt(_0x530fe8)['then'](function(_0x381057){_0x546d21['cookie'](_0x4ed5('0x65'),_0x381057);_0x546d21['redirect'](_0x4ed5('0x66'));})['catch'](function(_0x27abb2){return _0x546d21[_0x4ed5('0x3b')](0x1f4)[_0x4ed5('0x67')](_0x27abb2);});};exports[_0x4ed5('0x68')]=function(_0xd3c30b){if(_[_0x4ed5('0x69')](_0xd3c30b[_0x4ed5('0x52')])||_['isNil'](_0xd3c30b[_0x4ed5('0x6a')])){return null;}else{return createJwt(_0xd3c30b);}};exports[_0x4ed5('0x6b')]=function(_0x5df8fb){_0x5df8fb[_0x4ed5('0x52')]=generateNonce();_0x5df8fb[_0x4ed5('0x6a')]=generateIssuedAt();return createJwt(_0x5df8fb);};exports['regenerateApiKey']=function(_0x4cdd30,_0xee1559){var _0x4af100=_0x4cdd30[_0x4ed5('0x49')][_0x4ed5('0x4a')];if(_0x4af100){var _0x17d6bb={'nonce':_0xee1559[_0x4ed5('0x52')],'iat':_0xee1559[_0x4ed5('0x6a')],'audience':hardwareConf[_0x4ed5('0x4b')](),'issuer':hardwareConf['getUuid']()};return verifyJwt(_0x4af100,_0x17d6bb)['then'](function(){return generateApiKey(_0xee1559);});}else{throw{'message':_0x4ed5('0x6c')};}};exports['validatePasswordPattern']=function(_0x3a62b8){var _0x44ecdd=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(!_0x44ecdd[_0x4ed5('0x6d')](_0x3a62b8))throw new db['Sequelize'][(_0x4ed5('0x6e'))]('The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.');return;};exports[_0x4ed5('0x6f')]=function(_0x5e9418,_0x4a8af9,_0x54bb95){var _0x2fb2da=encryptor[_0x4ed5('0x70')](_0x4a8af9)['split'](',');for(var _0x4b5e30=0x0;_0x4b5e30<_0x54bb95;_0x4b5e30++){if(!_0x2fb2da[_0x4b5e30])break;if(_0x5e9418[_0x4ed5('0x71')]()===_0x2fb2da[_0x4b5e30][_0x4ed5('0x71')]()){var _0x3d10c1=util[_0x4ed5('0x72')](_0x4ed5('0x73'),_0x54bb95);if(_0x54bb95===0x1){_0x3d10c1=_0x4ed5('0x74');}throw new db[(_0x4ed5('0x75'))]['ValidationError'](_0x3d10c1);}}return;};exports[_0x4ed5('0x76')]=function(_0x16efe7,_0x5e0150){var _0x4409b3=_0x5e0150?encryptor[_0x4ed5('0x70')](_0x5e0150)['split'](','):[];if(_0x4409b3[_0x4ed5('0x77')]===0x5){_0x4409b3[_0x4ed5('0x78')](-0x1,0x1);}_0x4409b3[_0x4ed5('0x79')](_0x16efe7);return encryptor[_0x4ed5('0x7a')](_0x4409b3[_0x4ed5('0x7b')](','));};function signJwt(_0x1cac1c){var _0x238265=BPromise[_0x4ed5('0x7c')](jwt[_0x4ed5('0x7d')],{'context':jwt});var _0x1b1b53=_0x1cac1c[_0x4ed5('0x7e')]||config[_0x4ed5('0xb')][_0x4ed5('0xc')];return new BPromise(function(_0x5ba67b,_0x12ead6){_0x238265(_0x1cac1c['payload'],_0x1b1b53,_0x1cac1c[_0x4ed5('0x7f')])[_0x4ed5('0x45')](function(_0x1adba3){_0x5ba67b(_0x1adba3);})[_0x4ed5('0x40')](function(_0x2f9901){_0x12ead6(_0x2f9901);});});}function verifyJwt(_0x29db23,_0x739119,_0x58bc07){var _0x523a7a=BPromise[_0x4ed5('0x7c')](jwt[_0x4ed5('0x80')],{'context':jwt});var _0x45d667=_0x58bc07||config[_0x4ed5('0xb')][_0x4ed5('0xc')];return new BPromise(function(_0x4dcec2,_0x27d15a){_0x523a7a(_0x29db23,_0x45d667,_0x739119)['then'](function(_0x532c39){_0x4dcec2(_0x532c39);})[_0x4ed5('0x40')](function(_0x2e7c30){_0x27d15a(_0x2e7c30);});});}function generateNonce(){return crypto[_0x4ed5('0x81')](0x10)[_0x4ed5('0x82')]('hex');}function generateIssuedAt(){return Math[_0x4ed5('0x83')](Date[_0x4ed5('0x84')]()/0x3e8)[_0x4ed5('0x82')]();}function createJwt(_0x36f1cb){var _0x223ec1={'payload':{'iat':_0x36f1cb[_0x4ed5('0x6a')],'nonce':_0x36f1cb[_0x4ed5('0x52')]},'options':{'algorithm':_0x4ed5('0x85'),'subject':_0x36f1cb['id'][_0x4ed5('0x82')](),'issuer':hardwareConf[_0x4ed5('0x4b')](),'audience':hardwareConf[_0x4ed5('0x4b')]()}};return signJwt(_0x223ec1)[_0x4ed5('0x45')](function(_0x323b3f){return{'iat':_0x36f1cb[_0x4ed5('0x6a')],'nonce':_0x36f1cb[_0x4ed5('0x52')],'token':_0x323b3f};});}