Built motion from commit d6d69adf.|2.6.33
[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 _0x38e7=['update','Forbidden','webrtc','isMiddleware','setTokenCookie','It\x20looks\x20like\x20you\x20aren\x27t\x20logged\x20in,\x20please\x20try\x20again.','motion.token','/dashboards/general','send','retrieveApiKey','isNil','apiKeyIat','generateApiKey','regenerateApiKey','Please\x20use\x20the\x20previous\x20API\x20access\x20key\x20to\x20generate\x20a\x20new\x20one','validatePasswordPattern','Sequelize','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~!@#$%^&-_=+[{]}.','validatePasswordHistory','toLowerCase','format','The\x20password\x20must\x20be\x20different\x20from\x20the\x20previous\x20%d\x20passwords.\x20Please\x20choose\x20another\x20one.','updatePasswordsHistory','split','splice','join','promisify','sign','secret','options','verify','randomBytes','hex','floor','now','toString','HS512','../../mysqldb','../../config/environment','../../config/license/hardware','../../config/license/util','basic-auth','crypto','bluebird','util','moment','secrets','session','role','permissions','md5secret','voicePause','chatPause','faxPause','smsPause','openchannelPause','pauseType','showWebBar','lastLoginAt','lastPauseAt','crudPermissions','allowmessenger','phoneBarDnd','phoneBarEnableRecording','phoneBarExpires','phoneBarPrefixRequired','hotdesk','interface','userProfileId','privacyEnabled','wssPort','downloadVoiceRecordings','downloadOmnichannelInteractions','downloadAttachments','ignorePauseForPreviewCalls','chatAutoanswer','chatAutoanswerDelay','emailAutoanswer','emailAutoanswerDelay','smsAutoanswer','smsAutoanswerDelay','openchannelAutoanswer','openchannelAutoanswerDelay','whatsappAutoanswerDelay','messengerSoundNotification','isChatInteractionAuthorized','isAuthenticated','use','user','params','closed','disposition','then','query','forceDownload','status','unmanaged','Unmanaged.','catch','headers','startsWith','authorization','User','find','name','authenticate','pass','json','Wrong\x20credentials.','Bearer','Unknown\x20authorization\x20format','getUuid','apikey','sub','findOne','allowedLoginAttempts','blockDuration','isEqual','apiKeyNonce','nonce','API\x20access\x20key\x20is\x20not\x20valid\x20anymore','disabled','Invalid\x20API\x20access\x20key','add','User\x20not\x20found.','User\x20object\x20not\x20found.','canUpdate','getLicense'];(function(_0x18a794,_0x335c63){var _0x4fadaa=function(_0x49b618){while(--_0x49b618){_0x18a794['push'](_0x18a794['shift']());}};_0x4fadaa(++_0x335c63);}(_0x38e7,0xa7));var _0x738e=function(_0x1e393b,_0x355f6b){_0x1e393b=_0x1e393b-0x0;var _0x3d0bfe=_0x38e7[_0x1e393b];return _0x3d0bfe;};'use strict';var db=require(_0x738e('0x0'))['db'];var config=require(_0x738e('0x1'));var hardwareConf=require(_0x738e('0x2'));var licenseUtil=require(_0x738e('0x3'));var encryptor=require('../encryptor');var _=require('lodash');var jwt=require('jsonwebtoken');var expressJwt=require('express-jwt');var compose=require('composable-middleware');var basicAuth=require(_0x738e('0x4'));var crypto=require(_0x738e('0x5'));var BPromise=require(_0x738e('0x6'));var util=require(_0x738e('0x7'));var moment=require(_0x738e('0x8'));var validateJwt=expressJwt({'secret':config[_0x738e('0x9')][_0x738e('0xa')]});var userAttributes=['id',_0x738e('0xb'),'fullname','name','internal','email','userpic',_0x738e('0xc'),_0x738e('0xd'),_0x738e('0xe'),_0x738e('0xf'),'mailPause',_0x738e('0x10'),_0x738e('0x11'),_0x738e('0x12'),_0x738e('0x13'),_0x738e('0x14'),_0x738e('0x15'),_0x738e('0x16'),_0x738e('0x17'),_0x738e('0x18'),'passwordResetAt','alias','phoneBarAutoAnswer','phoneBarAutoAnswerDelay',_0x738e('0x19'),_0x738e('0x1a'),'phoneBarEnableDtmfTone','phoneBarEnableSettings',_0x738e('0x1b'),_0x738e('0x1c'),'phoneBarRemoteControl','phoneBarRemoteControlPort',_0x738e('0x1d'),_0x738e('0x1e'),_0x738e('0x1f'),_0x738e('0x20'),'settingsEnabled',_0x738e('0x21'),_0x738e('0x22'),_0x738e('0x23'),_0x738e('0x24'),_0x738e('0x25'),'selectRecallMeCampaign',_0x738e('0x26'),_0x738e('0x27'),_0x738e('0x28'),_0x738e('0x29'),_0x738e('0x2a'),_0x738e('0x2b'),_0x738e('0x2c'),_0x738e('0x2d'),'faxAutoanswer','faxAutoanswerDelay','whatsappAutoanswer',_0x738e('0x2e'),_0x738e('0x2f')];exports[_0x738e('0x30')]=function(){return this[_0x738e('0x31')](!![])[_0x738e('0x32')](function(_0x1dbaa2,_0x3bc810,_0x204f57){if(_0x1dbaa2[_0x738e('0x33')]){_0x204f57();}else{return db['ChatInteraction']['findOne']({'where':{'id':_0x1dbaa2[_0x738e('0x34')]['id']},'attributes':['id',_0x738e('0x35'),_0x738e('0x36')],'raw':!![]})[_0x738e('0x37')](function(_0x231370){if(_0x231370&&_0x231370[_0x738e('0x35')]&&!_0x1dbaa2[_0x738e('0x38')][_0x738e('0x39')]){return _0x3bc810[_0x738e('0x3a')](_0x231370[_0x738e('0x36')]===_0x738e('0x3b')?0x195:0x193)['json']({'message':_0x231370[_0x738e('0x36')]===_0x738e('0x3b')?_0x738e('0x3c'):'Forbidden.'});}else{_0x204f57();}})[_0x738e('0x3d')](function(_0x522acf){_0x204f57(_0x522acf);});}});};exports[_0x738e('0x31')]=function isAuthenticated(_0x39efff){return compose()[_0x738e('0x32')](function(_0x10d04d,_0x120774,_0x56acb8){var _0x113ab1;if(_0x10d04d[_0x738e('0x3e')]['authorization']){if(_[_0x738e('0x3f')](_0x10d04d[_0x738e('0x3e')][_0x738e('0x40')],'Basic')){var _0x5109f0=basicAuth(_0x10d04d);db[_0x738e('0x41')][_0x738e('0x42')]({'where':{'name':_0x5109f0[_0x738e('0x43')]}})[_0x738e('0x37')](function(_0x805056){if(!_0x805056||!_0x805056[_0x738e('0x44')](_0x5109f0[_0x738e('0x45')])){return _0x120774['status'](0x191)[_0x738e('0x46')]({'message':_0x738e('0x47')});}_0x10d04d[_0x738e('0x33')]={'id':_0x805056['id']};_0x56acb8();})[_0x738e('0x3d')](function(_0x1c6a3a){_0x56acb8(_0x1c6a3a);});}else if(_[_0x738e('0x3f')](_0x10d04d[_0x738e('0x3e')][_0x738e('0x40')],_0x738e('0x48'))){validateJwt(_0x10d04d,_0x120774,_0x56acb8);}else{if(_0x39efff){_0x56acb8();}else{return _0x120774[_0x738e('0x3a')](0x193)['json']({'message':_0x738e('0x49')});}}}else if(_0x10d04d['query']['apikey']){try{var _0x5b7d20={'audience':hardwareConf[_0x738e('0x4a')](),'issuer':hardwareConf['getUuid']()};verifyJwt(_0x10d04d[_0x738e('0x38')][_0x738e('0x4b')],_0x5b7d20)[_0x738e('0x37')](function(_0x26c992){return db[_0x738e('0x41')][_0x738e('0x42')]({'where':{'id':_0x26c992[_0x738e('0x4c')]}})['then'](function(_0x56e906){_0x113ab1=_0x56e906;return db['Setting'][_0x738e('0x4d')]({'where':{'id':0x1},'attributes':[_0x738e('0x4e'),_0x738e('0x4f')],'raw':!![]});})['then'](function(_0x124c5f){if(!_0x113ab1||!_[_0x738e('0x50')](_0x113ab1[_0x738e('0x51')],_0x26c992[_0x738e('0x52')])){return _0x120774[_0x738e('0x3a')](0x191)[_0x738e('0x46')]({'message':_0x738e('0x53')});}if(_0x113ab1[_0x738e('0x54')]){return _0x120774[_0x738e('0x3a')](0x191)[_0x738e('0x46')]({'message':_0x738e('0x55')});}if(_0x113ab1['blocked']){if(_0x124c5f['blockDuration']>0x0){if(moment(_0x113ab1['blockedAt'])[_0x738e('0x56')](_0x124c5f[_0x738e('0x4f')],'minutes')>moment()){return _0x120774[_0x738e('0x3a')](0x191)['json']({'message':'Invalid\x20API\x20access\x20key'});}}else{return _0x120774[_0x738e('0x3a')](0x191)[_0x738e('0x46')]({'message':_0x738e('0x55')});}}_0x10d04d[_0x738e('0x33')]={'id':_0x113ab1['id']};_0x56acb8();});})['catch'](function(){return _0x120774['status'](0x191)[_0x738e('0x46')]({'message':'Invalid\x20API\x20access\x20key'});});}catch(_0x466679){_0x56acb8(_0x466679);}}else if(_0x39efff){_0x56acb8();}else{return _0x120774['status'](0x193)[_0x738e('0x46')]({'message':_0x738e('0x49')});}})[_0x738e('0x32')](function(_0x8009a8,_0x177a40,_0x5df901){if(_0x8009a8[_0x738e('0x33')]){db['User']['find']({'where':{'id':_0x8009a8['user']['id']},'attributes':userAttributes})[_0x738e('0x37')](function(_0x441a0d){if(!_0x441a0d){return _0x177a40['status'](0x194)[_0x738e('0x46')]({'message':_0x738e('0x57')});}_0x8009a8[_0x738e('0x33')]=_0x441a0d;_0x5df901();})['catch'](function(_0x3b75e0){_0x5df901(_0x3b75e0);});}else if(_0x39efff){_0x5df901();}else{return _0x177a40[_0x738e('0x3a')](0x194)[_0x738e('0x46')]({'message':_0x738e('0x58')});}});};exports[_0x738e('0x59')]=function canUpdate(){return compose()[_0x738e('0x32')](function(_0x1d2b0e,_0x22f201,_0x91044b){return licenseUtil[_0x738e('0x5a')]()['then'](function(_0x233473){if(_0x233473[_0x738e('0x5b')]){_0x91044b();}else{return _0x22f201['status'](0x193)[_0x738e('0x46')]({'message':_0x738e('0x5c')});}})[_0x738e('0x3d')](function(_0x191bfb){_0x91044b(_0x191bfb);});});};exports['isWebrtcLicence']=function isWebrtcLicence(){return compose()[_0x738e('0x32')](function(_0x22c019,_0x351ee5,_0x1eace9){return licenseUtil[_0x738e('0x5a')]()['then'](function(_0x25e848){if(_0x25e848[_0x738e('0x5d')]){_0x1eace9();}else{return _0x351ee5[_0x738e('0x3a')](0x193)[_0x738e('0x46')]({'message':_0x738e('0x5c')});}})[_0x738e('0x3d')](function(_0xf166a4){_0x1eace9(_0xf166a4);});});};exports[_0x738e('0x5e')]=function(_0x4abd51,_0x5a5ce3,_0x19e846){_0x4abd51[_0x738e('0x5e')]=!![];return _0x19e846();};exports['signToken']=function signToken(_0x59524c){return signJwt(_0x59524c);};exports[_0x738e('0x5f')]=function(_0x12cbf0,_0x5b6b2c){if(!_0x12cbf0[_0x738e('0x33')]){return _0x5b6b2c[_0x738e('0x3a')](0x194)[_0x738e('0x46')]({'message':_0x738e('0x60')});}var _0x5a5329={'payload':{'id':_0x12cbf0[_0x738e('0x33')]['id'],'role':_0x12cbf0[_0x738e('0x33')][_0x738e('0xb')]},'options':{'expiresIn':0x15180}};return signJwt(_0x5a5329)[_0x738e('0x37')](function(_0x51652a){_0x5b6b2c['cookie'](_0x738e('0x61'),_0x51652a);_0x5b6b2c['redirect'](_0x738e('0x62'));})[_0x738e('0x3d')](function(_0x3b273f){return _0x5b6b2c['status'](0x1f4)[_0x738e('0x63')](_0x3b273f);});};exports[_0x738e('0x64')]=function(_0x4f9317){if(_[_0x738e('0x65')](_0x4f9317['apiKeyNonce'])||_['isNil'](_0x4f9317[_0x738e('0x66')])){return null;}else{return createJwt(_0x4f9317);}};exports[_0x738e('0x67')]=function(_0x46bb1d){_0x46bb1d[_0x738e('0x51')]=generateNonce();_0x46bb1d[_0x738e('0x66')]=generateIssuedAt();return createJwt(_0x46bb1d);};exports[_0x738e('0x68')]=function(_0x1e6e41,_0x4c2218){var _0x51218b=_0x1e6e41[_0x738e('0x38')][_0x738e('0x4b')];if(_0x51218b){var _0x20d617={'nonce':_0x4c2218['apiKeyNonce'],'iat':_0x4c2218[_0x738e('0x66')],'audience':hardwareConf[_0x738e('0x4a')](),'issuer':hardwareConf['getUuid']()};return verifyJwt(_0x51218b,_0x20d617)[_0x738e('0x37')](function(){return generateApiKey(_0x4c2218);});}else{throw{'message':_0x738e('0x69')};}};exports[_0x738e('0x6a')]=function(_0x121c59){var _0x2e0f26=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(!_0x2e0f26['test'](_0x121c59))throw new db[(_0x738e('0x6b'))][(_0x738e('0x6c'))](_0x738e('0x6d'));return;};exports[_0x738e('0x6e')]=function(_0x23b17e,_0x52cbe0,_0x233adb){var _0xbf3bd=encryptor['decryptString'](_0x52cbe0)['split'](',');for(var _0x434aa7=0x0;_0x434aa7<_0x233adb;_0x434aa7++){if(!_0xbf3bd[_0x434aa7])break;if(_0x23b17e['toLowerCase']()===_0xbf3bd[_0x434aa7][_0x738e('0x6f')]()){var _0x16f3ce=util[_0x738e('0x70')](_0x738e('0x71'),_0x233adb);if(_0x233adb===0x1){_0x16f3ce='The\x20password\x20must\x20be\x20different\x20from\x20the\x20last\x20one.\x20Please\x20choose\x20another\x20one.';}throw new db[(_0x738e('0x6b'))][(_0x738e('0x6c'))](_0x16f3ce);}}return;};exports[_0x738e('0x72')]=function(_0x3c4dee,_0x3134cf){var _0x59c66c=_0x3134cf?encryptor['decryptString'](_0x3134cf)[_0x738e('0x73')](','):[];if(_0x59c66c['length']===0x5){_0x59c66c[_0x738e('0x74')](-0x1,0x1);}_0x59c66c['unshift'](_0x3c4dee);return encryptor['encryptString'](_0x59c66c[_0x738e('0x75')](','));};function signJwt(_0x4d2573){var _0x5bc8c9=BPromise[_0x738e('0x76')](jwt[_0x738e('0x77')],{'context':jwt});var _0x2327ed=_0x4d2573[_0x738e('0x78')]||config[_0x738e('0x9')][_0x738e('0xa')];return new BPromise(function(_0x4e28c5,_0x477b45){_0x5bc8c9(_0x4d2573['payload'],_0x2327ed,_0x4d2573[_0x738e('0x79')])[_0x738e('0x37')](function(_0x40b80b){_0x4e28c5(_0x40b80b);})['catch'](function(_0x564210){_0x477b45(_0x564210);});});}function verifyJwt(_0xc52ca2,_0x7027a,_0x266b60){var _0x125e2b=BPromise[_0x738e('0x76')](jwt[_0x738e('0x7a')],{'context':jwt});var _0x515954=_0x266b60||config[_0x738e('0x9')][_0x738e('0xa')];return new BPromise(function(_0x2f5e8e,_0x1b4605){_0x125e2b(_0xc52ca2,_0x515954,_0x7027a)[_0x738e('0x37')](function(_0x669dfa){_0x2f5e8e(_0x669dfa);})[_0x738e('0x3d')](function(_0x4987d7){_0x1b4605(_0x4987d7);});});}function generateNonce(){return crypto[_0x738e('0x7b')](0x10)['toString'](_0x738e('0x7c'));}function generateIssuedAt(){return Math[_0x738e('0x7d')](Date[_0x738e('0x7e')]()/0x3e8)[_0x738e('0x7f')]();}function createJwt(_0x4bbc52){var _0x2ddfe6={'payload':{'iat':_0x4bbc52[_0x738e('0x66')],'nonce':_0x4bbc52[_0x738e('0x51')]},'options':{'algorithm':_0x738e('0x80'),'subject':_0x4bbc52['id'][_0x738e('0x7f')](),'issuer':hardwareConf[_0x738e('0x4a')](),'audience':hardwareConf[_0x738e('0x4a')]()}};return signJwt(_0x2ddfe6)['then'](function(_0x231f5a){return{'iat':_0x4bbc52['apiKeyIat'],'nonce':_0x4bbc52['apiKeyNonce'],'token':_0x231f5a};});}