Built motion from commit (unavailable).|2.6.0
[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 _0xb3dd=['../../config/license/hardware','../../config/license/util','../encryptor','lodash','express-jwt','composable-middleware','basic-auth','bluebird','util','moment','secrets','session','role','fullname','name','email','userpic','permissions','voicePause','chatPause','mailPause','faxPause','smsPause','pauseType','lastPauseAt','crudPermissions','allowmessenger','passwordResetAt','alias','phoneBarAutoAnswer','phoneBarAutoAnswerDelay','phoneBarDnd','phoneBarEnableRecording','phoneBarEnableDtmfTone','phoneBarEnableSettings','phoneBarExpires','phoneBarPrefixRequired','phoneBarRemoteControl','hotdesk','interface','userProfileId','settingsEnabled','wssPort','downloadAttachments','isChatInteractionAuthorized','isAuthenticated','use','user','params','closed','disposition','then','status','unmanaged','json','Forbidden.','catch','headers','authorization','startsWith','Basic','find','Wrong\x20credentials.','Bearer','Unknown\x20authorization\x20format','apikey','getUuid','query','User','sub','findOne','blockDuration','isEqual','apiKeyNonce','nonce','API\x20access\x20key\x20is\x20not\x20valid\x20anymore','disabled','Invalid\x20API\x20access\x20key','blocked','blockedAt','add','minutes','User\x20object\x20not\x20found.','canUpdate','Forbidden','isMiddleware','setTokenCookie','redirect','/dashboards/general','isNil','apiKeyIat','generateApiKey','Please\x20use\x20the\x20previous\x20API\x20access\x20key\x20to\x20generate\x20a\x20new\x20one','validatePasswordPattern','test','Sequelize','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','decryptString','toLowerCase','The\x20password\x20must\x20be\x20different\x20from\x20the\x20previous\x20%d\x20passwords.\x20Please\x20choose\x20another\x20one.','updatePasswordsHistory','split','length','splice','unshift','encryptString','join','sign','secret','payload','options','verify','randomBytes','toString','hex','floor','now','../../config/environment'];(function(_0x432f61,_0x4cf01f){var _0x550ba4=function(_0x199a30){while(--_0x199a30){_0x432f61['push'](_0x432f61['shift']());}};_0x550ba4(++_0x4cf01f);}(_0xb3dd,0x76));var _0xdb3d=function(_0x1e2651,_0x1ae04c){_0x1e2651=_0x1e2651-0x0;var _0x54111a=_0xb3dd[_0x1e2651];return _0x54111a;};'use strict';var db=require('../../mysqldb')['db'];var config=require(_0xdb3d('0x0'));var hardwareConf=require(_0xdb3d('0x1'));var licenseUtil=require(_0xdb3d('0x2'));var encryptor=require(_0xdb3d('0x3'));var _=require(_0xdb3d('0x4'));var jwt=require('jsonwebtoken');var expressJwt=require(_0xdb3d('0x5'));var compose=require(_0xdb3d('0x6'));var basicAuth=require(_0xdb3d('0x7'));var crypto=require('crypto');var BPromise=require(_0xdb3d('0x8'));var util=require(_0xdb3d('0x9'));var moment=require(_0xdb3d('0xa'));var validateJwt=expressJwt({'secret':config[_0xdb3d('0xb')][_0xdb3d('0xc')]});var userAttributes=['id',_0xdb3d('0xd'),_0xdb3d('0xe'),_0xdb3d('0xf'),'internal',_0xdb3d('0x10'),_0xdb3d('0x11'),_0xdb3d('0x12'),'md5secret',_0xdb3d('0x13'),_0xdb3d('0x14'),_0xdb3d('0x15'),_0xdb3d('0x16'),_0xdb3d('0x17'),'openchannelPause',_0xdb3d('0x18'),'showWebBar','lastLoginAt',_0xdb3d('0x19'),_0xdb3d('0x1a'),_0xdb3d('0x1b'),_0xdb3d('0x1c'),_0xdb3d('0x1d'),_0xdb3d('0x1e'),_0xdb3d('0x1f'),_0xdb3d('0x20'),_0xdb3d('0x21'),_0xdb3d('0x22'),_0xdb3d('0x23'),_0xdb3d('0x24'),_0xdb3d('0x25'),_0xdb3d('0x26'),'phoneBarRemoteControlPort',_0xdb3d('0x27'),_0xdb3d('0x28'),_0xdb3d('0x29'),'privacyEnabled',_0xdb3d('0x2a'),_0xdb3d('0x2b'),'downloadVoiceRecordings','downloadOmnichannelInteractions',_0xdb3d('0x2c')];exports[_0xdb3d('0x2d')]=function(){return this[_0xdb3d('0x2e')](!![])[_0xdb3d('0x2f')](function(_0x58cb4e,_0x5af20c,_0x9c978e){if(_0x58cb4e[_0xdb3d('0x30')]){_0x9c978e();}else{return db['ChatInteraction']['findOne']({'where':{'id':_0x58cb4e[_0xdb3d('0x31')]['id']},'attributes':['id',_0xdb3d('0x32'),_0xdb3d('0x33')],'raw':!![]})[_0xdb3d('0x34')](function(_0xfaa25a){if(_0xfaa25a&&_0xfaa25a[_0xdb3d('0x32')]){return _0x5af20c[_0xdb3d('0x35')](_0xfaa25a[_0xdb3d('0x33')]===_0xdb3d('0x36')?0x195:0x193)[_0xdb3d('0x37')]({'message':_0xfaa25a['disposition']===_0xdb3d('0x36')?'Unmanaged.':_0xdb3d('0x38')});}else{_0x9c978e();}})[_0xdb3d('0x39')](function(_0x3f2d59){_0x9c978e(_0x3f2d59);});}});};exports[_0xdb3d('0x2e')]=function isAuthenticated(_0x5865bf){return compose()[_0xdb3d('0x2f')](function(_0x3724e8,_0x2ef790,_0x18e130){var _0x5d023c;if(_0x3724e8[_0xdb3d('0x3a')][_0xdb3d('0x3b')]){if(_[_0xdb3d('0x3c')](_0x3724e8[_0xdb3d('0x3a')][_0xdb3d('0x3b')],_0xdb3d('0x3d'))){var _0x3d6bcc=basicAuth(_0x3724e8);db['User'][_0xdb3d('0x3e')]({'where':{'name':_0x3d6bcc[_0xdb3d('0xf')]}})[_0xdb3d('0x34')](function(_0x1f6611){if(!_0x1f6611||!_0x1f6611['authenticate'](_0x3d6bcc['pass'])){return _0x2ef790[_0xdb3d('0x35')](0x191)[_0xdb3d('0x37')]({'message':_0xdb3d('0x3f')});}_0x3724e8[_0xdb3d('0x30')]={'id':_0x1f6611['id']};_0x18e130();})['catch'](function(_0x1a4c8d){_0x18e130(_0x1a4c8d);});}else if(_['startsWith'](_0x3724e8['headers'][_0xdb3d('0x3b')],_0xdb3d('0x40'))){validateJwt(_0x3724e8,_0x2ef790,_0x18e130);}else{if(_0x5865bf){_0x18e130();}else{return _0x2ef790['status'](0x193)[_0xdb3d('0x37')]({'message':_0xdb3d('0x41')});}}}else if(_0x3724e8['query'][_0xdb3d('0x42')]){try{var _0x4146df={'audience':hardwareConf[_0xdb3d('0x43')](),'issuer':hardwareConf[_0xdb3d('0x43')]()};verifyJwt(_0x3724e8[_0xdb3d('0x44')]['apikey'],_0x4146df)['then'](function(_0x32d746){return db[_0xdb3d('0x45')]['find']({'where':{'id':_0x32d746[_0xdb3d('0x46')]}})['then'](function(_0x2a81d3){_0x5d023c=_0x2a81d3;return db['Setting'][_0xdb3d('0x47')]({'where':{'id':0x1},'attributes':['allowedLoginAttempts',_0xdb3d('0x48')],'raw':!![]});})[_0xdb3d('0x34')](function(_0x518646){if(!_0x5d023c||!_[_0xdb3d('0x49')](_0x5d023c[_0xdb3d('0x4a')],_0x32d746[_0xdb3d('0x4b')])){return _0x2ef790[_0xdb3d('0x35')](0x191)[_0xdb3d('0x37')]({'message':_0xdb3d('0x4c')});}if(_0x5d023c[_0xdb3d('0x4d')]){return _0x2ef790[_0xdb3d('0x35')](0x191)[_0xdb3d('0x37')]({'message':_0xdb3d('0x4e')});}if(_0x5d023c[_0xdb3d('0x4f')]){if(_0x518646[_0xdb3d('0x48')]>0x0){if(moment(_0x5d023c[_0xdb3d('0x50')])[_0xdb3d('0x51')](_0x518646[_0xdb3d('0x48')],_0xdb3d('0x52'))>moment()){return _0x2ef790[_0xdb3d('0x35')](0x191)[_0xdb3d('0x37')]({'message':_0xdb3d('0x4e')});}}else{return _0x2ef790[_0xdb3d('0x35')](0x191)[_0xdb3d('0x37')]({'message':'Invalid\x20API\x20access\x20key'});}}_0x3724e8[_0xdb3d('0x30')]={'id':_0x5d023c['id']};_0x18e130();});})[_0xdb3d('0x39')](function(){return _0x2ef790[_0xdb3d('0x35')](0x191)[_0xdb3d('0x37')]({'message':_0xdb3d('0x4e')});});}catch(_0x537d18){_0x18e130(_0x537d18);}}else if(_0x5865bf){_0x18e130();}else{return _0x2ef790[_0xdb3d('0x35')](0x193)[_0xdb3d('0x37')]({'message':_0xdb3d('0x41')});}})[_0xdb3d('0x2f')](function(_0x52022b,_0x7d681a,_0x5eb41a){if(_0x52022b[_0xdb3d('0x30')]){db[_0xdb3d('0x45')][_0xdb3d('0x3e')]({'where':{'id':_0x52022b[_0xdb3d('0x30')]['id']},'attributes':userAttributes})['then'](function(_0x373d73){if(!_0x373d73){return _0x7d681a[_0xdb3d('0x35')](0x194)[_0xdb3d('0x37')]({'message':'User\x20not\x20found.'});}_0x52022b[_0xdb3d('0x30')]=_0x373d73;_0x5eb41a();})[_0xdb3d('0x39')](function(_0x478538){_0x5eb41a(_0x478538);});}else if(_0x5865bf){_0x5eb41a();}else{return _0x7d681a[_0xdb3d('0x35')](0x194)[_0xdb3d('0x37')]({'message':_0xdb3d('0x53')});}});};exports[_0xdb3d('0x54')]=function canUpdate(){return compose()[_0xdb3d('0x2f')](function(_0x444d89,_0x204b17,_0x59425b){return licenseUtil['getLicense']()[_0xdb3d('0x34')](function(_0x24f88d){if(_0x24f88d['update']){_0x59425b();}else{return _0x204b17[_0xdb3d('0x35')](0x193)['json']({'message':_0xdb3d('0x55')});}})[_0xdb3d('0x39')](function(_0x18432b){_0x59425b(_0x18432b);});});};exports[_0xdb3d('0x56')]=function(_0x2a062e,_0x10a181,_0x5d482b){_0x2a062e[_0xdb3d('0x56')]=!![];return _0x5d482b();};exports['signToken']=function signToken(_0x59dde1){return signJwt(_0x59dde1);};exports[_0xdb3d('0x57')]=function(_0x17ed69,_0x1d66d1){if(!_0x17ed69['user']){return _0x1d66d1['status'](0x194)[_0xdb3d('0x37')]({'message':'It\x20looks\x20like\x20you\x20aren\x27t\x20logged\x20in,\x20please\x20try\x20again.'});}var _0x290e54={'payload':{'id':_0x17ed69[_0xdb3d('0x30')]['id'],'role':_0x17ed69[_0xdb3d('0x30')][_0xdb3d('0xd')]},'options':{'expiresIn':0x15180}};return signJwt(_0x290e54)[_0xdb3d('0x34')](function(_0x252637){_0x1d66d1['cookie']('motion.token',_0x252637);_0x1d66d1[_0xdb3d('0x58')](_0xdb3d('0x59'));})[_0xdb3d('0x39')](function(_0x5d10cf){return _0x1d66d1['status'](0x1f4)['send'](_0x5d10cf);});};exports['retrieveApiKey']=function(_0x17695f){if(_[_0xdb3d('0x5a')](_0x17695f[_0xdb3d('0x4a')])||_[_0xdb3d('0x5a')](_0x17695f[_0xdb3d('0x5b')])){return null;}else{return createJwt(_0x17695f);}};exports[_0xdb3d('0x5c')]=function(_0x459e98){_0x459e98[_0xdb3d('0x4a')]=generateNonce();_0x459e98['apiKeyIat']=generateIssuedAt();return createJwt(_0x459e98);};exports['regenerateApiKey']=function(_0xbd32c,_0x2419c6){var _0x2ff91b=_0xbd32c[_0xdb3d('0x44')][_0xdb3d('0x42')];if(_0x2ff91b){var _0x3be33e={'nonce':_0x2419c6[_0xdb3d('0x4a')],'iat':_0x2419c6['apiKeyIat'],'audience':hardwareConf[_0xdb3d('0x43')](),'issuer':hardwareConf[_0xdb3d('0x43')]()};return verifyJwt(_0x2ff91b,_0x3be33e)[_0xdb3d('0x34')](function(){return generateApiKey(_0x2419c6);});}else{throw{'message':_0xdb3d('0x5d')};}};exports[_0xdb3d('0x5e')]=function(_0x7a2718){var _0x45e390=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(!_0x45e390[_0xdb3d('0x5f')](_0x7a2718))throw new db[(_0xdb3d('0x60'))]['ValidationError'](_0xdb3d('0x61'));return;};exports[_0xdb3d('0x62')]=function(_0x504a79,_0x12c967,_0x158832){var _0xbaedcb=encryptor[_0xdb3d('0x63')](_0x12c967)['split'](',');for(var _0xaf0741=0x0;_0xaf0741<_0x158832;_0xaf0741++){if(!_0xbaedcb[_0xaf0741])break;if(_0x504a79[_0xdb3d('0x64')]()===_0xbaedcb[_0xaf0741][_0xdb3d('0x64')]()){var _0x3eb6ea=util['format'](_0xdb3d('0x65'),_0x158832);if(_0x158832===0x1){_0x3eb6ea='The\x20password\x20must\x20be\x20different\x20from\x20the\x20last\x20one.\x20Please\x20choose\x20another\x20one.';}throw new db[(_0xdb3d('0x60'))]['ValidationError'](_0x3eb6ea);}}return;};exports[_0xdb3d('0x66')]=function(_0xca6913,_0x1f652a){var _0x79cdfd=_0x1f652a?encryptor[_0xdb3d('0x63')](_0x1f652a)[_0xdb3d('0x67')](','):[];if(_0x79cdfd[_0xdb3d('0x68')]===0x5){_0x79cdfd[_0xdb3d('0x69')](-0x1,0x1);}_0x79cdfd[_0xdb3d('0x6a')](_0xca6913);return encryptor[_0xdb3d('0x6b')](_0x79cdfd[_0xdb3d('0x6c')](','));};function signJwt(_0x3bc22e){var _0x4295a8=BPromise['promisify'](jwt[_0xdb3d('0x6d')],{'context':jwt});var _0x53b9a3=_0x3bc22e[_0xdb3d('0x6e')]||config[_0xdb3d('0xb')][_0xdb3d('0xc')];return new BPromise(function(_0xd0a791,_0x6415b1){_0x4295a8(_0x3bc22e[_0xdb3d('0x6f')],_0x53b9a3,_0x3bc22e[_0xdb3d('0x70')])[_0xdb3d('0x34')](function(_0x193dd4){_0xd0a791(_0x193dd4);})[_0xdb3d('0x39')](function(_0x1dfd81){_0x6415b1(_0x1dfd81);});});}function verifyJwt(_0x27c07c,_0x1a64ca,_0x1b2f9f){var _0x530422=BPromise['promisify'](jwt[_0xdb3d('0x71')],{'context':jwt});var _0x6a2133=_0x1b2f9f||config[_0xdb3d('0xb')][_0xdb3d('0xc')];return new BPromise(function(_0x40ba76,_0x52795c){_0x530422(_0x27c07c,_0x6a2133,_0x1a64ca)[_0xdb3d('0x34')](function(_0x3d60a2){_0x40ba76(_0x3d60a2);})[_0xdb3d('0x39')](function(_0x41ac03){_0x52795c(_0x41ac03);});});}function generateNonce(){return crypto[_0xdb3d('0x72')](0x10)[_0xdb3d('0x73')](_0xdb3d('0x74'));}function generateIssuedAt(){return Math[_0xdb3d('0x75')](Date[_0xdb3d('0x76')]()/0x3e8)[_0xdb3d('0x73')]();}function createJwt(_0x31131f){var _0x2f7c29={'payload':{'iat':_0x31131f[_0xdb3d('0x5b')],'nonce':_0x31131f[_0xdb3d('0x4a')]},'options':{'algorithm':'HS512','subject':_0x31131f['id'][_0xdb3d('0x73')](),'issuer':hardwareConf[_0xdb3d('0x43')](),'audience':hardwareConf[_0xdb3d('0x43')]()}};return signJwt(_0x2f7c29)['then'](function(_0x2ed607){return{'iat':_0x31131f[_0xdb3d('0x5b')],'nonce':_0x31131f[_0xdb3d('0x4a')],'token':_0x2ed607};});}