Built motion from commit (unavailable).|2.5.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 _0x5f2f=['send','retrieveApiKey','isNil','apiKeyIat','generateApiKey','regenerateApiKey','Please\x20use\x20the\x20previous\x20API\x20access\x20key\x20to\x20generate\x20a\x20new\x20one','promisify','sign','secret','payload','options','verify','toString','hex','now','HS512','../../mysqldb','../../config/environment','../../config/license/hardware','lodash','jsonwebtoken','express-jwt','composable-middleware','basic-auth','secrets','session','role','fullname','name','internal','userpic','permissions','md5secret','chatPause','mailPause','faxPause','openchannelPause','lastLoginAt','lastPauseAt','allowmessenger','passwordResetAt','alias','phoneBarAutoAnswer','phoneBarAutoAnswerDelay','phoneBarEnableRecording','phoneBarEnableSettings','phoneBarExpires','phoneBarPrefixRequired','phoneBarRemoteControl','phoneBarRemoteControlPort','interface','userProfileId','isChatInteractionAuthorized','isAuthenticated','use','user','ChatInteraction','findOne','params','closed','disposition','then','unmanaged','Unmanaged.','catch','headers','authorization','startsWith','Basic','User','find','authenticate','pass','json','Wrong\x20credentials.','Bearer','status','apikey','getUuid','query','isEqual','apiKeyNonce','nonce','API\x20access\x20key\x20is\x20not\x20valid\x20anymore','Invalid\x20API\x20access\x20key','User\x20not\x20found.','canUpdate','../../config/license/util','getLicense','update','Forbidden','isMiddleware','signToken','setTokenCookie','cookie','motion.token','/dashboards/general'];(function(_0x5c4f6b,_0x2cdfce){var _0x104c4e=function(_0x31171b){while(--_0x31171b){_0x5c4f6b['push'](_0x5c4f6b['shift']());}};_0x104c4e(++_0x2cdfce);}(_0x5f2f,0x73));var _0xf5f2=function(_0x5a0f87,_0x38214a){_0x5a0f87=_0x5a0f87-0x0;var _0x24d4dd=_0x5f2f[_0x5a0f87];return _0x24d4dd;};'use strict';var db=require(_0xf5f2('0x0'))['db'];var config=require(_0xf5f2('0x1'));var hardwareConf=require(_0xf5f2('0x2'));var _=require(_0xf5f2('0x3'));var jwt=require(_0xf5f2('0x4'));var expressJwt=require(_0xf5f2('0x5'));var compose=require(_0xf5f2('0x6'));var basicAuth=require(_0xf5f2('0x7'));var crypto=require('crypto');var BPromise=require('bluebird');var validateJwt=expressJwt({'secret':config[_0xf5f2('0x8')][_0xf5f2('0x9')]});var userAttributes=['id',_0xf5f2('0xa'),_0xf5f2('0xb'),_0xf5f2('0xc'),_0xf5f2('0xd'),'email',_0xf5f2('0xe'),_0xf5f2('0xf'),_0xf5f2('0x10'),'voicePause',_0xf5f2('0x11'),_0xf5f2('0x12'),_0xf5f2('0x13'),'smsPause',_0xf5f2('0x14'),'pauseType','showWebBar',_0xf5f2('0x15'),_0xf5f2('0x16'),'crudPermissions',_0xf5f2('0x17'),_0xf5f2('0x18'),_0xf5f2('0x19'),_0xf5f2('0x1a'),_0xf5f2('0x1b'),_0xf5f2('0x1c'),'phoneBarEnableDtmfTone',_0xf5f2('0x1d'),_0xf5f2('0x1e'),_0xf5f2('0x1f'),_0xf5f2('0x20'),_0xf5f2('0x21'),'hotdesk',_0xf5f2('0x22'),_0xf5f2('0x23')];exports[_0xf5f2('0x24')]=function(){return this[_0xf5f2('0x25')](!![])[_0xf5f2('0x26')](function(_0x3a9dbb,_0xdb61b3,_0x395a5a){if(_0x3a9dbb[_0xf5f2('0x27')]){_0x395a5a();}else{return db[_0xf5f2('0x28')][_0xf5f2('0x29')]({'where':{'id':_0x3a9dbb[_0xf5f2('0x2a')]['id']},'attributes':['id',_0xf5f2('0x2b'),_0xf5f2('0x2c')],'raw':!![]})[_0xf5f2('0x2d')](function(_0x626999){if(_0x626999&&_0x626999[_0xf5f2('0x2b')]){return _0xdb61b3['status'](_0x626999[_0xf5f2('0x2c')]===_0xf5f2('0x2e')?0x195:0x193)['json']({'message':_0x626999['disposition']===_0xf5f2('0x2e')?_0xf5f2('0x2f'):'Forbidden.'});}else{_0x395a5a();}})[_0xf5f2('0x30')](function(_0x170042){_0x395a5a(_0x170042);});}});};exports[_0xf5f2('0x25')]=function isAuthenticated(_0x39c024){return compose()[_0xf5f2('0x26')](function(_0x4c691a,_0x21cd91,_0x4669a6){if(_0x4c691a[_0xf5f2('0x31')][_0xf5f2('0x32')]){if(_[_0xf5f2('0x33')](_0x4c691a['headers']['authorization'],_0xf5f2('0x34'))){var _0x3f79d5=basicAuth(_0x4c691a);db[_0xf5f2('0x35')][_0xf5f2('0x36')]({'where':{'name':_0x3f79d5[_0xf5f2('0xc')]}})[_0xf5f2('0x2d')](function(_0x13a3be){if(!_0x13a3be||!_0x13a3be[_0xf5f2('0x37')](_0x3f79d5[_0xf5f2('0x38')])){return _0x21cd91['status'](0x191)[_0xf5f2('0x39')]({'message':_0xf5f2('0x3a')});}_0x4c691a[_0xf5f2('0x27')]={'id':_0x13a3be['id']};_0x4669a6();})[_0xf5f2('0x30')](function(_0x198c73){_0x4669a6(_0x198c73);});}else if(_[_0xf5f2('0x33')](_0x4c691a['headers']['authorization'],_0xf5f2('0x3b'))){validateJwt(_0x4c691a,_0x21cd91,_0x4669a6);}else{if(_0x39c024){_0x4669a6();}else{return _0x21cd91[_0xf5f2('0x3c')](0x193)[_0xf5f2('0x39')]({'message':'Unknown\x20authorization\x20format'});}}}else if(_0x4c691a['query'][_0xf5f2('0x3d')]){try{var _0x50b8a2={'audience':hardwareConf[_0xf5f2('0x3e')](),'issuer':hardwareConf[_0xf5f2('0x3e')]()};verifyJwt(_0x4c691a[_0xf5f2('0x3f')]['apikey'],_0x50b8a2)['then'](function(_0x2f4778){return db['User'][_0xf5f2('0x36')]({'where':{'id':_0x2f4778['sub']}})[_0xf5f2('0x2d')](function(_0x31087c){if(!_0x31087c||!_[_0xf5f2('0x40')](_0x31087c[_0xf5f2('0x41')],_0x2f4778[_0xf5f2('0x42')])){return _0x21cd91[_0xf5f2('0x3c')](0x191)[_0xf5f2('0x39')]({'message':_0xf5f2('0x43')});}_0x4c691a['user']={'id':_0x31087c['id']};_0x4669a6();});})[_0xf5f2('0x30')](function(){return _0x21cd91[_0xf5f2('0x3c')](0x191)[_0xf5f2('0x39')]({'message':_0xf5f2('0x44')});});}catch(_0x1408b9){_0x4669a6(_0x1408b9);}}else if(_0x39c024){_0x4669a6();}else{return _0x21cd91[_0xf5f2('0x3c')](0x193)[_0xf5f2('0x39')]({'message':'Unknown\x20authorization\x20format'});}})[_0xf5f2('0x26')](function(_0xf503e8,_0x55989d,_0x3fc168){if(_0xf503e8['user']){db[_0xf5f2('0x35')][_0xf5f2('0x36')]({'where':{'id':_0xf503e8[_0xf5f2('0x27')]['id']},'attributes':userAttributes})[_0xf5f2('0x2d')](function(_0x59a6dd){if(!_0x59a6dd){return _0x55989d['status'](0x194)[_0xf5f2('0x39')]({'message':_0xf5f2('0x45')});}_0xf503e8[_0xf5f2('0x27')]=_0x59a6dd;_0x3fc168();})['catch'](function(_0x41447f){_0x3fc168(_0x41447f);});}else if(_0x39c024){_0x3fc168();}else{return _0x55989d['status'](0x194)[_0xf5f2('0x39')]({'message':'User\x20object\x20not\x20found.'});}});};exports[_0xf5f2('0x46')]=function canUpdate(){return compose()[_0xf5f2('0x26')](function(_0x5337a6,_0x29694f,_0x46eb22){return require(_0xf5f2('0x47'))[_0xf5f2('0x48')]()['then'](function(_0x5d2d82){if(_0x5d2d82[_0xf5f2('0x49')]){_0x46eb22();}else{return _0x29694f[_0xf5f2('0x3c')](0x193)[_0xf5f2('0x39')]({'message':_0xf5f2('0x4a')});}})[_0xf5f2('0x30')](function(_0xe62b57){_0x46eb22(_0xe62b57);});});};exports[_0xf5f2('0x4b')]=function(_0x4c0ac7,_0x110fe5,_0x3b4ea6){_0x4c0ac7['isMiddleware']=!![];return _0x3b4ea6();};exports[_0xf5f2('0x4c')]=function signToken(_0x3f3895){return signJwt(_0x3f3895);};exports[_0xf5f2('0x4d')]=function(_0x85b6d0,_0xd10701){if(!_0x85b6d0[_0xf5f2('0x27')]){return _0xd10701[_0xf5f2('0x3c')](0x194)[_0xf5f2('0x39')]({'message':'It\x20looks\x20like\x20you\x20aren\x27t\x20logged\x20in,\x20please\x20try\x20again.'});}var _0x31c3c={'payload':{'id':_0x85b6d0[_0xf5f2('0x27')]['id'],'role':_0x85b6d0[_0xf5f2('0x27')]['role']},'options':{'expiresIn':0x15180}};return signJwt(_0x31c3c)['then'](function(_0x59eb00){_0xd10701[_0xf5f2('0x4e')](_0xf5f2('0x4f'),_0x59eb00);_0xd10701['redirect'](_0xf5f2('0x50'));})[_0xf5f2('0x30')](function(_0x28e33f){return _0xd10701[_0xf5f2('0x3c')](0x1f4)[_0xf5f2('0x51')](_0x28e33f);});};exports[_0xf5f2('0x52')]=function(_0x1a6ec1){if(_[_0xf5f2('0x53')](_0x1a6ec1[_0xf5f2('0x41')])||_[_0xf5f2('0x53')](_0x1a6ec1[_0xf5f2('0x54')])){return null;}else{return createJwt(_0x1a6ec1);}};exports[_0xf5f2('0x55')]=function(_0x4252a3){_0x4252a3[_0xf5f2('0x41')]=generateNonce();_0x4252a3['apiKeyIat']=generateIssuedAt();return createJwt(_0x4252a3);};exports[_0xf5f2('0x56')]=function(_0x578c93,_0x3d62c1){var _0xc04f44=_0x578c93[_0xf5f2('0x3f')][_0xf5f2('0x3d')];if(_0xc04f44){var _0x31bf0e={'nonce':_0x3d62c1[_0xf5f2('0x41')],'iat':_0x3d62c1['apiKeyIat'],'audience':hardwareConf[_0xf5f2('0x3e')](),'issuer':hardwareConf[_0xf5f2('0x3e')]()};return verifyJwt(_0xc04f44,_0x31bf0e)[_0xf5f2('0x2d')](function(){return generateApiKey(_0x3d62c1);});}else{throw{'message':_0xf5f2('0x57')};}};function signJwt(_0x12124d){var _0x10753a=BPromise[_0xf5f2('0x58')](jwt[_0xf5f2('0x59')],{'context':jwt});var _0x5e6071=_0x12124d[_0xf5f2('0x5a')]||config[_0xf5f2('0x8')][_0xf5f2('0x9')];return new BPromise(function(_0x492eea,_0x1177ba){_0x10753a(_0x12124d[_0xf5f2('0x5b')],_0x5e6071,_0x12124d[_0xf5f2('0x5c')])['then'](function(_0x57a7cb){_0x492eea(_0x57a7cb);})[_0xf5f2('0x30')](function(_0x27c472){_0x1177ba(_0x27c472);});});}function verifyJwt(_0x5db519,_0x14aa81,_0x533cca){var _0x740321=BPromise['promisify'](jwt[_0xf5f2('0x5d')],{'context':jwt});var _0x5d9120=_0x533cca||config[_0xf5f2('0x8')][_0xf5f2('0x9')];return new BPromise(function(_0xbb658c,_0x11a083){_0x740321(_0x5db519,_0x5d9120,_0x14aa81)['then'](function(_0x3154c1){_0xbb658c(_0x3154c1);})[_0xf5f2('0x30')](function(_0x4f6b01){_0x11a083(_0x4f6b01);});});}function generateNonce(){return crypto['randomBytes'](0x10)[_0xf5f2('0x5e')](_0xf5f2('0x5f'));}function generateIssuedAt(){return Math['floor'](Date[_0xf5f2('0x60')]()/0x3e8)[_0xf5f2('0x5e')]();}function createJwt(_0x29c9b6){var _0x41b1c7={'payload':{'iat':_0x29c9b6['apiKeyIat'],'nonce':_0x29c9b6['apiKeyNonce']},'options':{'algorithm':_0xf5f2('0x61'),'subject':_0x29c9b6['id'][_0xf5f2('0x5e')](),'issuer':hardwareConf['getUuid'](),'audience':hardwareConf[_0xf5f2('0x3e')]()}};return signJwt(_0x41b1c7)[_0xf5f2('0x2d')](function(_0x255125){return{'iat':_0x29c9b6[_0xf5f2('0x54')],'nonce':_0x29c9b6[_0xf5f2('0x41')],'token':_0x255125};});}