169bb9ccd86e42cd0a5d7d6a508ef7d3d198ad38
[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 _0xb6aa=['promisify','sign','secret','payload','options','verify','randomBytes','hex','floor','now','toString','HS512','../../mysqldb','../../config/license/hardware','../../config/license/util','../encryptor','lodash','jsonwebtoken','express-jwt','basic-auth','crypto','secrets','session','role','fullname','name','internal','userpic','permissions','chatPause','mailPause','smsPause','openchannelPause','pauseType','showWebBar','lastLoginAt','lastPauseAt','crudPermissions','allowmessenger','phoneBarAutoAnswerDelay','phoneBarDnd','phoneBarEnableRecording','phoneBarEnableSettings','phoneBarExpires','phoneBarRemoteControlPort','hotdesk','interface','userProfileId','privacyEnabled','settingsEnabled','wssPort','downloadVoiceRecordings','downloadOmnichannelInteractions','downloadAttachments','isChatInteractionAuthorized','ChatInteraction','findOne','params','closed','disposition','json','unmanaged','Unmanaged.','Forbidden.','catch','use','headers','authorization','Basic','find','then','pass','status','user','Unknown\x20authorization\x20format','query','apikey','getUuid','sub','Setting','allowedLoginAttempts','blockDuration','isEqual','apiKeyNonce','nonce','API\x20access\x20key\x20is\x20not\x20valid\x20anymore','Invalid\x20API\x20access\x20key','blocked','blockedAt','add','minutes','User','User\x20not\x20found.','User\x20object\x20not\x20found.','canUpdate','getLicense','update','Forbidden','isMiddleware','signToken','setTokenCookie','It\x20looks\x20like\x20you\x20aren\x27t\x20logged\x20in,\x20please\x20try\x20again.','cookie','motion.token','redirect','/dashboards/general','send','retrieveApiKey','isNil','apiKeyIat','generateApiKey','regenerateApiKey','Please\x20use\x20the\x20previous\x20API\x20access\x20key\x20to\x20generate\x20a\x20new\x20one','validatePasswordPattern','test','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~!@#$%^&-_=+[{]}.','decryptString','split','toLowerCase','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.','updatePasswordsHistory','length','unshift','join'];(function(_0x5eedee,_0x5dd876){var _0x8fe6e7=function(_0x5c1650){while(--_0x5c1650){_0x5eedee['push'](_0x5eedee['shift']());}};_0x8fe6e7(++_0x5dd876);}(_0xb6aa,0x189));var _0xab6a=function(_0x398e2e,_0x1f6a01){_0x398e2e=_0x398e2e-0x0;var _0x94a5d2=_0xb6aa[_0x398e2e];return _0x94a5d2;};'use strict';var db=require(_0xab6a('0x0'))['db'];var config=require('../../config/environment');var hardwareConf=require(_0xab6a('0x1'));var licenseUtil=require(_0xab6a('0x2'));var encryptor=require(_0xab6a('0x3'));var _=require(_0xab6a('0x4'));var jwt=require(_0xab6a('0x5'));var expressJwt=require(_0xab6a('0x6'));var compose=require('composable-middleware');var basicAuth=require(_0xab6a('0x7'));var crypto=require(_0xab6a('0x8'));var BPromise=require('bluebird');var util=require('util');var moment=require('moment');var validateJwt=expressJwt({'secret':config[_0xab6a('0x9')][_0xab6a('0xa')]});var userAttributes=['id',_0xab6a('0xb'),_0xab6a('0xc'),_0xab6a('0xd'),_0xab6a('0xe'),'email',_0xab6a('0xf'),_0xab6a('0x10'),'md5secret','voicePause',_0xab6a('0x11'),_0xab6a('0x12'),'faxPause',_0xab6a('0x13'),_0xab6a('0x14'),_0xab6a('0x15'),_0xab6a('0x16'),_0xab6a('0x17'),_0xab6a('0x18'),_0xab6a('0x19'),_0xab6a('0x1a'),'passwordResetAt','alias','phoneBarAutoAnswer',_0xab6a('0x1b'),_0xab6a('0x1c'),_0xab6a('0x1d'),'phoneBarEnableDtmfTone',_0xab6a('0x1e'),_0xab6a('0x1f'),'phoneBarPrefixRequired','phoneBarRemoteControl',_0xab6a('0x20'),_0xab6a('0x21'),_0xab6a('0x22'),_0xab6a('0x23'),_0xab6a('0x24'),_0xab6a('0x25'),_0xab6a('0x26'),_0xab6a('0x27'),_0xab6a('0x28'),_0xab6a('0x29')];exports[_0xab6a('0x2a')]=function(){return this['isAuthenticated'](!![])['use'](function(_0x46d6df,_0x17be06,_0x265d66){if(_0x46d6df['user']){_0x265d66();}else{return db[_0xab6a('0x2b')][_0xab6a('0x2c')]({'where':{'id':_0x46d6df[_0xab6a('0x2d')]['id']},'attributes':['id',_0xab6a('0x2e'),_0xab6a('0x2f')],'raw':!![]})['then'](function(_0x564add){if(_0x564add&&_0x564add[_0xab6a('0x2e')]){return _0x17be06['status'](_0x564add[_0xab6a('0x2f')]==='unmanaged'?0x195:0x193)[_0xab6a('0x30')]({'message':_0x564add['disposition']===_0xab6a('0x31')?_0xab6a('0x32'):_0xab6a('0x33')});}else{_0x265d66();}})[_0xab6a('0x34')](function(_0x4d327e){_0x265d66(_0x4d327e);});}});};exports['isAuthenticated']=function isAuthenticated(_0x2b3215){return compose()[_0xab6a('0x35')](function(_0x1dfc2c,_0xd23681,_0x328ff9){var _0x5adae2;if(_0x1dfc2c[_0xab6a('0x36')][_0xab6a('0x37')]){if(_['startsWith'](_0x1dfc2c[_0xab6a('0x36')][_0xab6a('0x37')],_0xab6a('0x38'))){var _0x572c3d=basicAuth(_0x1dfc2c);db['User'][_0xab6a('0x39')]({'where':{'name':_0x572c3d['name']}})[_0xab6a('0x3a')](function(_0x2eafe4){if(!_0x2eafe4||!_0x2eafe4['authenticate'](_0x572c3d[_0xab6a('0x3b')])){return _0xd23681[_0xab6a('0x3c')](0x191)['json']({'message':'Wrong\x20credentials.'});}_0x1dfc2c[_0xab6a('0x3d')]={'id':_0x2eafe4['id']};_0x328ff9();})[_0xab6a('0x34')](function(_0x2e1fc6){_0x328ff9(_0x2e1fc6);});}else if(_['startsWith'](_0x1dfc2c[_0xab6a('0x36')][_0xab6a('0x37')],'Bearer')){validateJwt(_0x1dfc2c,_0xd23681,_0x328ff9);}else{if(_0x2b3215){_0x328ff9();}else{return _0xd23681['status'](0x193)['json']({'message':_0xab6a('0x3e')});}}}else if(_0x1dfc2c[_0xab6a('0x3f')][_0xab6a('0x40')]){try{var _0x5973ef={'audience':hardwareConf[_0xab6a('0x41')](),'issuer':hardwareConf[_0xab6a('0x41')]()};verifyJwt(_0x1dfc2c[_0xab6a('0x3f')][_0xab6a('0x40')],_0x5973ef)['then'](function(_0x28233a){return db['User']['find']({'where':{'id':_0x28233a[_0xab6a('0x42')]}})[_0xab6a('0x3a')](function(_0x5bab68){_0x5adae2=_0x5bab68;return db[_0xab6a('0x43')][_0xab6a('0x2c')]({'where':{'id':0x1},'attributes':[_0xab6a('0x44'),_0xab6a('0x45')],'raw':!![]});})[_0xab6a('0x3a')](function(_0x34d585){if(!_0x5adae2||!_[_0xab6a('0x46')](_0x5adae2[_0xab6a('0x47')],_0x28233a[_0xab6a('0x48')])){return _0xd23681['status'](0x191)[_0xab6a('0x30')]({'message':_0xab6a('0x49')});}if(_0x5adae2['disabled']){return _0xd23681[_0xab6a('0x3c')](0x191)[_0xab6a('0x30')]({'message':_0xab6a('0x4a')});}if(_0x5adae2[_0xab6a('0x4b')]){if(_0x34d585[_0xab6a('0x45')]>0x0){if(moment(_0x5adae2[_0xab6a('0x4c')])[_0xab6a('0x4d')](_0x34d585[_0xab6a('0x45')],_0xab6a('0x4e'))>moment()){return _0xd23681[_0xab6a('0x3c')](0x191)['json']({'message':_0xab6a('0x4a')});}}else{return _0xd23681['status'](0x191)[_0xab6a('0x30')]({'message':_0xab6a('0x4a')});}}_0x1dfc2c[_0xab6a('0x3d')]={'id':_0x5adae2['id']};_0x328ff9();});})[_0xab6a('0x34')](function(){return _0xd23681[_0xab6a('0x3c')](0x191)[_0xab6a('0x30')]({'message':_0xab6a('0x4a')});});}catch(_0x9c825e){_0x328ff9(_0x9c825e);}}else if(_0x2b3215){_0x328ff9();}else{return _0xd23681[_0xab6a('0x3c')](0x193)[_0xab6a('0x30')]({'message':_0xab6a('0x3e')});}})[_0xab6a('0x35')](function(_0x4e580f,_0x40c3da,_0x3913aa){if(_0x4e580f[_0xab6a('0x3d')]){db[_0xab6a('0x4f')][_0xab6a('0x39')]({'where':{'id':_0x4e580f[_0xab6a('0x3d')]['id']},'attributes':userAttributes})[_0xab6a('0x3a')](function(_0x54472e){if(!_0x54472e){return _0x40c3da[_0xab6a('0x3c')](0x194)[_0xab6a('0x30')]({'message':_0xab6a('0x50')});}_0x4e580f[_0xab6a('0x3d')]=_0x54472e;_0x3913aa();})[_0xab6a('0x34')](function(_0x14a4c8){_0x3913aa(_0x14a4c8);});}else if(_0x2b3215){_0x3913aa();}else{return _0x40c3da[_0xab6a('0x3c')](0x194)['json']({'message':_0xab6a('0x51')});}});};exports[_0xab6a('0x52')]=function canUpdate(){return compose()[_0xab6a('0x35')](function(_0x3c2123,_0x2410b5,_0x568126){return licenseUtil[_0xab6a('0x53')]()[_0xab6a('0x3a')](function(_0x2a4286){if(_0x2a4286[_0xab6a('0x54')]){_0x568126();}else{return _0x2410b5[_0xab6a('0x3c')](0x193)[_0xab6a('0x30')]({'message':_0xab6a('0x55')});}})[_0xab6a('0x34')](function(_0x55ce8a){_0x568126(_0x55ce8a);});});};exports['isMiddleware']=function(_0x102137,_0x4368ef,_0x10e5fe){_0x102137[_0xab6a('0x56')]=!![];return _0x10e5fe();};exports[_0xab6a('0x57')]=function signToken(_0x191d1d){return signJwt(_0x191d1d);};exports[_0xab6a('0x58')]=function(_0x2c4712,_0x45c9c0){if(!_0x2c4712[_0xab6a('0x3d')]){return _0x45c9c0[_0xab6a('0x3c')](0x194)[_0xab6a('0x30')]({'message':_0xab6a('0x59')});}var _0x36be3c={'payload':{'id':_0x2c4712[_0xab6a('0x3d')]['id'],'role':_0x2c4712[_0xab6a('0x3d')]['role']},'options':{'expiresIn':0x15180}};return signJwt(_0x36be3c)[_0xab6a('0x3a')](function(_0xae6378){_0x45c9c0[_0xab6a('0x5a')](_0xab6a('0x5b'),_0xae6378);_0x45c9c0[_0xab6a('0x5c')](_0xab6a('0x5d'));})[_0xab6a('0x34')](function(_0x4c0a80){return _0x45c9c0[_0xab6a('0x3c')](0x1f4)[_0xab6a('0x5e')](_0x4c0a80);});};exports[_0xab6a('0x5f')]=function(_0x3915d3){if(_[_0xab6a('0x60')](_0x3915d3[_0xab6a('0x47')])||_['isNil'](_0x3915d3[_0xab6a('0x61')])){return null;}else{return createJwt(_0x3915d3);}};exports[_0xab6a('0x62')]=function(_0x46b2ef){_0x46b2ef[_0xab6a('0x47')]=generateNonce();_0x46b2ef[_0xab6a('0x61')]=generateIssuedAt();return createJwt(_0x46b2ef);};exports[_0xab6a('0x63')]=function(_0x5090ba,_0x53f896){var _0xc9fb5c=_0x5090ba[_0xab6a('0x3f')][_0xab6a('0x40')];if(_0xc9fb5c){var _0x20d3c2={'nonce':_0x53f896[_0xab6a('0x47')],'iat':_0x53f896[_0xab6a('0x61')],'audience':hardwareConf[_0xab6a('0x41')](),'issuer':hardwareConf[_0xab6a('0x41')]()};return verifyJwt(_0xc9fb5c,_0x20d3c2)['then'](function(){return generateApiKey(_0x53f896);});}else{throw{'message':_0xab6a('0x64')};}};exports[_0xab6a('0x65')]=function(_0x333e20){var _0x2e29cd=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(!_0x2e29cd[_0xab6a('0x66')](_0x333e20))throw new db[(_0xab6a('0x67'))][(_0xab6a('0x68'))](_0xab6a('0x69'));return;};exports['validatePasswordHistory']=function(_0x4f4d79,_0x4e30e5,_0x412135){var _0x21cf51=encryptor[_0xab6a('0x6a')](_0x4e30e5)[_0xab6a('0x6b')](',');for(var _0x2126a6=0x0;_0x2126a6<_0x412135;_0x2126a6++){if(!_0x21cf51[_0x2126a6])break;if(_0x4f4d79['toLowerCase']()===_0x21cf51[_0x2126a6][_0xab6a('0x6c')]()){var _0x138d9a=util['format'](_0xab6a('0x6d'),_0x412135);if(_0x412135===0x1){_0x138d9a=_0xab6a('0x6e');}throw new db[(_0xab6a('0x67'))]['ValidationError'](_0x138d9a);}}return;};exports[_0xab6a('0x6f')]=function(_0x491653,_0x1b44d2){var _0x476dc4=_0x1b44d2?encryptor[_0xab6a('0x6a')](_0x1b44d2)['split'](','):[];if(_0x476dc4[_0xab6a('0x70')]===0x5){_0x476dc4['splice'](-0x1,0x1);}_0x476dc4[_0xab6a('0x71')](_0x491653);return encryptor['encryptString'](_0x476dc4[_0xab6a('0x72')](','));};function signJwt(_0x51e896){var _0x574ea9=BPromise[_0xab6a('0x73')](jwt[_0xab6a('0x74')],{'context':jwt});var _0x4b698f=_0x51e896[_0xab6a('0x75')]||config[_0xab6a('0x9')][_0xab6a('0xa')];return new BPromise(function(_0x2a7baa,_0x5421d2){_0x574ea9(_0x51e896[_0xab6a('0x76')],_0x4b698f,_0x51e896[_0xab6a('0x77')])[_0xab6a('0x3a')](function(_0x53adde){_0x2a7baa(_0x53adde);})['catch'](function(_0x10613d){_0x5421d2(_0x10613d);});});}function verifyJwt(_0x50f19d,_0x463b35,_0x28a107){var _0x50f8fe=BPromise[_0xab6a('0x73')](jwt[_0xab6a('0x78')],{'context':jwt});var _0x275a7c=_0x28a107||config[_0xab6a('0x9')][_0xab6a('0xa')];return new BPromise(function(_0x4d72e7,_0x45928d){_0x50f8fe(_0x50f19d,_0x275a7c,_0x463b35)[_0xab6a('0x3a')](function(_0x257052){_0x4d72e7(_0x257052);})[_0xab6a('0x34')](function(_0x85bbb){_0x45928d(_0x85bbb);});});}function generateNonce(){return crypto[_0xab6a('0x79')](0x10)['toString'](_0xab6a('0x7a'));}function generateIssuedAt(){return Math[_0xab6a('0x7b')](Date[_0xab6a('0x7c')]()/0x3e8)[_0xab6a('0x7d')]();}function createJwt(_0x60d85c){var _0x398af7={'payload':{'iat':_0x60d85c[_0xab6a('0x61')],'nonce':_0x60d85c[_0xab6a('0x47')]},'options':{'algorithm':_0xab6a('0x7e'),'subject':_0x60d85c['id'][_0xab6a('0x7d')](),'issuer':hardwareConf[_0xab6a('0x41')](),'audience':hardwareConf['getUuid']()}};return signJwt(_0x398af7)[_0xab6a('0x3a')](function(_0x5abbd9){return{'iat':_0x60d85c[_0xab6a('0x61')],'nonce':_0x60d85c[_0xab6a('0x47')],'token':_0x5abbd9};});}