Built motion from commit 775e2a94.|2.6.3
[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 _0x2c5a=['intervals','inspect','[CLOUD_PROVIDER]\x20Error\x20while\x20refreshing\x20the\x20tokens\x20after\x20service\x20restart\x20error:%s','exports','lodash','jsonwebtoken','moment','util','../../components/encryptor','api','../../config/schedule/cloud-provider','../../mysqldb','redis','defaults','openid','profile','email','offline_access','https://outlook.office.com/POP.AccessAsUser.All','https://outlook.office.com/SMTP.Send','/token','map','type','Dynamics365','push','/.default','join','Outlook365','data7','replace','{TENANT_ID}','data2','code','id_token','from','stringify','base64','randomBytes','toString','hex','client_id','response_type','redirect_uri','data4','scope','prompt','key','oauth2Claims','data1','set','decode','issuer','aud','audience','nonce','unix','exp','resolve','then','data3','CloudProvider','findOne','refresh_token','data6','decryptString','POST','data5','update','catch','error','Failed\x20to\x20refresh\x20access\x20token\x20for\x20cloud\x20provider\x20#%s,\x20-\x20err:%s','authorization_code'];(function(_0xd9f102,_0x5a0d28){var _0x2652e4=function(_0x5021a1){while(--_0x5021a1){_0xd9f102['push'](_0xd9f102['shift']());}};_0x2652e4(++_0x5a0d28);}(_0x2c5a,0x1b4));var _0xa2c5=function(_0x24ef64,_0x382030){_0x24ef64=_0x24ef64-0x0;var _0x13d5e0=_0x2c5a[_0x24ef64];return _0x13d5e0;};'use strict';var _=require(_0xa2c5('0x0'));var crypto=require('crypto');var jwt=require(_0xa2c5('0x1'));var moment=require(_0xa2c5('0x2'));var Redis=require('ioredis');var rp=require('request-promise');var util=require(_0xa2c5('0x3'));var encryptor=require(_0xa2c5('0x4'));var config=require('../../config/environment');var logger=require('../../config/logger')(_0xa2c5('0x5'));var schedule=require(_0xa2c5('0x6'));var db=require(_0xa2c5('0x7'))['db'];config[_0xa2c5('0x8')]=_[_0xa2c5('0x9')](config[_0xa2c5('0x8')],{'host':'localhost','port':0x18eb});var redis=new Redis(config[_0xa2c5('0x8')]);var MICROSOFT_AUTH_URL='https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0';var AZURE_AUTH_SCOPES={'Outlook365':[_0xa2c5('0xa'),_0xa2c5('0xb'),_0xa2c5('0xc'),_0xa2c5('0xd'),'https://outlook.office365.com/IMAP.AccessAsUser.All',_0xa2c5('0xe'),_0xa2c5('0xf')],'Dynamics365':[_0xa2c5('0xa'),'offline_access']};var MICROSOFT_AUTH_ENDPOINT='/authorize';var MICROSOFT_TOKEN_ENDPOINT=_0xa2c5('0x10');var OAUTH_REFRESH_INTERVAL=0xfa;function getAuthorizationScopes(_0x25e8f5){var _0x4e891f=_[_0xa2c5('0x11')](AZURE_AUTH_SCOPES[_0x25e8f5[_0xa2c5('0x12')]]);if(_0x25e8f5[_0xa2c5('0x12')]===_0xa2c5('0x13'))_0x4e891f[_0xa2c5('0x14')](_0x25e8f5['data7']+_0xa2c5('0x15'));return _0x4e891f[_0xa2c5('0x16')]('\x20');}function getAccessTokenScope(_0x39ec8b){if(_0x39ec8b[_0xa2c5('0x12')]===_0xa2c5('0x17'))return'https://outlook.office365.com/IMAP.AccessAsUser.All';if(_0x39ec8b[_0xa2c5('0x12')]==='Dynamics365')return _0x39ec8b[_0xa2c5('0x18')]+_0xa2c5('0x15');}function generateMicrosoftAuthorizationUrl(_0x18e399,_0x18610d){var _0x23503c=MICROSOFT_AUTH_URL[_0xa2c5('0x19')](_0xa2c5('0x1a'),_0x18e399[_0xa2c5('0x1b')]);var _0x17cae1=[_0xa2c5('0x1c'),_0xa2c5('0x1d')];var _0x4d7fbc=Buffer[_0xa2c5('0x1e')](JSON[_0xa2c5('0x1f')]({'id':_0x18610d}))['toString'](_0xa2c5('0x20'));var _0x3250da=crypto[_0xa2c5('0x21')](0x10)[_0xa2c5('0x22')](_0xa2c5('0x23'));var _0x25a25a=getAuthorizationScopes(_0x18e399);var _0x5b0d23=[{'key':_0xa2c5('0x24'),'value':_0x18e399['data1']},{'key':_0xa2c5('0x25'),'value':encodeURIComponent(_0x17cae1[_0xa2c5('0x16')]('\x20'))},{'key':_0xa2c5('0x26'),'value':_0x18e399[_0xa2c5('0x27')]},{'key':'response_mode','value':'form_post'},{'key':_0xa2c5('0x28'),'value':encodeURIComponent(_0x25a25a)},{'key':'state','value':_0x4d7fbc},{'key':'nonce','value':_0x3250da},{'key':_0xa2c5('0x29'),'value':'login'}];var _0x1f3f18=_0x23503c+MICROSOFT_AUTH_ENDPOINT+'?'+_[_0xa2c5('0x11')](_0x5b0d23,function(_0x461cea){return _0x461cea[_0xa2c5('0x2a')]+'='+_0x461cea['value'];})[_0xa2c5('0x16')]('&');_0x18e399[_0xa2c5('0x2b')]={'issuer':_0x23503c[_0xa2c5('0x19')]('oauth2/',''),'audience':_0x18e399[_0xa2c5('0x2c')],'state':_0x4d7fbc,'nonce':_0x3250da};redis[_0xa2c5('0x2d')](_0x4d7fbc,JSON[_0xa2c5('0x1f')](_0x18e399));return _0x1f3f18;}function isValidIdToken(_0x3f02df,_0x2d7d65){try{var _0x5426bc=jwt[_0xa2c5('0x2e')](_0x3f02df,{'complete':!![]});var _0x385b32=_0x5426bc['payload'];if(_0x385b32['iss']!==_0x2d7d65[_0xa2c5('0x2f')])return![];if(_0x385b32[_0xa2c5('0x30')]!==_0x2d7d65[_0xa2c5('0x31')])return![];if(_0x385b32[_0xa2c5('0x32')]!==_0x2d7d65[_0xa2c5('0x32')])return![];if(moment()['isAfter'](moment[_0xa2c5('0x33')](_0x385b32[_0xa2c5('0x34')])))return![];return!![];}catch(_0x19bfcb){throw _0x19bfcb;}}function refreshOauth2MicrosoftAccessToken(_0x37e57e){return Promise[_0xa2c5('0x35')]()[_0xa2c5('0x36')](function(){if(_0x37e57e[_0xa2c5('0x37')])return _0x37e57e;return db[_0xa2c5('0x38')][_0xa2c5('0x39')]({'where':{'id':_0x37e57e['id']},'raw':!![]});})[_0xa2c5('0x36')](function(_0x1ce34f){var _0x35756f={'grant_type':_0xa2c5('0x3a'),'refresh_token':_0x1ce34f[_0xa2c5('0x3b')],'scope':getAccessTokenScope(_0x1ce34f),'redirect_uri':_0x1ce34f[_0xa2c5('0x27')],'client_id':_0x1ce34f['data1'],'client_secret':encryptor[_0xa2c5('0x3c')](_0x1ce34f[_0xa2c5('0x37')])};var _0x2146e8={'method':_0xa2c5('0x3d'),'uri':MICROSOFT_AUTH_URL[_0xa2c5('0x19')](_0xa2c5('0x1a'),_0x1ce34f[_0xa2c5('0x1b')])+MICROSOFT_TOKEN_ENDPOINT,'form':_0x35756f,'json':!![]};return rp(_0x2146e8);})['then'](function(_0x19d52a){_0x37e57e[_0xa2c5('0x3e')]=_0x19d52a['access_token'];_0x37e57e[_0xa2c5('0x3b')]=_0x19d52a['refresh_token'];return db[_0xa2c5('0x38')][_0xa2c5('0x3f')]({'data5':_0x37e57e[_0xa2c5('0x3e')],'data6':_0x37e57e['data6']},{'where':{'id':_0x37e57e['id']}});})[_0xa2c5('0x36')](function(){return _0x37e57e;})[_0xa2c5('0x40')](function(_0x29ca50){logger[_0xa2c5('0x41')](_0xa2c5('0x42'),_0x37e57e['id'],_0x29ca50);});}function getOauth2MicrosoftAccessToken(_0x34a83a,_0x4ec246){var _0x494379={'grant_type':_0xa2c5('0x43'),'code':_0x34a83a,'scope':getAccessTokenScope(_0x4ec246),'redirect_uri':_0x4ec246[_0xa2c5('0x27')],'client_id':_0x4ec246[_0xa2c5('0x2c')],'client_secret':encryptor['decryptString'](_0x4ec246[_0xa2c5('0x37')])};var _0x5af790={'method':_0xa2c5('0x3d'),'uri':MICROSOFT_AUTH_URL[_0xa2c5('0x19')]('{TENANT_ID}',_0x4ec246[_0xa2c5('0x1b')])+MICROSOFT_TOKEN_ENDPOINT,'form':_0x494379,'json':!![]};return rp(_0x5af790);}function startRefreshInterval(_0x4cd042){var _0x5d1565=schedule['intervals'];if(_0x5d1565[_0x4cd042['id']])clearInterval(_0x5d1565[_0x4cd042['id']]);_0x5d1565[_0x4cd042['id']]=setInterval(refreshOauth2MicrosoftAccessToken['bind'](this,{'id':_0x4cd042['id']}),OAUTH_REFRESH_INTERVAL*0x3e8);schedule[_0xa2c5('0x44')]=_0x5d1565;}function startAllRefreshIntervals(){return db[_0xa2c5('0x38')]['findAll']({'where':{'data6':{'$ne':null}},'raw':!![]})[_0xa2c5('0x36')](function(_0x2d60b7){var _0x2d4f5c=_0x2d60b7[_0xa2c5('0x11')](function(_0x236d25){return refreshOauth2MicrosoftAccessToken(_0x236d25)[_0xa2c5('0x36')](function(_0xc3cb9){startRefreshInterval(_0xc3cb9);});});return Promise['all'](_0x2d4f5c);})[_0xa2c5('0x40')](function(_0x2fd50f){var _0x1eebe7=_0x2fd50f?util[_0xa2c5('0x45')](_0x2fd50f,{'showHidden':![],'depth':null}):'';logger['error'](_0xa2c5('0x46'),_0x1eebe7);});}module[_0xa2c5('0x47')]={'generateMicrosoftAuthorizationUrl':generateMicrosoftAuthorizationUrl,'getOauth2MicrosoftAccessToken':getOauth2MicrosoftAccessToken,'isValidIdToken':isValidIdToken,'startAllRefreshIntervals':startAllRefreshIntervals,'refreshOauth2MicrosoftAccessToken':refreshOauth2MicrosoftAccessToken,'startRefreshInterval':startRefreshInterval};