Built motion from commit c116dc8b.|2.6.30
[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 _0x6ba9=['Outlook365','data2','code','id_token','from','stringify','randomBytes','toString','hex','client_id','data1','response_type','redirect_uri','response_mode','form_post','scope','state','nonce','prompt','login','map','key','value','join','oauth2Claims','replace','set','decode','payload','iss','issuer','aud','unix','then','data3','CloudProvider','findOne','refresh_token','data6','data4','decryptString','POST','{TENANT_ID}','access_token','update','Failed\x20to\x20refresh\x20access\x20token\x20for\x20cloud\x20provider\x20#%s,\x20-\x20err:%s','authorization_code','findAll','all','catch','inspect','error','lodash','crypto','jsonwebtoken','moment','ioredis','request-promise','util','../../components/encryptor','api','localhost','openid','profile','email','offline_access','https://outlook.office365.com/IMAP.AccessAsUser.All','https://outlook.office.com/POP.AccessAsUser.All','https://outlook.office.com/SMTP.Send','type','Dynamics365','push','data7'];(function(_0x17f4f9,_0x376cf8){var _0x141347=function(_0x25d890){while(--_0x25d890){_0x17f4f9['push'](_0x17f4f9['shift']());}};_0x141347(++_0x376cf8);}(_0x6ba9,0x1a1));var _0x96ba=function(_0x2c8a94,_0x3891e8){_0x2c8a94=_0x2c8a94-0x0;var _0x58ac54=_0x6ba9[_0x2c8a94];return _0x58ac54;};'use strict';var _=require(_0x96ba('0x0'));var crypto=require(_0x96ba('0x1'));var jwt=require(_0x96ba('0x2'));var moment=require(_0x96ba('0x3'));var Redis=require(_0x96ba('0x4'));var rp=require(_0x96ba('0x5'));var util=require(_0x96ba('0x6'));var encryptor=require(_0x96ba('0x7'));var config=require('../../config/environment');var logger=require('../../config/logger')(_0x96ba('0x8'));var schedule=require('../../config/schedule/cloud-provider');var db=require('../../mysqldb')['db'];config['redis']=_['defaults'](config['redis'],{'host':_0x96ba('0x9'),'port':0x18eb});var redis=new Redis(config['redis']);var MICROSOFT_AUTH_URL='https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0';var AZURE_AUTH_SCOPES={'Outlook365':[_0x96ba('0xa'),_0x96ba('0xb'),_0x96ba('0xc'),_0x96ba('0xd'),_0x96ba('0xe'),_0x96ba('0xf'),_0x96ba('0x10')],'Dynamics365':['openid',_0x96ba('0xd')]};var MICROSOFT_AUTH_ENDPOINT='/authorize';var MICROSOFT_TOKEN_ENDPOINT='/token';var OAUTH_REFRESH_INTERVAL=0xfa;function getAuthorizationScopes(_0x44c31c){var _0x4bdda5=_['map'](AZURE_AUTH_SCOPES[_0x44c31c['type']]);if(_0x44c31c[_0x96ba('0x11')]===_0x96ba('0x12'))_0x4bdda5[_0x96ba('0x13')](_0x44c31c[_0x96ba('0x14')]+'/.default');return _0x4bdda5['join']('\x20');}function getAccessTokenScope(_0x1b1808){if(_0x1b1808[_0x96ba('0x11')]===_0x96ba('0x15'))return'https://outlook.office365.com/IMAP.AccessAsUser.All';if(_0x1b1808['type']==='Dynamics365')return _0x1b1808[_0x96ba('0x14')]+'/.default';}function generateMicrosoftAuthorizationUrl(_0x3aad9f,_0x123c11){var _0x2af30a=MICROSOFT_AUTH_URL['replace']('{TENANT_ID}',_0x3aad9f[_0x96ba('0x16')]);var _0x1e6885=[_0x96ba('0x17'),_0x96ba('0x18')];var _0x117932=Buffer[_0x96ba('0x19')](JSON[_0x96ba('0x1a')]({'id':_0x123c11}))['toString']('base64');var _0x2f693e=crypto[_0x96ba('0x1b')](0x10)[_0x96ba('0x1c')](_0x96ba('0x1d'));var _0x489309=getAuthorizationScopes(_0x3aad9f);var _0x59cff0=[{'key':_0x96ba('0x1e'),'value':_0x3aad9f[_0x96ba('0x1f')]},{'key':_0x96ba('0x20'),'value':encodeURIComponent(_0x1e6885['join']('\x20'))},{'key':_0x96ba('0x21'),'value':_0x3aad9f['data4']},{'key':_0x96ba('0x22'),'value':_0x96ba('0x23')},{'key':_0x96ba('0x24'),'value':encodeURIComponent(_0x489309)},{'key':_0x96ba('0x25'),'value':_0x117932},{'key':_0x96ba('0x26'),'value':_0x2f693e},{'key':_0x96ba('0x27'),'value':_0x96ba('0x28')}];var _0x4d7c2f=_0x2af30a+MICROSOFT_AUTH_ENDPOINT+'?'+_[_0x96ba('0x29')](_0x59cff0,function(_0x5caf41){return _0x5caf41[_0x96ba('0x2a')]+'='+_0x5caf41[_0x96ba('0x2b')];})[_0x96ba('0x2c')]('&');_0x3aad9f[_0x96ba('0x2d')]={'issuer':_0x2af30a[_0x96ba('0x2e')]('oauth2/',''),'audience':_0x3aad9f[_0x96ba('0x1f')],'state':_0x117932,'nonce':_0x2f693e};redis[_0x96ba('0x2f')](_0x117932,JSON[_0x96ba('0x1a')](_0x3aad9f));return _0x4d7c2f;}function isValidIdToken(_0x3c305f,_0x42403f){try{var _0x2a1606=jwt[_0x96ba('0x30')](_0x3c305f,{'complete':!![]});var _0x4ab9e9=_0x2a1606[_0x96ba('0x31')];if(_0x4ab9e9[_0x96ba('0x32')]!==_0x42403f[_0x96ba('0x33')])return![];if(_0x4ab9e9[_0x96ba('0x34')]!==_0x42403f['audience'])return![];if(_0x4ab9e9[_0x96ba('0x26')]!==_0x42403f['nonce'])return![];if(moment()['isAfter'](moment[_0x96ba('0x35')](_0x4ab9e9['exp'])))return![];return!![];}catch(_0x7ce772){throw _0x7ce772;}}function refreshOauth2MicrosoftAccessToken(_0x1962e1){return Promise['resolve']()[_0x96ba('0x36')](function(){if(_0x1962e1[_0x96ba('0x37')])return _0x1962e1;return db[_0x96ba('0x38')][_0x96ba('0x39')]({'where':{'id':_0x1962e1['id']},'raw':!![]});})[_0x96ba('0x36')](function(_0xfeff8c){var _0x2db1bf={'grant_type':_0x96ba('0x3a'),'refresh_token':_0xfeff8c[_0x96ba('0x3b')],'scope':getAccessTokenScope(_0xfeff8c),'redirect_uri':_0xfeff8c[_0x96ba('0x3c')],'client_id':_0xfeff8c[_0x96ba('0x1f')],'client_secret':encryptor[_0x96ba('0x3d')](_0xfeff8c[_0x96ba('0x37')])};var _0x4d62ae={'method':_0x96ba('0x3e'),'uri':MICROSOFT_AUTH_URL[_0x96ba('0x2e')](_0x96ba('0x3f'),_0xfeff8c['data2'])+MICROSOFT_TOKEN_ENDPOINT,'form':_0x2db1bf,'json':!![]};return rp(_0x4d62ae);})[_0x96ba('0x36')](function(_0x348759){_0x1962e1['data5']=_0x348759[_0x96ba('0x40')];_0x1962e1[_0x96ba('0x3b')]=_0x348759[_0x96ba('0x3a')];return db[_0x96ba('0x38')][_0x96ba('0x41')]({'data5':_0x1962e1['data5'],'data6':_0x1962e1[_0x96ba('0x3b')]},{'where':{'id':_0x1962e1['id']}});})[_0x96ba('0x36')](function(){return _0x1962e1;})['catch'](function(_0x1611a8){logger['error'](_0x96ba('0x42'),_0x1962e1['id'],_0x1611a8);});}function getOauth2MicrosoftAccessToken(_0x166fdf,_0x19013a){var _0x563e85={'grant_type':_0x96ba('0x43'),'code':_0x166fdf,'scope':getAccessTokenScope(_0x19013a),'redirect_uri':_0x19013a[_0x96ba('0x3c')],'client_id':_0x19013a[_0x96ba('0x1f')],'client_secret':encryptor[_0x96ba('0x3d')](_0x19013a['data3'])};var _0x2c61b3={'method':_0x96ba('0x3e'),'uri':MICROSOFT_AUTH_URL[_0x96ba('0x2e')](_0x96ba('0x3f'),_0x19013a[_0x96ba('0x16')])+MICROSOFT_TOKEN_ENDPOINT,'form':_0x563e85,'json':!![]};return rp(_0x2c61b3);}function startRefreshInterval(_0x45e54f){var _0x1cb2be=schedule['intervals'];if(_0x1cb2be[_0x45e54f['id']])clearInterval(_0x1cb2be[_0x45e54f['id']]);_0x1cb2be[_0x45e54f['id']]=setInterval(refreshOauth2MicrosoftAccessToken['bind'](this,{'id':_0x45e54f['id']}),OAUTH_REFRESH_INTERVAL*0x3e8);schedule['intervals']=_0x1cb2be;}function startAllRefreshIntervals(){return db[_0x96ba('0x38')][_0x96ba('0x44')]({'where':{'data6':{'$ne':null}},'raw':!![]})[_0x96ba('0x36')](function(_0x4b0fdc){var _0x3855a9=_0x4b0fdc[_0x96ba('0x29')](function(_0x2a2697){return refreshOauth2MicrosoftAccessToken(_0x2a2697)[_0x96ba('0x36')](function(_0x397335){startRefreshInterval(_0x397335);});});return Promise[_0x96ba('0x45')](_0x3855a9);})[_0x96ba('0x46')](function(_0x4b7dc1){var _0x599911=_0x4b7dc1?util[_0x96ba('0x47')](_0x4b7dc1,{'showHidden':![],'depth':null}):'';logger[_0x96ba('0x48')]('[CLOUD_PROVIDER]\x20Error\x20while\x20refreshing\x20the\x20tokens\x20after\x20service\x20restart\x20error:%s',_0x599911);});}module['exports']={'generateMicrosoftAuthorizationUrl':generateMicrosoftAuthorizationUrl,'getOauth2MicrosoftAccessToken':getOauth2MicrosoftAccessToken,'isValidIdToken':isValidIdToken,'startAllRefreshIntervals':startAllRefreshIntervals,'refreshOauth2MicrosoftAccessToken':refreshOauth2MicrosoftAccessToken,'startRefreshInterval':startRefreshInterval};