96fd21cad60d2defe59a8a034d74bb8f4441fd42
[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 _0x15f5=['catch','[CLOUD_PROVIDER]\x20Error\x20while\x20refreshing\x20the\x20tokens\x20after\x20service\x20restart\x20error:%s','exports','lodash','crypto','jsonwebtoken','moment','ioredis','request-promise','util','../../config/logger','../../config/schedule/cloud-provider','redis','defaults','localhost','openid','email','https://outlook.office365.com/IMAP.AccessAsUser.All','https://outlook.office.com/POP.AccessAsUser.All','https://outlook.office.com/SMTP.Send','offline_access','/token','type','push','data7','/.default','join','Outlook365','code','id_token','from','stringify','toString','base64','hex','client_id','data1','response_type','redirect_uri','data4','form_post','scope','state','nonce','login','map','key','value','oauth2Claims','replace','set','decode','issuer','aud','audience','isAfter','exp','CloudProvider','findOne','refresh_token','data6','decryptString','data3','POST','{TENANT_ID}','data2','data5','access_token','update','then','error','Failed\x20to\x20refresh\x20access\x20token\x20for\x20cloud\x20provider\x20#%s,\x20-\x20err:%s','authorization_code','intervals','bind','findAll','all'];(function(_0x460b5f,_0xc9f616){var _0x34df7f=function(_0x597641){while(--_0x597641){_0x460b5f['push'](_0x460b5f['shift']());}};_0x34df7f(++_0xc9f616);}(_0x15f5,0xea));var _0x515f=function(_0x3e8519,_0x926890){_0x3e8519=_0x3e8519-0x0;var _0x555b00=_0x15f5[_0x3e8519];return _0x555b00;};'use strict';var _=require(_0x515f('0x0'));var crypto=require(_0x515f('0x1'));var jwt=require(_0x515f('0x2'));var moment=require(_0x515f('0x3'));var Redis=require(_0x515f('0x4'));var rp=require(_0x515f('0x5'));var util=require(_0x515f('0x6'));var encryptor=require('../../components/encryptor');var config=require('../../config/environment');var logger=require(_0x515f('0x7'))('api');var schedule=require(_0x515f('0x8'));var db=require('../../mysqldb')['db'];config[_0x515f('0x9')]=_[_0x515f('0xa')](config['redis'],{'host':_0x515f('0xb'),'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':[_0x515f('0xc'),'profile',_0x515f('0xd'),'offline_access',_0x515f('0xe'),_0x515f('0xf'),_0x515f('0x10')],'Dynamics365':[_0x515f('0xc'),_0x515f('0x11')]};var MICROSOFT_AUTH_ENDPOINT='/authorize';var MICROSOFT_TOKEN_ENDPOINT=_0x515f('0x12');var OAUTH_REFRESH_INTERVAL=0xfa;function getAuthorizationScopes(_0x5d9c42){var _0x8f52e5=_['map'](AZURE_AUTH_SCOPES[_0x5d9c42['type']]);if(_0x5d9c42[_0x515f('0x13')]==='Dynamics365')_0x8f52e5[_0x515f('0x14')](_0x5d9c42[_0x515f('0x15')]+_0x515f('0x16'));return _0x8f52e5[_0x515f('0x17')]('\x20');}function getAccessTokenScope(_0xef018e){if(_0xef018e[_0x515f('0x13')]===_0x515f('0x18'))return'https://outlook.office365.com/IMAP.AccessAsUser.All';if(_0xef018e[_0x515f('0x13')]==='Dynamics365')return _0xef018e[_0x515f('0x15')]+_0x515f('0x16');}function generateMicrosoftAuthorizationUrl(_0x420926,_0x54ef2e){var _0x30e275=MICROSOFT_AUTH_URL['replace']('{TENANT_ID}',_0x420926['data2']);var _0x4e38df=[_0x515f('0x19'),_0x515f('0x1a')];var _0x444f1e=Buffer[_0x515f('0x1b')](JSON[_0x515f('0x1c')]({'id':_0x54ef2e}))[_0x515f('0x1d')](_0x515f('0x1e'));var _0x7d0cdf=crypto['randomBytes'](0x10)[_0x515f('0x1d')](_0x515f('0x1f'));var _0x14a20d=getAuthorizationScopes(_0x420926);var _0x5387f5=[{'key':_0x515f('0x20'),'value':_0x420926[_0x515f('0x21')]},{'key':_0x515f('0x22'),'value':encodeURIComponent(_0x4e38df[_0x515f('0x17')]('\x20'))},{'key':_0x515f('0x23'),'value':_0x420926[_0x515f('0x24')]},{'key':'response_mode','value':_0x515f('0x25')},{'key':_0x515f('0x26'),'value':encodeURIComponent(_0x14a20d)},{'key':_0x515f('0x27'),'value':_0x444f1e},{'key':_0x515f('0x28'),'value':_0x7d0cdf},{'key':'prompt','value':_0x515f('0x29')}];var _0x36fed5=_0x30e275+MICROSOFT_AUTH_ENDPOINT+'?'+_[_0x515f('0x2a')](_0x5387f5,function(_0x3cc0c0){return _0x3cc0c0[_0x515f('0x2b')]+'='+_0x3cc0c0[_0x515f('0x2c')];})['join']('&');_0x420926[_0x515f('0x2d')]={'issuer':_0x30e275[_0x515f('0x2e')]('oauth2/',''),'audience':_0x420926[_0x515f('0x21')],'state':_0x444f1e,'nonce':_0x7d0cdf};redis[_0x515f('0x2f')](_0x444f1e,JSON[_0x515f('0x1c')](_0x420926));return _0x36fed5;}function isValidIdToken(_0x2f3ed3,_0x48c58a){try{var _0x3071ce=jwt[_0x515f('0x30')](_0x2f3ed3,{'complete':!![]});var _0x54eb63=_0x3071ce['payload'];if(_0x54eb63['iss']!==_0x48c58a[_0x515f('0x31')])return![];if(_0x54eb63[_0x515f('0x32')]!==_0x48c58a[_0x515f('0x33')])return![];if(_0x54eb63[_0x515f('0x28')]!==_0x48c58a[_0x515f('0x28')])return![];if(moment()[_0x515f('0x34')](moment['unix'](_0x54eb63[_0x515f('0x35')])))return![];return!![];}catch(_0x44b1e8){throw _0x44b1e8;}}function refreshOauth2MicrosoftAccessToken(_0x51e50a){return Promise['resolve']()['then'](function(){if(_0x51e50a['data3'])return _0x51e50a;return db[_0x515f('0x36')][_0x515f('0x37')]({'where':{'id':_0x51e50a['id']},'raw':!![]});})['then'](function(_0x211d7b){var _0x442ef2={'grant_type':_0x515f('0x38'),'refresh_token':_0x211d7b[_0x515f('0x39')],'scope':getAccessTokenScope(_0x211d7b),'redirect_uri':_0x211d7b['data4'],'client_id':_0x211d7b[_0x515f('0x21')],'client_secret':encryptor[_0x515f('0x3a')](_0x211d7b[_0x515f('0x3b')])};var _0x4d2c22={'method':_0x515f('0x3c'),'uri':MICROSOFT_AUTH_URL['replace'](_0x515f('0x3d'),_0x211d7b[_0x515f('0x3e')])+MICROSOFT_TOKEN_ENDPOINT,'form':_0x442ef2,'json':!![]};return rp(_0x4d2c22);})['then'](function(_0x5721e5){_0x51e50a[_0x515f('0x3f')]=_0x5721e5[_0x515f('0x40')];_0x51e50a['data6']=_0x5721e5['refresh_token'];return db[_0x515f('0x36')][_0x515f('0x41')]({'data5':_0x51e50a[_0x515f('0x3f')],'data6':_0x51e50a['data6']},{'where':{'id':_0x51e50a['id']}});})[_0x515f('0x42')](function(){return _0x51e50a;})['catch'](function(_0xc15114){logger[_0x515f('0x43')](_0x515f('0x44'),_0x51e50a['id'],_0xc15114);});}function getOauth2MicrosoftAccessToken(_0xfccba6,_0xd77dbe){var _0x3eeedc={'grant_type':_0x515f('0x45'),'code':_0xfccba6,'scope':getAccessTokenScope(_0xd77dbe),'redirect_uri':_0xd77dbe[_0x515f('0x24')],'client_id':_0xd77dbe[_0x515f('0x21')],'client_secret':encryptor[_0x515f('0x3a')](_0xd77dbe['data3'])};var _0x143074={'method':_0x515f('0x3c'),'uri':MICROSOFT_AUTH_URL['replace']('{TENANT_ID}',_0xd77dbe[_0x515f('0x3e')])+MICROSOFT_TOKEN_ENDPOINT,'form':_0x3eeedc,'json':!![]};return rp(_0x143074);}function startRefreshInterval(_0x487f1e){var _0x41994f=schedule[_0x515f('0x46')];if(_0x41994f[_0x487f1e['id']])clearInterval(_0x41994f[_0x487f1e['id']]);_0x41994f[_0x487f1e['id']]=setInterval(refreshOauth2MicrosoftAccessToken[_0x515f('0x47')](this,{'id':_0x487f1e['id']}),OAUTH_REFRESH_INTERVAL*0x3e8);schedule[_0x515f('0x46')]=_0x41994f;}function startAllRefreshIntervals(){return db[_0x515f('0x36')][_0x515f('0x48')]({'where':{'data6':{'$ne':null}},'raw':!![]})[_0x515f('0x42')](function(_0x5903de){var _0x3de90b=_0x5903de['map'](function(_0x431615){return refreshOauth2MicrosoftAccessToken(_0x431615)[_0x515f('0x42')](function(_0x4fbf06){startRefreshInterval(_0x4fbf06);});});return Promise[_0x515f('0x49')](_0x3de90b);})[_0x515f('0x4a')](function(_0x23aa8b){var _0x5ee607=_0x23aa8b?util['inspect'](_0x23aa8b,{'showHidden':![],'depth':null}):'';logger[_0x515f('0x43')](_0x515f('0x4b'),_0x5ee607);});}module[_0x515f('0x4c')]={'generateMicrosoftAuthorizationUrl':generateMicrosoftAuthorizationUrl,'getOauth2MicrosoftAccessToken':getOauth2MicrosoftAccessToken,'isValidIdToken':isValidIdToken,'startAllRefreshIntervals':startAllRefreshIntervals,'refreshOauth2MicrosoftAccessToken':refreshOauth2MicrosoftAccessToken,'startRefreshInterval':startRefreshInterval};