ac71f6430e0812e21ea0dfa989dc3a5e08620ba8
[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 _0xcdde=['smsPause','openchannelPause','showWebBar','lastPauseAt','crudPermissions','allowmessenger','phoneBarAutoAnswer','phoneBarAutoAnswerDelay','phoneBarDnd','phoneBarEnableDtmfTone','phoneBarEnableSettings','phoneBarExpires','phoneBarPrefixRequired','phoneBarRemoteControlPort','hotdesk','interface','privacyEnabled','settingsEnabled','downloadVoiceRecordings','downloadOmnichannelInteractions','ignorePauseForPreviewCalls','selectRecallMeCampaign','smsAutoanswer','openchannelAutoanswer','openchannelAutoanswerDelay','faxAutoanswer','faxAutoanswerDelay','whatsappAutoanswer','whatsappAutoanswerDelay','messengerSoundNotification','isChatInteractionAuthorized','isAuthenticated','use','ChatInteraction','params','closed','disposition','then','query','forceDownload','status','unmanaged','json','Unmanaged.','catch','headers','authorization','startsWith','Basic','User','authenticate','pass','Wrong\x20credentials.','user','Unknown\x20authorization\x20format','getUuid','apikey','find','findOne','blockDuration','apiKeyNonce','nonce','API\x20access\x20key\x20is\x20not\x20valid\x20anymore','disabled','Invalid\x20API\x20access\x20key','blocked','add','minutes','User\x20not\x20found.','User\x20object\x20not\x20found.','isWebrtcLicence','getLicense','webrtc','Forbidden','isMiddleware','signToken','setTokenCookie','It\x20looks\x20like\x20you\x20aren\x27t\x20logged\x20in,\x20please\x20try\x20again.','cookie','motion.token','redirect','/dashboards/general','retrieveApiKey','isNil','apiKeyIat','generateApiKey','Please\x20use\x20the\x20previous\x20API\x20access\x20key\x20to\x20generate\x20a\x20new\x20one','validatePasswordPattern','test','ValidationError','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','decryptString','toLowerCase','format','The\x20password\x20must\x20be\x20different\x20from\x20the\x20last\x20one.\x20Please\x20choose\x20another\x20one.','Sequelize','updatePasswordsHistory','split','length','unshift','encryptString','join','promisify','sign','payload','options','verify','hex','floor','now','HS512','toString','../../mysqldb','../../config/environment','../../config/license/hardware','../../config/license/util','lodash','jsonwebtoken','express-jwt','basic-auth','crypto','bluebird','util','moment','secrets','session','role','fullname','name','email','permissions','md5secret','voicePause','chatPause','faxPause'];(function(_0xd14ee9,_0x395763){var _0x50ebcc=function(_0x4c5d5c){while(--_0x4c5d5c){_0xd14ee9['push'](_0xd14ee9['shift']());}};_0x50ebcc(++_0x395763);}(_0xcdde,0x17e));var _0xecdd=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xcdde[_0x3dd15e];return _0x231fd0;};'use strict';var db=require(_0xecdd('0x0'))['db'];var config=require(_0xecdd('0x1'));var hardwareConf=require(_0xecdd('0x2'));var licenseUtil=require(_0xecdd('0x3'));var encryptor=require('../encryptor');var _=require(_0xecdd('0x4'));var jwt=require(_0xecdd('0x5'));var expressJwt=require(_0xecdd('0x6'));var compose=require('composable-middleware');var basicAuth=require(_0xecdd('0x7'));var crypto=require(_0xecdd('0x8'));var BPromise=require(_0xecdd('0x9'));var util=require(_0xecdd('0xa'));var moment=require(_0xecdd('0xb'));var validateJwt=expressJwt({'secret':config[_0xecdd('0xc')][_0xecdd('0xd')]});var userAttributes=['id',_0xecdd('0xe'),_0xecdd('0xf'),_0xecdd('0x10'),'internal',_0xecdd('0x11'),'userpic',_0xecdd('0x12'),_0xecdd('0x13'),_0xecdd('0x14'),_0xecdd('0x15'),'mailPause',_0xecdd('0x16'),_0xecdd('0x17'),_0xecdd('0x18'),'pauseType',_0xecdd('0x19'),'lastLoginAt',_0xecdd('0x1a'),_0xecdd('0x1b'),_0xecdd('0x1c'),'passwordResetAt','alias',_0xecdd('0x1d'),_0xecdd('0x1e'),_0xecdd('0x1f'),'phoneBarEnableRecording',_0xecdd('0x20'),_0xecdd('0x21'),_0xecdd('0x22'),_0xecdd('0x23'),'phoneBarRemoteControl',_0xecdd('0x24'),_0xecdd('0x25'),_0xecdd('0x26'),'userProfileId',_0xecdd('0x27'),_0xecdd('0x28'),'wssPort',_0xecdd('0x29'),_0xecdd('0x2a'),'downloadAttachments',_0xecdd('0x2b'),_0xecdd('0x2c'),'chatAutoanswer','chatAutoanswerDelay','emailAutoanswer','emailAutoanswerDelay',_0xecdd('0x2d'),'smsAutoanswerDelay',_0xecdd('0x2e'),_0xecdd('0x2f'),_0xecdd('0x30'),_0xecdd('0x31'),_0xecdd('0x32'),_0xecdd('0x33'),_0xecdd('0x34')];exports[_0xecdd('0x35')]=function(){return this[_0xecdd('0x36')](!![])[_0xecdd('0x37')](function(_0x357519,_0x113c3f,_0x5f5248){if(_0x357519['user']){_0x5f5248();}else{return db[_0xecdd('0x38')]['findOne']({'where':{'id':_0x357519[_0xecdd('0x39')]['id']},'attributes':['id',_0xecdd('0x3a'),_0xecdd('0x3b')],'raw':!![]})[_0xecdd('0x3c')](function(_0x595f61){if(_0x595f61&&_0x595f61['closed']&&!_0x357519[_0xecdd('0x3d')][_0xecdd('0x3e')]){return _0x113c3f[_0xecdd('0x3f')](_0x595f61[_0xecdd('0x3b')]===_0xecdd('0x40')?0x195:0x193)[_0xecdd('0x41')]({'message':_0x595f61['disposition']==='unmanaged'?_0xecdd('0x42'):'Forbidden.'});}else{_0x5f5248();}})[_0xecdd('0x43')](function(_0x3c1884){_0x5f5248(_0x3c1884);});}});};exports[_0xecdd('0x36')]=function isAuthenticated(_0x2b8119){return compose()[_0xecdd('0x37')](function(_0x2c1419,_0x10f4dc,_0xf4fcdb){var _0xf9c4fd;if(_0x2c1419[_0xecdd('0x44')][_0xecdd('0x45')]){if(_[_0xecdd('0x46')](_0x2c1419['headers'][_0xecdd('0x45')],_0xecdd('0x47'))){var _0x9d21fc=basicAuth(_0x2c1419);db[_0xecdd('0x48')]['find']({'where':{'name':_0x9d21fc['name']}})[_0xecdd('0x3c')](function(_0x1f10d4){if(!_0x1f10d4||!_0x1f10d4[_0xecdd('0x49')](_0x9d21fc[_0xecdd('0x4a')])){return _0x10f4dc[_0xecdd('0x3f')](0x191)['json']({'message':_0xecdd('0x4b')});}_0x2c1419[_0xecdd('0x4c')]={'id':_0x1f10d4['id']};_0xf4fcdb();})[_0xecdd('0x43')](function(_0x1074bc){_0xf4fcdb(_0x1074bc);});}else if(_[_0xecdd('0x46')](_0x2c1419[_0xecdd('0x44')][_0xecdd('0x45')],'Bearer')){validateJwt(_0x2c1419,_0x10f4dc,_0xf4fcdb);}else{if(_0x2b8119){_0xf4fcdb();}else{return _0x10f4dc[_0xecdd('0x3f')](0x193)[_0xecdd('0x41')]({'message':_0xecdd('0x4d')});}}}else if(_0x2c1419[_0xecdd('0x3d')]['apikey']){try{var _0x3c0096={'audience':hardwareConf[_0xecdd('0x4e')](),'issuer':hardwareConf[_0xecdd('0x4e')]()};verifyJwt(_0x2c1419[_0xecdd('0x3d')][_0xecdd('0x4f')],_0x3c0096)['then'](function(_0x3d1242){return db[_0xecdd('0x48')][_0xecdd('0x50')]({'where':{'id':_0x3d1242['sub']}})['then'](function(_0x11234b){_0xf9c4fd=_0x11234b;return db['Setting'][_0xecdd('0x51')]({'where':{'id':0x1},'attributes':['allowedLoginAttempts',_0xecdd('0x52')],'raw':!![]});})['then'](function(_0x47b53b){if(!_0xf9c4fd||!_['isEqual'](_0xf9c4fd[_0xecdd('0x53')],_0x3d1242[_0xecdd('0x54')])){return _0x10f4dc[_0xecdd('0x3f')](0x191)[_0xecdd('0x41')]({'message':_0xecdd('0x55')});}if(_0xf9c4fd[_0xecdd('0x56')]){return _0x10f4dc[_0xecdd('0x3f')](0x191)[_0xecdd('0x41')]({'message':_0xecdd('0x57')});}if(_0xf9c4fd[_0xecdd('0x58')]){if(_0x47b53b['blockDuration']>0x0){if(moment(_0xf9c4fd['blockedAt'])[_0xecdd('0x59')](_0x47b53b[_0xecdd('0x52')],_0xecdd('0x5a'))>moment()){return _0x10f4dc['status'](0x191)[_0xecdd('0x41')]({'message':_0xecdd('0x57')});}}else{return _0x10f4dc[_0xecdd('0x3f')](0x191)[_0xecdd('0x41')]({'message':'Invalid\x20API\x20access\x20key'});}}_0x2c1419[_0xecdd('0x4c')]={'id':_0xf9c4fd['id']};_0xf4fcdb();});})[_0xecdd('0x43')](function(){return _0x10f4dc[_0xecdd('0x3f')](0x191)['json']({'message':_0xecdd('0x57')});});}catch(_0x212820){_0xf4fcdb(_0x212820);}}else if(_0x2b8119){_0xf4fcdb();}else{return _0x10f4dc[_0xecdd('0x3f')](0x193)[_0xecdd('0x41')]({'message':'Unknown\x20authorization\x20format'});}})[_0xecdd('0x37')](function(_0x751ac,_0x88db41,_0x147dc6){if(_0x751ac['user']){db[_0xecdd('0x48')]['find']({'where':{'id':_0x751ac['user']['id']},'attributes':userAttributes})[_0xecdd('0x3c')](function(_0x3c547e){if(!_0x3c547e){return _0x88db41[_0xecdd('0x3f')](0x194)[_0xecdd('0x41')]({'message':_0xecdd('0x5b')});}_0x751ac[_0xecdd('0x4c')]=_0x3c547e;_0x147dc6();})[_0xecdd('0x43')](function(_0x34e95e){_0x147dc6(_0x34e95e);});}else if(_0x2b8119){_0x147dc6();}else{return _0x88db41[_0xecdd('0x3f')](0x194)[_0xecdd('0x41')]({'message':_0xecdd('0x5c')});}});};exports['canUpdate']=function canUpdate(){return compose()['use'](function(_0x596c12,_0x194ed9,_0x221a7b){return licenseUtil['getLicense']()[_0xecdd('0x3c')](function(_0x535398){if(_0x535398['update']){_0x221a7b();}else{return _0x194ed9[_0xecdd('0x3f')](0x193)[_0xecdd('0x41')]({'message':'Forbidden'});}})[_0xecdd('0x43')](function(_0x103283){_0x221a7b(_0x103283);});});};exports[_0xecdd('0x5d')]=function isWebrtcLicence(){return compose()[_0xecdd('0x37')](function(_0x4acf3b,_0x2cb3f6,_0x2e9915){return licenseUtil[_0xecdd('0x5e')]()['then'](function(_0x4a54c7){if(_0x4a54c7[_0xecdd('0x5f')]){_0x2e9915();}else{return _0x2cb3f6['status'](0x193)[_0xecdd('0x41')]({'message':_0xecdd('0x60')});}})[_0xecdd('0x43')](function(_0x180ca0){_0x2e9915(_0x180ca0);});});};exports['isMiddleware']=function(_0x11c285,_0x5b8bef,_0x123f52){_0x11c285[_0xecdd('0x61')]=!![];return _0x123f52();};exports[_0xecdd('0x62')]=function signToken(_0x358f83){return signJwt(_0x358f83);};exports[_0xecdd('0x63')]=function(_0x3595d2,_0xb25adb){if(!_0x3595d2[_0xecdd('0x4c')]){return _0xb25adb['status'](0x194)[_0xecdd('0x41')]({'message':_0xecdd('0x64')});}var _0x370e59={'payload':{'id':_0x3595d2[_0xecdd('0x4c')]['id'],'role':_0x3595d2[_0xecdd('0x4c')][_0xecdd('0xe')]},'options':{'expiresIn':0x15180}};return signJwt(_0x370e59)[_0xecdd('0x3c')](function(_0x265457){_0xb25adb[_0xecdd('0x65')](_0xecdd('0x66'),_0x265457);_0xb25adb[_0xecdd('0x67')](_0xecdd('0x68'));})[_0xecdd('0x43')](function(_0x34a87a){return _0xb25adb['status'](0x1f4)['send'](_0x34a87a);});};exports[_0xecdd('0x69')]=function(_0x3e86e8){if(_[_0xecdd('0x6a')](_0x3e86e8[_0xecdd('0x53')])||_['isNil'](_0x3e86e8[_0xecdd('0x6b')])){return null;}else{return createJwt(_0x3e86e8);}};exports[_0xecdd('0x6c')]=function(_0x56fc6d){_0x56fc6d[_0xecdd('0x53')]=generateNonce();_0x56fc6d[_0xecdd('0x6b')]=generateIssuedAt();return createJwt(_0x56fc6d);};exports['regenerateApiKey']=function(_0x3fb48e,_0x39d91e){var _0x24cc4d=_0x3fb48e[_0xecdd('0x3d')]['apikey'];if(_0x24cc4d){var _0x16ae74={'nonce':_0x39d91e[_0xecdd('0x53')],'iat':_0x39d91e['apiKeyIat'],'audience':hardwareConf[_0xecdd('0x4e')](),'issuer':hardwareConf['getUuid']()};return verifyJwt(_0x24cc4d,_0x16ae74)['then'](function(){return generateApiKey(_0x39d91e);});}else{throw{'message':_0xecdd('0x6d')};}};exports[_0xecdd('0x6e')]=function(_0x47279f){var _0x147c39=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(!_0x147c39[_0xecdd('0x6f')](_0x47279f))throw new db['Sequelize'][(_0xecdd('0x70'))](_0xecdd('0x71'));return;};exports['validatePasswordHistory']=function(_0x2c6b11,_0x39d60e,_0x57d2b6){var _0x40eb8e=encryptor[_0xecdd('0x72')](_0x39d60e)['split'](',');for(var _0x576acd=0x0;_0x576acd<_0x57d2b6;_0x576acd++){if(!_0x40eb8e[_0x576acd])break;if(_0x2c6b11[_0xecdd('0x73')]()===_0x40eb8e[_0x576acd][_0xecdd('0x73')]()){var _0x24d62c=util[_0xecdd('0x74')]('The\x20password\x20must\x20be\x20different\x20from\x20the\x20previous\x20%d\x20passwords.\x20Please\x20choose\x20another\x20one.',_0x57d2b6);if(_0x57d2b6===0x1){_0x24d62c=_0xecdd('0x75');}throw new db[(_0xecdd('0x76'))][(_0xecdd('0x70'))](_0x24d62c);}}return;};exports[_0xecdd('0x77')]=function(_0xce9bf8,_0x3a7f94){var _0x24666a=_0x3a7f94?encryptor[_0xecdd('0x72')](_0x3a7f94)[_0xecdd('0x78')](','):[];if(_0x24666a[_0xecdd('0x79')]===0x5){_0x24666a['splice'](-0x1,0x1);}_0x24666a[_0xecdd('0x7a')](_0xce9bf8);return encryptor[_0xecdd('0x7b')](_0x24666a[_0xecdd('0x7c')](','));};function signJwt(_0x545b61){var _0x2ff1d2=BPromise[_0xecdd('0x7d')](jwt[_0xecdd('0x7e')],{'context':jwt});var _0x40c40e=_0x545b61['secret']||config[_0xecdd('0xc')]['session'];return new BPromise(function(_0x59f074,_0x11452f){_0x2ff1d2(_0x545b61[_0xecdd('0x7f')],_0x40c40e,_0x545b61[_0xecdd('0x80')])[_0xecdd('0x3c')](function(_0x2fa8a2){_0x59f074(_0x2fa8a2);})[_0xecdd('0x43')](function(_0x19de48){_0x11452f(_0x19de48);});});}function verifyJwt(_0x285e21,_0x15a790,_0x5d38f8){var _0xf241e4=BPromise[_0xecdd('0x7d')](jwt[_0xecdd('0x81')],{'context':jwt});var _0x3b4769=_0x5d38f8||config[_0xecdd('0xc')]['session'];return new BPromise(function(_0x5457b7,_0x9e57c1){_0xf241e4(_0x285e21,_0x3b4769,_0x15a790)[_0xecdd('0x3c')](function(_0x2eb6f1){_0x5457b7(_0x2eb6f1);})[_0xecdd('0x43')](function(_0x1d1ce3){_0x9e57c1(_0x1d1ce3);});});}function generateNonce(){return crypto['randomBytes'](0x10)['toString'](_0xecdd('0x82'));}function generateIssuedAt(){return Math[_0xecdd('0x83')](Date[_0xecdd('0x84')]()/0x3e8)['toString']();}function createJwt(_0x19bbdd){var _0xde0416={'payload':{'iat':_0x19bbdd[_0xecdd('0x6b')],'nonce':_0x19bbdd[_0xecdd('0x53')]},'options':{'algorithm':_0xecdd('0x85'),'subject':_0x19bbdd['id'][_0xecdd('0x86')](),'issuer':hardwareConf[_0xecdd('0x4e')](),'audience':hardwareConf['getUuid']()}};return signJwt(_0xde0416)[_0xecdd('0x3c')](function(_0x10d808){return{'iat':_0x19bbdd[_0xecdd('0x6b')],'nonce':_0x19bbdd[_0xecdd('0x53')],'token':_0x10d808};});}