Built motion from commit 3a7e82ea.|2.6.29
[motion2.git] / server / api / cloudProvider / cloudProvider.oauth.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 _0xd1a0=['oauth2Claims','oauth2/','set','iss','aud','audience','isAfter','data3','CloudProvider','findOne','then','refresh_token','data6','decryptString','POST','data5','update','catch','authorization_code','intervals','bind','findAll','all','inspect','error','[CLOUD_PROVIDER]\x20Error\x20while\x20refreshing\x20the\x20tokens\x20after\x20service\x20restart\x20error:%s','exports','crypto','jsonwebtoken','moment','ioredis','util','../../components/encryptor','../../config/environment','../../config/logger','../../config/schedule/cloud-provider','../../mysqldb','defaults','localhost','redis','https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0','openid','profile','email','offline_access','https://outlook.office365.com/IMAP.AccessAsUser.All','type','Dynamics365','push','/.default','join','data7','replace','{TENANT_ID}','code','id_token','stringify','base64','randomBytes','toString','hex','client_id','data1','response_type','redirect_uri','data4','response_mode','form_post','scope','state','nonce','prompt','map','key','value'];(function(_0x1c6eac,_0x4332c7){var _0xc286ae=function(_0x2fb253){while(--_0x2fb253){_0x1c6eac['push'](_0x1c6eac['shift']());}};_0xc286ae(++_0x4332c7);}(_0xd1a0,0xfc));var _0x0d1a=function(_0x5d7440,_0x2740ce){_0x5d7440=_0x5d7440-0x0;var _0x1a8920=_0xd1a0[_0x5d7440];return _0x1a8920;};'use strict';var _=require('lodash');var crypto=require(_0x0d1a('0x0'));var jwt=require(_0x0d1a('0x1'));var moment=require(_0x0d1a('0x2'));var Redis=require(_0x0d1a('0x3'));var rp=require('request-promise');var util=require(_0x0d1a('0x4'));var encryptor=require(_0x0d1a('0x5'));var config=require(_0x0d1a('0x6'));var logger=require(_0x0d1a('0x7'))('api');var schedule=require(_0x0d1a('0x8'));var db=require(_0x0d1a('0x9'))['db'];config['redis']=_[_0x0d1a('0xa')](config['redis'],{'host':_0x0d1a('0xb'),'port':0x18eb});var redis=new Redis(config[_0x0d1a('0xc')]);var MICROSOFT_AUTH_URL=_0x0d1a('0xd');var AZURE_AUTH_SCOPES={'Outlook365':[_0x0d1a('0xe'),_0x0d1a('0xf'),_0x0d1a('0x10'),_0x0d1a('0x11'),_0x0d1a('0x12'),'https://outlook.office.com/POP.AccessAsUser.All','https://outlook.office.com/SMTP.Send'],'Dynamics365':[_0x0d1a('0xe'),'offline_access']};var MICROSOFT_AUTH_ENDPOINT='/authorize';var MICROSOFT_TOKEN_ENDPOINT='/token';var OAUTH_REFRESH_INTERVAL=0xfa;function getAuthorizationScopes(_0x24384f){var _0x18ccb1=_['map'](AZURE_AUTH_SCOPES[_0x24384f[_0x0d1a('0x13')]]);if(_0x24384f['type']===_0x0d1a('0x14'))_0x18ccb1[_0x0d1a('0x15')](_0x24384f['data7']+_0x0d1a('0x16'));return _0x18ccb1[_0x0d1a('0x17')]('\x20');}function getAccessTokenScope(_0x1dc67){if(_0x1dc67[_0x0d1a('0x13')]==='Outlook365')return _0x0d1a('0x12');if(_0x1dc67['type']===_0x0d1a('0x14'))return _0x1dc67[_0x0d1a('0x18')]+_0x0d1a('0x16');}function generateMicrosoftAuthorizationUrl(_0x3d6751,_0x21b0c9){var _0x26c194=MICROSOFT_AUTH_URL[_0x0d1a('0x19')](_0x0d1a('0x1a'),_0x3d6751['data2']);var _0x31b07d=[_0x0d1a('0x1b'),_0x0d1a('0x1c')];var _0x4cb4ed=Buffer['from'](JSON[_0x0d1a('0x1d')]({'id':_0x21b0c9}))['toString'](_0x0d1a('0x1e'));var _0x353caf=crypto[_0x0d1a('0x1f')](0x10)[_0x0d1a('0x20')](_0x0d1a('0x21'));var _0x5a4b5a=getAuthorizationScopes(_0x3d6751);var _0x3c1845=[{'key':_0x0d1a('0x22'),'value':_0x3d6751[_0x0d1a('0x23')]},{'key':_0x0d1a('0x24'),'value':encodeURIComponent(_0x31b07d[_0x0d1a('0x17')]('\x20'))},{'key':_0x0d1a('0x25'),'value':_0x3d6751[_0x0d1a('0x26')]},{'key':_0x0d1a('0x27'),'value':_0x0d1a('0x28')},{'key':_0x0d1a('0x29'),'value':encodeURIComponent(_0x5a4b5a)},{'key':_0x0d1a('0x2a'),'value':_0x4cb4ed},{'key':_0x0d1a('0x2b'),'value':_0x353caf},{'key':_0x0d1a('0x2c'),'value':'login'}];var _0x17905c=_0x26c194+MICROSOFT_AUTH_ENDPOINT+'?'+_[_0x0d1a('0x2d')](_0x3c1845,function(_0x272f54){return _0x272f54[_0x0d1a('0x2e')]+'='+_0x272f54[_0x0d1a('0x2f')];})['join']('&');_0x3d6751[_0x0d1a('0x30')]={'issuer':_0x26c194[_0x0d1a('0x19')](_0x0d1a('0x31'),''),'audience':_0x3d6751['data1'],'state':_0x4cb4ed,'nonce':_0x353caf};redis[_0x0d1a('0x32')](_0x4cb4ed,JSON[_0x0d1a('0x1d')](_0x3d6751));return _0x17905c;}function isValidIdToken(_0x298698,_0x3b4d0d){try{var _0x5624f6=jwt['decode'](_0x298698,{'complete':!![]});var _0x442d4e=_0x5624f6['payload'];if(_0x442d4e[_0x0d1a('0x33')]!==_0x3b4d0d['issuer'])return![];if(_0x442d4e[_0x0d1a('0x34')]!==_0x3b4d0d[_0x0d1a('0x35')])return![];if(_0x442d4e['nonce']!==_0x3b4d0d[_0x0d1a('0x2b')])return![];if(moment()[_0x0d1a('0x36')](moment['unix'](_0x442d4e['exp'])))return![];return!![];}catch(_0x44e382){throw _0x44e382;}}function refreshOauth2MicrosoftAccessToken(_0x2f60f1){return Promise['resolve']()['then'](function(){if(_0x2f60f1[_0x0d1a('0x37')])return _0x2f60f1;return db[_0x0d1a('0x38')][_0x0d1a('0x39')]({'where':{'id':_0x2f60f1['id']},'raw':!![]});})[_0x0d1a('0x3a')](function(_0x121228){var _0x53fa71={'grant_type':_0x0d1a('0x3b'),'refresh_token':_0x121228[_0x0d1a('0x3c')],'scope':getAccessTokenScope(_0x121228),'redirect_uri':_0x121228[_0x0d1a('0x26')],'client_id':_0x121228['data1'],'client_secret':encryptor[_0x0d1a('0x3d')](_0x121228[_0x0d1a('0x37')])};var _0x5e9e67={'method':_0x0d1a('0x3e'),'uri':MICROSOFT_AUTH_URL[_0x0d1a('0x19')](_0x0d1a('0x1a'),_0x121228['data2'])+MICROSOFT_TOKEN_ENDPOINT,'form':_0x53fa71,'json':!![]};return rp(_0x5e9e67);})[_0x0d1a('0x3a')](function(_0x455d17){_0x2f60f1[_0x0d1a('0x3f')]=_0x455d17['access_token'];_0x2f60f1[_0x0d1a('0x3c')]=_0x455d17[_0x0d1a('0x3b')];return db['CloudProvider'][_0x0d1a('0x40')]({'data5':_0x2f60f1[_0x0d1a('0x3f')],'data6':_0x2f60f1['data6']},{'where':{'id':_0x2f60f1['id']}});})[_0x0d1a('0x3a')](function(){return _0x2f60f1;})[_0x0d1a('0x41')](function(_0x577082){logger['error']('Failed\x20to\x20refresh\x20access\x20token\x20for\x20cloud\x20provider\x20#%s,\x20-\x20err:%s',_0x2f60f1['id'],_0x577082);});}function getOauth2MicrosoftAccessToken(_0x5c5cda,_0x40748c){var _0x360991={'grant_type':_0x0d1a('0x42'),'code':_0x5c5cda,'scope':getAccessTokenScope(_0x40748c),'redirect_uri':_0x40748c[_0x0d1a('0x26')],'client_id':_0x40748c['data1'],'client_secret':encryptor[_0x0d1a('0x3d')](_0x40748c[_0x0d1a('0x37')])};var _0x26665a={'method':'POST','uri':MICROSOFT_AUTH_URL[_0x0d1a('0x19')](_0x0d1a('0x1a'),_0x40748c['data2'])+MICROSOFT_TOKEN_ENDPOINT,'form':_0x360991,'json':!![]};return rp(_0x26665a);}function startRefreshInterval(_0x287a73){var _0x412095=schedule[_0x0d1a('0x43')];if(_0x412095[_0x287a73['id']])clearInterval(_0x412095[_0x287a73['id']]);_0x412095[_0x287a73['id']]=setInterval(refreshOauth2MicrosoftAccessToken[_0x0d1a('0x44')](this,{'id':_0x287a73['id']}),OAUTH_REFRESH_INTERVAL*0x3e8);schedule[_0x0d1a('0x43')]=_0x412095;}function startAllRefreshIntervals(){return db[_0x0d1a('0x38')][_0x0d1a('0x45')]({'where':{'data6':{'$ne':null}},'raw':!![]})['then'](function(_0x262476){var _0x1a6093=_0x262476[_0x0d1a('0x2d')](function(_0x488cfc){return refreshOauth2MicrosoftAccessToken(_0x488cfc)[_0x0d1a('0x3a')](function(_0x1be2e0){startRefreshInterval(_0x1be2e0);});});return Promise[_0x0d1a('0x46')](_0x1a6093);})[_0x0d1a('0x41')](function(_0x14760d){var _0x4acbf7=_0x14760d?util[_0x0d1a('0x47')](_0x14760d,{'showHidden':![],'depth':null}):'';logger[_0x0d1a('0x48')](_0x0d1a('0x49'),_0x4acbf7);});}module[_0x0d1a('0x4a')]={'generateMicrosoftAuthorizationUrl':generateMicrosoftAuthorizationUrl,'getOauth2MicrosoftAccessToken':getOauth2MicrosoftAccessToken,'isValidIdToken':isValidIdToken,'startAllRefreshIntervals':startAllRefreshIntervals,'refreshOauth2MicrosoftAccessToken':refreshOauth2MicrosoftAccessToken,'startRefreshInterval':startRefreshInterval};