a5c2f7c90a7874656180b4f8b2e4b3fc5f82e1ed
[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 _0xe838=['query','apikey','verify','session','getUuid','User','sub','isEqual','API\x20access\x20key\x20is\x20not\x20valid\x20anymore','log','Unrecognized\x20API\x20access\x20key','User\x20not\x20found.','User\x20object\x20not\x20found.','isAuthenticated','getLicense','Forbidden','canUpdate','signToken','hasRole','Required\x20role\x20needs\x20to\x20be\x20set','userRoles','indexOf','isMiddleware','setTokenCookie','It\x20looks\x20like\x20you\x20aren\x27t\x20logged\x20in,\x20please\x20try\x20again.','cookie','pick','redirect','/dashboards/general','retrieveApiKey','isNil','apiKeyIat','generateApiKey','randomBytes','toString','hex','regenerateApiKey','apiKeyNonce','Please\x20use\x20the\x20previous\x20API\x20access\x20key\x20to\x20generate\x20a\x20new\x20one','sign','HS512','../../mysqldb','../../config/environment','lodash','express-jwt','composable-middleware','crypto','ipaddr.js','secrets','role','fullname','name','internal','email','chatPause','smsPause','pauseType','phoneBarRemoteControlPort','isChatInteractionAuthorized','use','user','ChatInteraction','findOne','params','closed','then','status','disposition','unmanaged','json','authorization','startsWith','Basic','find','authenticate','Wrong\x20credentials.','catch','headers','Bearer','Unknown\x20authorization\x20format'];(function(_0x589f05,_0x1c5a16){var _0x3a11b4=function(_0x1ec7fb){while(--_0x1ec7fb){_0x589f05['push'](_0x589f05['shift']());}};_0x3a11b4(++_0x1c5a16);}(_0xe838,0x119));var _0x8e83=function(_0x122ef9,_0x451d2a){_0x122ef9=_0x122ef9-0x0;var _0x42fba0=_0xe838[_0x122ef9];return _0x42fba0;};'use strict';var db=require(_0x8e83('0x0'))['db'];var config=require(_0x8e83('0x1'));var hardwareConf=require('../../config/license/hardware');var _=require(_0x8e83('0x2'));var jwt=require('jsonwebtoken');var expressJwt=require(_0x8e83('0x3'));var compose=require(_0x8e83('0x4'));var basicAuth=require('basic-auth');var crypto=require(_0x8e83('0x5'));var ipaddr=require(_0x8e83('0x6'));var validateJwt=expressJwt({'secret':config[_0x8e83('0x7')]['session']});var userAttributes=['id',_0x8e83('0x8'),_0x8e83('0x9'),_0x8e83('0xa'),_0x8e83('0xb'),_0x8e83('0xc'),'userpic','permissions','voicePause',_0x8e83('0xd'),'mailPause','faxPause',_0x8e83('0xe'),'openchannelPause',_0x8e83('0xf'),'showWebBar',_0x8e83('0x10'),'phoneBarRemoteControl','interface','userProfileId'];exports[_0x8e83('0x11')]=function(){return isAuthenticated(!![])[_0x8e83('0x12')](function(_0x13394c,_0x4288d7,_0x1cfb0d){if(_0x13394c[_0x8e83('0x13')]){_0x1cfb0d();}else{return db[_0x8e83('0x14')][_0x8e83('0x15')]({'where':{'id':_0x13394c[_0x8e83('0x16')]['id']},'attributes':['id',_0x8e83('0x17'),'disposition'],'raw':!![]})[_0x8e83('0x18')](function(_0xaa2c60){if(_0xaa2c60&&_0xaa2c60[_0x8e83('0x17')]){return _0x4288d7[_0x8e83('0x19')](_0xaa2c60[_0x8e83('0x1a')]===_0x8e83('0x1b')?0x195:0x193)[_0x8e83('0x1c')]({'message':_0xaa2c60['disposition']===_0x8e83('0x1b')?'Unmanaged.':'Forbidden.'});}else{_0x1cfb0d();}})['catch'](function(_0x155393){_0x1cfb0d(_0x155393);});}});};function isAuthenticated(_0x5c8dae){return compose()[_0x8e83('0x12')](function(_0xb6d675,_0x3cf733,_0x47ce10){if(_0xb6d675['headers'][_0x8e83('0x1d')]){if(_[_0x8e83('0x1e')](_0xb6d675['headers'][_0x8e83('0x1d')],_0x8e83('0x1f'))){var _0x121cd2=basicAuth(_0xb6d675);db['User'][_0x8e83('0x20')]({'where':{'name':_0x121cd2[_0x8e83('0xa')]}})[_0x8e83('0x18')](function(_0x54908f){if(!_0x54908f||!_0x54908f[_0x8e83('0x21')](_0x121cd2['pass'])){return _0x3cf733['status'](0x191)[_0x8e83('0x1c')]({'message':_0x8e83('0x22')});}_0xb6d675[_0x8e83('0x13')]={'id':_0x54908f['id']};_0x47ce10();})[_0x8e83('0x23')](function(_0x3636c3){_0x47ce10(_0x3636c3);});}else if(_[_0x8e83('0x1e')](_0xb6d675[_0x8e83('0x24')]['authorization'],_0x8e83('0x25'))){validateJwt(_0xb6d675,_0x3cf733,_0x47ce10);}else{if(_0x5c8dae){_0x47ce10();}else{return _0x3cf733['status'](0x193)[_0x8e83('0x1c')]({'message':_0x8e83('0x26')});}}}else if(_0xb6d675[_0x8e83('0x27')][_0x8e83('0x28')]){try{var _0x9042a8=jwt[_0x8e83('0x29')](_0xb6d675['query'][_0x8e83('0x28')],config[_0x8e83('0x7')][_0x8e83('0x2a')],{'audience':hardwareConf[_0x8e83('0x2b')](),'issuer':hardwareConf['getUuid']()});db[_0x8e83('0x2c')]['find']({'where':{'id':_0x9042a8[_0x8e83('0x2d')]}})[_0x8e83('0x18')](function(_0x3ccf9c){if(!_0x3ccf9c||!_[_0x8e83('0x2e')](_0x3ccf9c['apiKeyNonce'],_0x9042a8['nonce'])){return _0x3cf733[_0x8e83('0x19')](0x193)[_0x8e83('0x1c')]({'message':_0x8e83('0x2f')});}_0xb6d675[_0x8e83('0x13')]={'id':_0x3ccf9c['id']};_0x47ce10();})[_0x8e83('0x23')](function(_0x5e1a81){_0x47ce10(_0x5e1a81);});}catch(_0x3cf636){console[_0x8e83('0x30')](_0x3cf636);return _0x3cf733[_0x8e83('0x19')](0x193)[_0x8e83('0x1c')]({'message':_0x8e83('0x31')});}}else if(_0x5c8dae){_0x47ce10();}else{return _0x3cf733[_0x8e83('0x19')](0x193)[_0x8e83('0x1c')]({'message':_0x8e83('0x26')});}})[_0x8e83('0x12')](function(_0x393d6f,_0x3bb13a,_0x56a6a8){if(_0x393d6f[_0x8e83('0x13')]){db['User'][_0x8e83('0x20')]({'where':{'id':_0x393d6f['user']['id']},'attributes':userAttributes})[_0x8e83('0x18')](function(_0x486df1){if(!_0x486df1){return _0x3bb13a[_0x8e83('0x19')](0x194)['json']({'message':_0x8e83('0x32')});}_0x393d6f[_0x8e83('0x13')]=_0x486df1;_0x56a6a8();})[_0x8e83('0x23')](function(_0x53c600){_0x56a6a8(_0x53c600);});}else if(_0x5c8dae){_0x56a6a8();}else{return _0x3bb13a[_0x8e83('0x19')](0x194)['json']({'message':_0x8e83('0x33')});}});}exports[_0x8e83('0x34')]=isAuthenticated;function canUpdate(){return compose()[_0x8e83('0x12')](function(_0x5c6ec7,_0x1a70c9,_0x4a70ef){return require('../../config/license/util')[_0x8e83('0x35')]()['then'](function(_0x1c72e8){if(_0x1c72e8['update']){_0x4a70ef();}else{return _0x1a70c9[_0x8e83('0x19')](0x193)[_0x8e83('0x1c')]({'message':_0x8e83('0x36')});}})[_0x8e83('0x23')](function(_0xbe882e){_0x4a70ef(_0xbe882e);});});}exports[_0x8e83('0x37')]=canUpdate;function signToken(_0x324ebd,_0x583dc){return jwt['sign']({'id':_0x324ebd,'role':_0x583dc},config['secrets']['session'],{'expiresIn':0x15180});}exports[_0x8e83('0x38')]=signToken;exports[_0x8e83('0x39')]=function(_0x4bb795){if(!_0x4bb795){throw new Error(_0x8e83('0x3a'));}return compose()[_0x8e83('0x12')](isAuthenticated())[_0x8e83('0x12')](function meetsRequirements(_0x3b02a9,_0x5ad479,_0x4f7a8d){if(config[_0x8e83('0x3b')][_0x8e83('0x3c')](_0x3b02a9['user'][_0x8e83('0x8')])>=config[_0x8e83('0x3b')][_0x8e83('0x3c')](_0x4bb795)){return _0x4f7a8d();}else{return _0x5ad479[_0x8e83('0x19')](0x193)[_0x8e83('0x1c')]({'message':_0x8e83('0x36')});}});};exports[_0x8e83('0x3d')]=function(_0x3e5a26,_0x1f4908,_0x14c263){_0x3e5a26[_0x8e83('0x3d')]=!![];return _0x14c263();};exports[_0x8e83('0x3e')]=function(_0x1a7333,_0x3a8b11){if(!_0x1a7333[_0x8e83('0x13')]){return _0x3a8b11['status'](0x194)['json']({'message':_0x8e83('0x3f')});}var _0x49094f=signToken(_0x1a7333[_0x8e83('0x13')]['id'],_0x1a7333['user'][_0x8e83('0x8')]);_0x3a8b11['cookie']('motion.token',_0x49094f);_0x3a8b11[_0x8e83('0x40')]('motion.user',JSON['stringify'](_[_0x8e83('0x41')](_0x1a7333['user'],userAttributes)));_0x3a8b11[_0x8e83('0x42')](_0x8e83('0x43'));};exports[_0x8e83('0x44')]=function(_0x5a5d90){if(_[_0x8e83('0x45')](_0x5a5d90['apiKeyNonce'])||_[_0x8e83('0x45')](_0x5a5d90[_0x8e83('0x46')]))return null;else return createJwt(_0x5a5d90);};exports[_0x8e83('0x47')]=function(_0x578eec){_0x578eec['apiKeyNonce']=crypto[_0x8e83('0x48')](0x10)[_0x8e83('0x49')](_0x8e83('0x4a'));_0x578eec['apiKeyIat']=Math['floor'](Date['now']()/0x3e8)[_0x8e83('0x49')]();return createJwt(_0x578eec);};exports[_0x8e83('0x4b')]=function(_0x2bcea3,_0x1049ef){if(_0x2bcea3['query'][_0x8e83('0x28')]){jwt[_0x8e83('0x29')](_0x2bcea3[_0x8e83('0x27')][_0x8e83('0x28')],config['secrets'][_0x8e83('0x2a')],{'nonce':_0x1049ef[_0x8e83('0x4c')],'iat':_0x1049ef[_0x8e83('0x46')],'audience':hardwareConf[_0x8e83('0x2b')](),'issuer':hardwareConf[_0x8e83('0x2b')]()});return generateApiKey(_0x1049ef);}else{throw{'message':_0x8e83('0x4d')};}};function createJwt(_0x110c44){return jwt[_0x8e83('0x4e')]({'iat':_0x110c44['apiKeyIat'],'nonce':_0x110c44[_0x8e83('0x4c')]},config[_0x8e83('0x7')][_0x8e83('0x2a')],{'algorithm':_0x8e83('0x4f'),'subject':_0x110c44['id'][_0x8e83('0x49')](),'issuer':hardwareConf[_0x8e83('0x2b')](),'audience':hardwareConf['getUuid']()});}