179931145ce18b5335cf6a468bd966f74f6d1ce7
[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 _0x6a9b=['phoneBarPrefixRequired','phoneBarRemoteControl','phoneBarRemoteControlPort','hotdesk','interface','isChatInteractionAuthorized','isAuthenticated','use','user','params','closed','status','json','unmanaged','Forbidden.','headers','startsWith','authorization','Basic','User','find','pass','Wrong\x20credentials.','catch','Bearer','Unknown\x20authorization\x20format','query','getUuid','apikey','then','sub','isEqual','apiKeyNonce','API\x20access\x20key\x20is\x20not\x20valid\x20anymore','Invalid\x20API\x20access\x20key','User\x20not\x20found.','User\x20object\x20not\x20found.','canUpdate','../../config/license/util','Forbidden','isMiddleware','signToken','cookie','retrieveApiKey','isNil','apiKeyIat','generateApiKey','regenerateApiKey','Please\x20use\x20the\x20previous\x20API\x20access\x20key\x20to\x20generate\x20a\x20new\x20one','promisify','sign','secret','options','verify','toString','hex','floor','now','HS512','../../mysqldb','lodash','jsonwebtoken','express-jwt','composable-middleware','basic-auth','crypto','secrets','session','role','fullname','name','internal','email','userpic','permissions','md5secret','chatPause','mailPause','faxPause','smsPause','openchannelPause','pauseType','showWebBar','crudPermissions','passwordResetAt','alias','phoneBarAutoAnswer','phoneBarAutoAnswerDelay','phoneBarDnd','phoneBarEnableRecording','phoneBarEnableSettings','phoneBarExpires'];(function(_0x18c08a,_0x46e340){var _0x388429=function(_0x27d239){while(--_0x27d239){_0x18c08a['push'](_0x18c08a['shift']());}};_0x388429(++_0x46e340);}(_0x6a9b,0x97));var _0xb6a9=function(_0x2d1f6f,_0x239dec){_0x2d1f6f=_0x2d1f6f-0x0;var _0x2b8c80=_0x6a9b[_0x2d1f6f];return _0x2b8c80;};'use strict';var db=require(_0xb6a9('0x0'))['db'];var config=require('../../config/environment');var hardwareConf=require('../../config/license/hardware');var _=require(_0xb6a9('0x1'));var jwt=require(_0xb6a9('0x2'));var expressJwt=require(_0xb6a9('0x3'));var compose=require(_0xb6a9('0x4'));var basicAuth=require(_0xb6a9('0x5'));var crypto=require(_0xb6a9('0x6'));var BPromise=require('bluebird');var validateJwt=expressJwt({'secret':config[_0xb6a9('0x7')][_0xb6a9('0x8')]});var userAttributes=['id',_0xb6a9('0x9'),_0xb6a9('0xa'),_0xb6a9('0xb'),_0xb6a9('0xc'),_0xb6a9('0xd'),_0xb6a9('0xe'),_0xb6a9('0xf'),_0xb6a9('0x10'),'voicePause',_0xb6a9('0x11'),_0xb6a9('0x12'),_0xb6a9('0x13'),_0xb6a9('0x14'),_0xb6a9('0x15'),_0xb6a9('0x16'),_0xb6a9('0x17'),'lastLoginAt','lastPauseAt',_0xb6a9('0x18'),'allowmessenger',_0xb6a9('0x19'),_0xb6a9('0x1a'),_0xb6a9('0x1b'),_0xb6a9('0x1c'),_0xb6a9('0x1d'),_0xb6a9('0x1e'),'phoneBarEnableDtmfTone',_0xb6a9('0x1f'),_0xb6a9('0x20'),_0xb6a9('0x21'),_0xb6a9('0x22'),_0xb6a9('0x23'),_0xb6a9('0x24'),_0xb6a9('0x25'),'userProfileId'];exports[_0xb6a9('0x26')]=function(){return this[_0xb6a9('0x27')](!![])[_0xb6a9('0x28')](function(_0x29204f,_0x239aa3,_0x348bb8){if(_0x29204f[_0xb6a9('0x29')]){_0x348bb8();}else{return db['ChatInteraction']['findOne']({'where':{'id':_0x29204f[_0xb6a9('0x2a')]['id']},'attributes':['id',_0xb6a9('0x2b'),'disposition'],'raw':!![]})['then'](function(_0x718cbb){if(_0x718cbb&&_0x718cbb[_0xb6a9('0x2b')]){return _0x239aa3[_0xb6a9('0x2c')](_0x718cbb['disposition']==='unmanaged'?0x195:0x193)[_0xb6a9('0x2d')]({'message':_0x718cbb['disposition']===_0xb6a9('0x2e')?'Unmanaged.':_0xb6a9('0x2f')});}else{_0x348bb8();}})['catch'](function(_0x16538f){_0x348bb8(_0x16538f);});}});};exports[_0xb6a9('0x27')]=function isAuthenticated(_0xc8da1f){return compose()['use'](function(_0x22f04f,_0x41e186,_0x47e5c3){if(_0x22f04f[_0xb6a9('0x30')]['authorization']){if(_[_0xb6a9('0x31')](_0x22f04f['headers'][_0xb6a9('0x32')],_0xb6a9('0x33'))){var _0x1dafe6=basicAuth(_0x22f04f);db[_0xb6a9('0x34')][_0xb6a9('0x35')]({'where':{'name':_0x1dafe6[_0xb6a9('0xb')]}})['then'](function(_0x28d95f){if(!_0x28d95f||!_0x28d95f['authenticate'](_0x1dafe6[_0xb6a9('0x36')])){return _0x41e186[_0xb6a9('0x2c')](0x191)[_0xb6a9('0x2d')]({'message':_0xb6a9('0x37')});}_0x22f04f[_0xb6a9('0x29')]={'id':_0x28d95f['id']};_0x47e5c3();})[_0xb6a9('0x38')](function(_0x296175){_0x47e5c3(_0x296175);});}else if(_['startsWith'](_0x22f04f['headers'][_0xb6a9('0x32')],_0xb6a9('0x39'))){validateJwt(_0x22f04f,_0x41e186,_0x47e5c3);}else{if(_0xc8da1f){_0x47e5c3();}else{return _0x41e186['status'](0x193)[_0xb6a9('0x2d')]({'message':_0xb6a9('0x3a')});}}}else if(_0x22f04f[_0xb6a9('0x3b')]['apikey']){try{var _0x3e35b1={'audience':hardwareConf[_0xb6a9('0x3c')](),'issuer':hardwareConf[_0xb6a9('0x3c')]()};verifyJwt(_0x22f04f[_0xb6a9('0x3b')][_0xb6a9('0x3d')],_0x3e35b1)[_0xb6a9('0x3e')](function(_0x518caa){return db[_0xb6a9('0x34')][_0xb6a9('0x35')]({'where':{'id':_0x518caa[_0xb6a9('0x3f')]}})[_0xb6a9('0x3e')](function(_0xaf0ba3){if(!_0xaf0ba3||!_[_0xb6a9('0x40')](_0xaf0ba3[_0xb6a9('0x41')],_0x518caa['nonce'])){return _0x41e186[_0xb6a9('0x2c')](0x191)[_0xb6a9('0x2d')]({'message':_0xb6a9('0x42')});}_0x22f04f['user']={'id':_0xaf0ba3['id']};_0x47e5c3();});})['catch'](function(){return _0x41e186['status'](0x191)[_0xb6a9('0x2d')]({'message':_0xb6a9('0x43')});});}catch(_0x34973f){_0x47e5c3(_0x34973f);}}else if(_0xc8da1f){_0x47e5c3();}else{return _0x41e186[_0xb6a9('0x2c')](0x193)[_0xb6a9('0x2d')]({'message':_0xb6a9('0x3a')});}})[_0xb6a9('0x28')](function(_0x2130e3,_0x1acc47,_0x83c725){if(_0x2130e3['user']){db['User']['find']({'where':{'id':_0x2130e3[_0xb6a9('0x29')]['id']},'attributes':userAttributes})[_0xb6a9('0x3e')](function(_0x137ec2){if(!_0x137ec2){return _0x1acc47[_0xb6a9('0x2c')](0x194)[_0xb6a9('0x2d')]({'message':_0xb6a9('0x44')});}_0x2130e3['user']=_0x137ec2;_0x83c725();})['catch'](function(_0x3455bd){_0x83c725(_0x3455bd);});}else if(_0xc8da1f){_0x83c725();}else{return _0x1acc47[_0xb6a9('0x2c')](0x194)[_0xb6a9('0x2d')]({'message':_0xb6a9('0x45')});}});};exports[_0xb6a9('0x46')]=function canUpdate(){return compose()[_0xb6a9('0x28')](function(_0x2231f9,_0x12ca82,_0x3b64d2){return require(_0xb6a9('0x47'))['getLicense']()[_0xb6a9('0x3e')](function(_0x28b6d1){if(_0x28b6d1['update']){_0x3b64d2();}else{return _0x12ca82[_0xb6a9('0x2c')](0x193)['json']({'message':_0xb6a9('0x48')});}})[_0xb6a9('0x38')](function(_0x94b9b5){_0x3b64d2(_0x94b9b5);});});};exports[_0xb6a9('0x49')]=function(_0x5ae362,_0x1fde14,_0xb1640c){_0x5ae362['isMiddleware']=!![];return _0xb1640c();};exports[_0xb6a9('0x4a')]=function signToken(_0x5e974d){return signJwt(_0x5e974d);};exports['setTokenCookie']=function(_0x1e527c,_0x2408d5){if(!_0x1e527c[_0xb6a9('0x29')]){return _0x2408d5[_0xb6a9('0x2c')](0x194)[_0xb6a9('0x2d')]({'message':'It\x20looks\x20like\x20you\x20aren\x27t\x20logged\x20in,\x20please\x20try\x20again.'});}var _0x789ce4={'payload':{'id':_0x1e527c['user']['id'],'role':_0x1e527c[_0xb6a9('0x29')][_0xb6a9('0x9')]},'options':{'expiresIn':0x15180}};return signJwt(_0x789ce4)[_0xb6a9('0x3e')](function(_0x459675){_0x2408d5[_0xb6a9('0x4b')]('motion.token',_0x459675);_0x2408d5['redirect']('/dashboards/general');})['catch'](function(_0x3cd523){return _0x2408d5[_0xb6a9('0x2c')](0x1f4)['send'](_0x3cd523);});};exports[_0xb6a9('0x4c')]=function(_0x264110){if(_[_0xb6a9('0x4d')](_0x264110[_0xb6a9('0x41')])||_['isNil'](_0x264110[_0xb6a9('0x4e')])){return null;}else{return createJwt(_0x264110);}};exports[_0xb6a9('0x4f')]=function(_0x462a1b){_0x462a1b[_0xb6a9('0x41')]=generateNonce();_0x462a1b[_0xb6a9('0x4e')]=generateIssuedAt();return createJwt(_0x462a1b);};exports[_0xb6a9('0x50')]=function(_0x1a0e76,_0x5e5b29){var _0x1408f8=_0x1a0e76['query'][_0xb6a9('0x3d')];if(_0x1408f8){var _0xefdbd5={'nonce':_0x5e5b29[_0xb6a9('0x41')],'iat':_0x5e5b29['apiKeyIat'],'audience':hardwareConf[_0xb6a9('0x3c')](),'issuer':hardwareConf[_0xb6a9('0x3c')]()};return verifyJwt(_0x1408f8,_0xefdbd5)[_0xb6a9('0x3e')](function(){return generateApiKey(_0x5e5b29);});}else{throw{'message':_0xb6a9('0x51')};}};function signJwt(_0x1495bb){var _0x458f95=BPromise[_0xb6a9('0x52')](jwt[_0xb6a9('0x53')],{'context':jwt});var _0x5ea92d=_0x1495bb[_0xb6a9('0x54')]||config['secrets'][_0xb6a9('0x8')];return new BPromise(function(_0x336304,_0x45fa77){_0x458f95(_0x1495bb['payload'],_0x5ea92d,_0x1495bb[_0xb6a9('0x55')])['then'](function(_0x538c31){_0x336304(_0x538c31);})[_0xb6a9('0x38')](function(_0x1ce246){_0x45fa77(_0x1ce246);});});}function verifyJwt(_0x326849,_0x2f11db,_0x2867ae){var _0x2ebe15=BPromise[_0xb6a9('0x52')](jwt[_0xb6a9('0x56')],{'context':jwt});var _0x1206ec=_0x2867ae||config[_0xb6a9('0x7')]['session'];return new BPromise(function(_0x1cf25a,_0x5e79bc){_0x2ebe15(_0x326849,_0x1206ec,_0x2f11db)[_0xb6a9('0x3e')](function(_0x5cd003){_0x1cf25a(_0x5cd003);})[_0xb6a9('0x38')](function(_0x5a686c){_0x5e79bc(_0x5a686c);});});}function generateNonce(){return crypto['randomBytes'](0x10)[_0xb6a9('0x57')](_0xb6a9('0x58'));}function generateIssuedAt(){return Math[_0xb6a9('0x59')](Date[_0xb6a9('0x5a')]()/0x3e8)[_0xb6a9('0x57')]();}function createJwt(_0x4f8ba){var _0x583de8={'payload':{'iat':_0x4f8ba[_0xb6a9('0x4e')],'nonce':_0x4f8ba['apiKeyNonce']},'options':{'algorithm':_0xb6a9('0x5b'),'subject':_0x4f8ba['id'][_0xb6a9('0x57')](),'issuer':hardwareConf[_0xb6a9('0x3c')](),'audience':hardwareConf['getUuid']()}};return signJwt(_0x583de8)[_0xb6a9('0x3e')](function(_0xd741a7){return{'iat':_0x4f8ba[_0xb6a9('0x4e')],'nonce':_0x4f8ba[_0xb6a9('0x41')],'token':_0xd741a7};});}