Built motion from commit ae138b72.|2.6.28
[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 _0xcb1a=['value','oauth2Claims','oauth2/','set','decode','payload','iss','issuer','audience','isAfter','unix','resolve','then','data3','CloudProvider','findOne','refresh_token','data6','decryptString','data5','access_token','catch','error','Failed\x20to\x20refresh\x20access\x20token\x20for\x20cloud\x20provider\x20#%s,\x20-\x20err:%s','POST','bind','intervals','findAll','all','inspect','[CLOUD_PROVIDER]\x20Error\x20while\x20refreshing\x20the\x20tokens\x20after\x20service\x20restart\x20error:%s','lodash','crypto','jsonwebtoken','moment','ioredis','request-promise','util','../../components/encryptor','../../config/environment','../../config/logger','api','../../mysqldb','redis','defaults','localhost','https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0','profile','email','offline_access','https://outlook.office.com/POP.AccessAsUser.All','https://outlook.office.com/SMTP.Send','openid','/authorize','/token','type','Dynamics365','push','join','Outlook365','/.default','replace','{TENANT_ID}','data2','code','id_token','stringify','base64','randomBytes','toString','data1','response_type','data4','response_mode','form_post','scope','nonce','prompt','login','map','key'];(function(_0x51bb0d,_0x28577e){var _0x2dfcd0=function(_0x9fb1c5){while(--_0x9fb1c5){_0x51bb0d['push'](_0x51bb0d['shift']());}};_0x2dfcd0(++_0x28577e);}(_0xcb1a,0x1b4));var _0xacb1=function(_0xed2b2,_0x1ff3f2){_0xed2b2=_0xed2b2-0x0;var _0x144c7a=_0xcb1a[_0xed2b2];return _0x144c7a;};'use strict';var _=require(_0xacb1('0x0'));var crypto=require(_0xacb1('0x1'));var jwt=require(_0xacb1('0x2'));var moment=require(_0xacb1('0x3'));var Redis=require(_0xacb1('0x4'));var rp=require(_0xacb1('0x5'));var util=require(_0xacb1('0x6'));var encryptor=require(_0xacb1('0x7'));var config=require(_0xacb1('0x8'));var logger=require(_0xacb1('0x9'))(_0xacb1('0xa'));var schedule=require('../../config/schedule/cloud-provider');var db=require(_0xacb1('0xb'))['db'];config[_0xacb1('0xc')]=_[_0xacb1('0xd')](config[_0xacb1('0xc')],{'host':_0xacb1('0xe'),'port':0x18eb});var redis=new Redis(config[_0xacb1('0xc')]);var MICROSOFT_AUTH_URL=_0xacb1('0xf');var AZURE_AUTH_SCOPES={'Outlook365':['openid',_0xacb1('0x10'),_0xacb1('0x11'),_0xacb1('0x12'),'https://outlook.office365.com/IMAP.AccessAsUser.All',_0xacb1('0x13'),_0xacb1('0x14')],'Dynamics365':[_0xacb1('0x15'),_0xacb1('0x12')]};var MICROSOFT_AUTH_ENDPOINT=_0xacb1('0x16');var MICROSOFT_TOKEN_ENDPOINT=_0xacb1('0x17');var OAUTH_REFRESH_INTERVAL=0xfa;function getAuthorizationScopes(_0x242127){var _0x32d335=_['map'](AZURE_AUTH_SCOPES[_0x242127[_0xacb1('0x18')]]);if(_0x242127[_0xacb1('0x18')]===_0xacb1('0x19'))_0x32d335[_0xacb1('0x1a')](_0x242127['data7']+'/.default');return _0x32d335[_0xacb1('0x1b')]('\x20');}function getAccessTokenScope(_0x3db9e4){if(_0x3db9e4[_0xacb1('0x18')]===_0xacb1('0x1c'))return'https://outlook.office365.com/IMAP.AccessAsUser.All';if(_0x3db9e4[_0xacb1('0x18')]===_0xacb1('0x19'))return _0x3db9e4['data7']+_0xacb1('0x1d');}function generateMicrosoftAuthorizationUrl(_0x14ed6d,_0x52d757){var _0x14c548=MICROSOFT_AUTH_URL[_0xacb1('0x1e')](_0xacb1('0x1f'),_0x14ed6d[_0xacb1('0x20')]);var _0x347ad0=[_0xacb1('0x21'),_0xacb1('0x22')];var _0x5dd4fe=Buffer['from'](JSON[_0xacb1('0x23')]({'id':_0x52d757}))['toString'](_0xacb1('0x24'));var _0x12274f=crypto[_0xacb1('0x25')](0x10)[_0xacb1('0x26')]('hex');var _0x468cc8=getAuthorizationScopes(_0x14ed6d);var _0x242c9a=[{'key':'client_id','value':_0x14ed6d[_0xacb1('0x27')]},{'key':_0xacb1('0x28'),'value':encodeURIComponent(_0x347ad0[_0xacb1('0x1b')]('\x20'))},{'key':'redirect_uri','value':_0x14ed6d[_0xacb1('0x29')]},{'key':_0xacb1('0x2a'),'value':_0xacb1('0x2b')},{'key':_0xacb1('0x2c'),'value':encodeURIComponent(_0x468cc8)},{'key':'state','value':_0x5dd4fe},{'key':_0xacb1('0x2d'),'value':_0x12274f},{'key':_0xacb1('0x2e'),'value':_0xacb1('0x2f')}];var _0xcdce6d=_0x14c548+MICROSOFT_AUTH_ENDPOINT+'?'+_[_0xacb1('0x30')](_0x242c9a,function(_0x172106){return _0x172106[_0xacb1('0x31')]+'='+_0x172106[_0xacb1('0x32')];})['join']('&');_0x14ed6d[_0xacb1('0x33')]={'issuer':_0x14c548['replace'](_0xacb1('0x34'),''),'audience':_0x14ed6d['data1'],'state':_0x5dd4fe,'nonce':_0x12274f};redis[_0xacb1('0x35')](_0x5dd4fe,JSON[_0xacb1('0x23')](_0x14ed6d));return _0xcdce6d;}function isValidIdToken(_0x35e20a,_0x45cba3){try{var _0x15f004=jwt[_0xacb1('0x36')](_0x35e20a,{'complete':!![]});var _0x39a8e2=_0x15f004[_0xacb1('0x37')];if(_0x39a8e2[_0xacb1('0x38')]!==_0x45cba3[_0xacb1('0x39')])return![];if(_0x39a8e2['aud']!==_0x45cba3[_0xacb1('0x3a')])return![];if(_0x39a8e2[_0xacb1('0x2d')]!==_0x45cba3['nonce'])return![];if(moment()[_0xacb1('0x3b')](moment[_0xacb1('0x3c')](_0x39a8e2['exp'])))return![];return!![];}catch(_0x1a71fe){throw _0x1a71fe;}}function refreshOauth2MicrosoftAccessToken(_0x3a8f41){return Promise[_0xacb1('0x3d')]()[_0xacb1('0x3e')](function(){if(_0x3a8f41[_0xacb1('0x3f')])return _0x3a8f41;return db[_0xacb1('0x40')][_0xacb1('0x41')]({'where':{'id':_0x3a8f41['id']},'raw':!![]});})[_0xacb1('0x3e')](function(_0x12cc94){var _0x380e35={'grant_type':_0xacb1('0x42'),'refresh_token':_0x12cc94[_0xacb1('0x43')],'scope':getAccessTokenScope(_0x12cc94),'redirect_uri':_0x12cc94[_0xacb1('0x29')],'client_id':_0x12cc94[_0xacb1('0x27')],'client_secret':encryptor[_0xacb1('0x44')](_0x12cc94['data3'])};var _0x367d85={'method':'POST','uri':MICROSOFT_AUTH_URL[_0xacb1('0x1e')](_0xacb1('0x1f'),_0x12cc94[_0xacb1('0x20')])+MICROSOFT_TOKEN_ENDPOINT,'form':_0x380e35,'json':!![]};return rp(_0x367d85);})['then'](function(_0x230b6){_0x3a8f41[_0xacb1('0x45')]=_0x230b6[_0xacb1('0x46')];_0x3a8f41[_0xacb1('0x43')]=_0x230b6[_0xacb1('0x42')];return db[_0xacb1('0x40')]['update']({'data5':_0x3a8f41[_0xacb1('0x45')],'data6':_0x3a8f41[_0xacb1('0x43')]},{'where':{'id':_0x3a8f41['id']}});})[_0xacb1('0x3e')](function(){return _0x3a8f41;})[_0xacb1('0x47')](function(_0x5515b2){logger[_0xacb1('0x48')](_0xacb1('0x49'),_0x3a8f41['id'],_0x5515b2);});}function getOauth2MicrosoftAccessToken(_0xaa9145,_0x579b40){var _0x450440={'grant_type':'authorization_code','code':_0xaa9145,'scope':getAccessTokenScope(_0x579b40),'redirect_uri':_0x579b40[_0xacb1('0x29')],'client_id':_0x579b40[_0xacb1('0x27')],'client_secret':encryptor[_0xacb1('0x44')](_0x579b40[_0xacb1('0x3f')])};var _0x196c77={'method':_0xacb1('0x4a'),'uri':MICROSOFT_AUTH_URL[_0xacb1('0x1e')](_0xacb1('0x1f'),_0x579b40[_0xacb1('0x20')])+MICROSOFT_TOKEN_ENDPOINT,'form':_0x450440,'json':!![]};return rp(_0x196c77);}function startRefreshInterval(_0xca6ad8){var _0x58b741=schedule['intervals'];if(_0x58b741[_0xca6ad8['id']])clearInterval(_0x58b741[_0xca6ad8['id']]);_0x58b741[_0xca6ad8['id']]=setInterval(refreshOauth2MicrosoftAccessToken[_0xacb1('0x4b')](this,{'id':_0xca6ad8['id']}),OAUTH_REFRESH_INTERVAL*0x3e8);schedule[_0xacb1('0x4c')]=_0x58b741;}function startAllRefreshIntervals(){return db[_0xacb1('0x40')][_0xacb1('0x4d')]({'where':{'data6':{'$ne':null}},'raw':!![]})[_0xacb1('0x3e')](function(_0x2d1ec0){var _0x2b7c6a=_0x2d1ec0['map'](function(_0x35875b){return refreshOauth2MicrosoftAccessToken(_0x35875b)['then'](function(_0x5e0505){startRefreshInterval(_0x5e0505);});});return Promise[_0xacb1('0x4e')](_0x2b7c6a);})[_0xacb1('0x47')](function(_0x1f5590){var _0x5d04c9=_0x1f5590?util[_0xacb1('0x4f')](_0x1f5590,{'showHidden':![],'depth':null}):'';logger[_0xacb1('0x48')](_0xacb1('0x50'),_0x5d04c9);});}module['exports']={'generateMicrosoftAuthorizationUrl':generateMicrosoftAuthorizationUrl,'getOauth2MicrosoftAccessToken':getOauth2MicrosoftAccessToken,'isValidIdToken':isValidIdToken,'startAllRefreshIntervals':startAllRefreshIntervals,'refreshOauth2MicrosoftAccessToken':refreshOauth2MicrosoftAccessToken,'startRefreshInterval':startRefreshInterval};