Built motion from commit (unavailable).|2.3.1
[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 _0x32a6=['redirect','/dashboards/general','retrieveApiKey','isNil','apiKeyNonce','apiKeyIat','randomBytes','hex','floor','now','toString','regenerateApiKey','Please\x20use\x20the\x20previous\x20API\x20access\x20key\x20to\x20generate\x20a\x20new\x20one','HS512','../../mysqldb','../../config/environment','../../config/license/hardware','lodash','jsonwebtoken','composable-middleware','crypto','ipaddr.js','secrets','session','role','name','internal','userpic','permissions','voicePause','chatPause','mailPause','smsPause','openchannelPause','pauseType','phoneBarRemoteControlPort','interface','userProfileId','isChatInteractionAuthorized','use','ChatInteraction','findOne','closed','disposition','unmanaged','json','Forbidden.','catch','headers','authorization','startsWith','User','find','Wrong\x20credentials.','user','Bearer','status','query','apikey','verify','getUuid','sub','isEqual','nonce','log','Unrecognized\x20API\x20access\x20key','Unknown\x20authorization\x20format','then','User\x20not\x20found.','User\x20object\x20not\x20found.','isAuthenticated','../../config/license/util','getLicense','Forbidden','sign','hasRole','Required\x20role\x20needs\x20to\x20be\x20set','indexOf','userRoles','setTokenCookie','It\x20looks\x20like\x20you\x20aren\x27t\x20logged\x20in,\x20please\x20try\x20again.','cookie','motion.user','stringify','pick'];(function(_0x38436b,_0x2f03ec){var _0x7407d0=function(_0x30b9f2){while(--_0x30b9f2){_0x38436b['push'](_0x38436b['shift']());}};_0x7407d0(++_0x2f03ec);}(_0x32a6,0x162));var _0x632a=function(_0xce2ebf,_0x25fa94){_0xce2ebf=_0xce2ebf-0x0;var _0x12e790=_0x32a6[_0xce2ebf];return _0x12e790;};'use strict';var db=require(_0x632a('0x0'))['db'];var config=require(_0x632a('0x1'));var hardwareConf=require(_0x632a('0x2'));var _=require(_0x632a('0x3'));var jwt=require(_0x632a('0x4'));var expressJwt=require('express-jwt');var compose=require(_0x632a('0x5'));var basicAuth=require('basic-auth');var crypto=require(_0x632a('0x6'));var ipaddr=require(_0x632a('0x7'));var validateJwt=expressJwt({'secret':config[_0x632a('0x8')][_0x632a('0x9')]});var userAttributes=['id',_0x632a('0xa'),'fullname',_0x632a('0xb'),_0x632a('0xc'),'email',_0x632a('0xd'),_0x632a('0xe'),_0x632a('0xf'),_0x632a('0x10'),_0x632a('0x11'),'faxPause',_0x632a('0x12'),_0x632a('0x13'),_0x632a('0x14'),'showWebBar',_0x632a('0x15'),'phoneBarRemoteControl',_0x632a('0x16'),_0x632a('0x17')];exports[_0x632a('0x18')]=function(){return isAuthenticated(!![])[_0x632a('0x19')](function(_0x19bd64,_0x27de80,_0x500036){if(_0x19bd64['user']){_0x500036();}else{return db[_0x632a('0x1a')][_0x632a('0x1b')]({'where':{'id':_0x19bd64['params']['id']},'attributes':['id',_0x632a('0x1c'),_0x632a('0x1d')],'raw':!![]})['then'](function(_0x5d7cd9){if(_0x5d7cd9&&_0x5d7cd9[_0x632a('0x1c')]){return _0x27de80['status'](_0x5d7cd9[_0x632a('0x1d')]===_0x632a('0x1e')?0x195:0x193)[_0x632a('0x1f')]({'message':_0x5d7cd9['disposition']===_0x632a('0x1e')?'Unmanaged.':_0x632a('0x20')});}else{_0x500036();}})[_0x632a('0x21')](function(_0x49d378){_0x500036(_0x49d378);});}});};function isAuthenticated(_0x55aa9e){return compose()[_0x632a('0x19')](function(_0x37c210,_0x3ad007,_0x4f7eb4){if(_0x37c210[_0x632a('0x22')][_0x632a('0x23')]){if(_[_0x632a('0x24')](_0x37c210[_0x632a('0x22')][_0x632a('0x23')],'Basic')){var _0x2a5d3e=basicAuth(_0x37c210);db[_0x632a('0x25')][_0x632a('0x26')]({'where':{'name':_0x2a5d3e[_0x632a('0xb')]}})['then'](function(_0xbe45e2){if(!_0xbe45e2||!_0xbe45e2['authenticate'](_0x2a5d3e['pass'])){return _0x3ad007['status'](0x191)[_0x632a('0x1f')]({'message':_0x632a('0x27')});}_0x37c210[_0x632a('0x28')]={'id':_0xbe45e2['id']};_0x4f7eb4();})[_0x632a('0x21')](function(_0x1ae0f9){_0x4f7eb4(_0x1ae0f9);});}else if(_[_0x632a('0x24')](_0x37c210[_0x632a('0x22')][_0x632a('0x23')],_0x632a('0x29'))){validateJwt(_0x37c210,_0x3ad007,_0x4f7eb4);}else{if(_0x55aa9e){_0x4f7eb4();}else{return _0x3ad007[_0x632a('0x2a')](0x193)['json']({'message':'Unknown\x20authorization\x20format'});}}}else if(_0x37c210[_0x632a('0x2b')][_0x632a('0x2c')]){try{var _0x4e146c=jwt[_0x632a('0x2d')](_0x37c210[_0x632a('0x2b')][_0x632a('0x2c')],config[_0x632a('0x8')][_0x632a('0x9')],{'audience':hardwareConf['getUuid'](),'issuer':hardwareConf[_0x632a('0x2e')]()});db[_0x632a('0x25')]['find']({'where':{'id':_0x4e146c[_0x632a('0x2f')]}})['then'](function(_0x20567f){if(!_0x20567f||!_[_0x632a('0x30')](_0x20567f['apiKeyNonce'],_0x4e146c[_0x632a('0x31')])){return _0x3ad007[_0x632a('0x2a')](0x193)[_0x632a('0x1f')]({'message':'API\x20access\x20key\x20is\x20not\x20valid\x20anymore'});}_0x37c210[_0x632a('0x28')]={'id':_0x20567f['id']};_0x4f7eb4();})['catch'](function(_0x234a4c){_0x4f7eb4(_0x234a4c);});}catch(_0x1ee145){console[_0x632a('0x32')](_0x1ee145);return _0x3ad007[_0x632a('0x2a')](0x193)[_0x632a('0x1f')]({'message':_0x632a('0x33')});}}else if(_0x55aa9e){_0x4f7eb4();}else{return _0x3ad007[_0x632a('0x2a')](0x193)[_0x632a('0x1f')]({'message':_0x632a('0x34')});}})[_0x632a('0x19')](function(_0x137913,_0x2c0487,_0x176fbe){if(_0x137913[_0x632a('0x28')]){db['User']['find']({'where':{'id':_0x137913[_0x632a('0x28')]['id']},'attributes':userAttributes})[_0x632a('0x35')](function(_0x39a0da){if(!_0x39a0da){return _0x2c0487[_0x632a('0x2a')](0x194)['json']({'message':_0x632a('0x36')});}_0x137913['user']=_0x39a0da;_0x176fbe();})[_0x632a('0x21')](function(_0x3c9b1f){_0x176fbe(_0x3c9b1f);});}else if(_0x55aa9e){_0x176fbe();}else{return _0x2c0487[_0x632a('0x2a')](0x194)[_0x632a('0x1f')]({'message':_0x632a('0x37')});}});}exports[_0x632a('0x38')]=isAuthenticated;function canUpdate(){return compose()[_0x632a('0x19')](function(_0x4c43db,_0x3e1e32,_0x193678){return require(_0x632a('0x39'))[_0x632a('0x3a')]()[_0x632a('0x35')](function(_0xc49565){if(_0xc49565['update']){_0x193678();}else{return _0x3e1e32['status'](0x193)['json']({'message':_0x632a('0x3b')});}})[_0x632a('0x21')](function(_0x4d8a36){_0x193678(_0x4d8a36);});});}exports['canUpdate']=canUpdate;function signToken(_0x41cce4,_0x4fea62){return jwt[_0x632a('0x3c')]({'id':_0x41cce4,'role':_0x4fea62},config[_0x632a('0x8')]['session'],{'expiresIn':0x15180});}exports['signToken']=signToken;exports[_0x632a('0x3d')]=function(_0x297300){if(!_0x297300){throw new Error(_0x632a('0x3e'));}return compose()[_0x632a('0x19')](isAuthenticated())[_0x632a('0x19')](function meetsRequirements(_0x235ab5,_0x4a6dad,_0xdb9ac2){if(config['userRoles'][_0x632a('0x3f')](_0x235ab5[_0x632a('0x28')][_0x632a('0xa')])>=config[_0x632a('0x40')]['indexOf'](_0x297300)){return _0xdb9ac2();}else{return _0x4a6dad[_0x632a('0x2a')](0x193)['json']({'message':_0x632a('0x3b')});}});};exports[_0x632a('0x41')]=function(_0x514bb1,_0x144de2){if(!_0x514bb1[_0x632a('0x28')]){return _0x144de2[_0x632a('0x2a')](0x194)[_0x632a('0x1f')]({'message':_0x632a('0x42')});}var _0x59444a=signToken(_0x514bb1[_0x632a('0x28')]['id'],_0x514bb1['user']['role']);_0x144de2[_0x632a('0x43')]('motion.token',_0x59444a);_0x144de2['cookie'](_0x632a('0x44'),JSON[_0x632a('0x45')](_[_0x632a('0x46')](_0x514bb1[_0x632a('0x28')],userAttributes)));_0x144de2[_0x632a('0x47')](_0x632a('0x48'));};exports[_0x632a('0x49')]=function(_0x4cd717){if(_[_0x632a('0x4a')](_0x4cd717[_0x632a('0x4b')])||_[_0x632a('0x4a')](_0x4cd717[_0x632a('0x4c')]))return null;else return createJwt(_0x4cd717);};exports['generateApiKey']=function(_0x253c76){_0x253c76['apiKeyNonce']=crypto[_0x632a('0x4d')](0x10)['toString'](_0x632a('0x4e'));_0x253c76[_0x632a('0x4c')]=Math[_0x632a('0x4f')](Date[_0x632a('0x50')]()/0x3e8)[_0x632a('0x51')]();return createJwt(_0x253c76);};exports[_0x632a('0x52')]=function(_0x1cb434,_0x463773){if(_0x1cb434[_0x632a('0x2b')][_0x632a('0x2c')]){jwt[_0x632a('0x2d')](_0x1cb434[_0x632a('0x2b')][_0x632a('0x2c')],config[_0x632a('0x8')]['session'],{'nonce':_0x463773['apiKeyNonce'],'iat':_0x463773[_0x632a('0x4c')],'audience':hardwareConf['getUuid'](),'issuer':hardwareConf[_0x632a('0x2e')]()});return generateApiKey(_0x463773);}else{throw{'message':_0x632a('0x53')};}};function createJwt(_0x289b12){return jwt[_0x632a('0x3c')]({'iat':_0x289b12[_0x632a('0x4c')],'nonce':_0x289b12[_0x632a('0x4b')]},config[_0x632a('0x8')][_0x632a('0x9')],{'algorithm':_0x632a('0x54'),'subject':_0x289b12['id'][_0x632a('0x51')](),'issuer':hardwareConf[_0x632a('0x2e')](),'audience':hardwareConf['getUuid']()});}