Built motion from commit 8356fca3.|2.6.19
[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 _0x12e3=['https://outlook.office.com/SMTP.Send','/authorize','/token','map','type','Dynamics365','push','data7','/.default','join','Outlook365','https://outlook.office365.com/IMAP.AccessAsUser.All','{TENANT_ID}','from','stringify','base64','randomBytes','hex','client_id','data1','response_type','redirect_uri','response_mode','form_post','scope','state','prompt','key','value','oauth2Claims','replace','oauth2/','payload','iss','aud','audience','nonce','isAfter','exp','resolve','data3','findOne','then','refresh_token','decryptString','POST','data5','access_token','CloudProvider','update','data6','catch','authorization_code','intervals','bind','findAll','all','inspect','error','[CLOUD_PROVIDER]\x20Error\x20while\x20refreshing\x20the\x20tokens\x20after\x20service\x20restart\x20error:%s','exports','lodash','crypto','jsonwebtoken','request-promise','../../components/encryptor','../../config/environment','../../config/logger','api','../../config/schedule/cloud-provider','../../mysqldb','redis','defaults','openid','profile','email','offline_access','https://outlook.office.com/POP.AccessAsUser.All'];(function(_0x3a2a33,_0x29372a){var _0x10d6d2=function(_0x2c63b7){while(--_0x2c63b7){_0x3a2a33['push'](_0x3a2a33['shift']());}};_0x10d6d2(++_0x29372a);}(_0x12e3,0x127));var _0x312e=function(_0x4cdcb8,_0x44fc53){_0x4cdcb8=_0x4cdcb8-0x0;var _0x29996d=_0x12e3[_0x4cdcb8];return _0x29996d;};'use strict';var _=require(_0x312e('0x0'));var crypto=require(_0x312e('0x1'));var jwt=require(_0x312e('0x2'));var moment=require('moment');var Redis=require('ioredis');var rp=require(_0x312e('0x3'));var util=require('util');var encryptor=require(_0x312e('0x4'));var config=require(_0x312e('0x5'));var logger=require(_0x312e('0x6'))(_0x312e('0x7'));var schedule=require(_0x312e('0x8'));var db=require(_0x312e('0x9'))['db'];config[_0x312e('0xa')]=_[_0x312e('0xb')](config[_0x312e('0xa')],{'host':'localhost','port':0x18eb});var redis=new Redis(config[_0x312e('0xa')]);var MICROSOFT_AUTH_URL='https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0';var AZURE_AUTH_SCOPES={'Outlook365':[_0x312e('0xc'),_0x312e('0xd'),_0x312e('0xe'),_0x312e('0xf'),'https://outlook.office365.com/IMAP.AccessAsUser.All',_0x312e('0x10'),_0x312e('0x11')],'Dynamics365':[_0x312e('0xc'),_0x312e('0xf')]};var MICROSOFT_AUTH_ENDPOINT=_0x312e('0x12');var MICROSOFT_TOKEN_ENDPOINT=_0x312e('0x13');var OAUTH_REFRESH_INTERVAL=0xfa;function getAuthorizationScopes(_0x5d2ef5){var _0x2587a9=_[_0x312e('0x14')](AZURE_AUTH_SCOPES[_0x5d2ef5[_0x312e('0x15')]]);if(_0x5d2ef5[_0x312e('0x15')]===_0x312e('0x16'))_0x2587a9[_0x312e('0x17')](_0x5d2ef5[_0x312e('0x18')]+_0x312e('0x19'));return _0x2587a9[_0x312e('0x1a')]('\x20');}function getAccessTokenScope(_0x478998){if(_0x478998['type']===_0x312e('0x1b'))return _0x312e('0x1c');if(_0x478998[_0x312e('0x15')]===_0x312e('0x16'))return _0x478998[_0x312e('0x18')]+_0x312e('0x19');}function generateMicrosoftAuthorizationUrl(_0x3c2386,_0x437c10){var _0x26f61a=MICROSOFT_AUTH_URL['replace'](_0x312e('0x1d'),_0x3c2386['data2']);var _0x4aafb9=['code','id_token'];var _0x2dc6b0=Buffer[_0x312e('0x1e')](JSON[_0x312e('0x1f')]({'id':_0x437c10}))['toString'](_0x312e('0x20'));var _0x407ac9=crypto[_0x312e('0x21')](0x10)['toString'](_0x312e('0x22'));var _0x4966a3=getAuthorizationScopes(_0x3c2386);var _0x534a5b=[{'key':_0x312e('0x23'),'value':_0x3c2386[_0x312e('0x24')]},{'key':_0x312e('0x25'),'value':encodeURIComponent(_0x4aafb9[_0x312e('0x1a')]('\x20'))},{'key':_0x312e('0x26'),'value':_0x3c2386['data4']},{'key':_0x312e('0x27'),'value':_0x312e('0x28')},{'key':_0x312e('0x29'),'value':encodeURIComponent(_0x4966a3)},{'key':_0x312e('0x2a'),'value':_0x2dc6b0},{'key':'nonce','value':_0x407ac9},{'key':_0x312e('0x2b'),'value':'login'}];var _0x27e400=_0x26f61a+MICROSOFT_AUTH_ENDPOINT+'?'+_['map'](_0x534a5b,function(_0x19e520){return _0x19e520[_0x312e('0x2c')]+'='+_0x19e520[_0x312e('0x2d')];})[_0x312e('0x1a')]('&');_0x3c2386[_0x312e('0x2e')]={'issuer':_0x26f61a[_0x312e('0x2f')](_0x312e('0x30'),''),'audience':_0x3c2386[_0x312e('0x24')],'state':_0x2dc6b0,'nonce':_0x407ac9};redis['set'](_0x2dc6b0,JSON[_0x312e('0x1f')](_0x3c2386));return _0x27e400;}function isValidIdToken(_0x1aebd6,_0x22e69c){try{var _0x423929=jwt['decode'](_0x1aebd6,{'complete':!![]});var _0x48da9a=_0x423929[_0x312e('0x31')];if(_0x48da9a[_0x312e('0x32')]!==_0x22e69c['issuer'])return![];if(_0x48da9a[_0x312e('0x33')]!==_0x22e69c[_0x312e('0x34')])return![];if(_0x48da9a[_0x312e('0x35')]!==_0x22e69c[_0x312e('0x35')])return![];if(moment()[_0x312e('0x36')](moment['unix'](_0x48da9a[_0x312e('0x37')])))return![];return!![];}catch(_0x34f221){throw _0x34f221;}}function refreshOauth2MicrosoftAccessToken(_0x138942){return Promise[_0x312e('0x38')]()['then'](function(){if(_0x138942[_0x312e('0x39')])return _0x138942;return db['CloudProvider'][_0x312e('0x3a')]({'where':{'id':_0x138942['id']},'raw':!![]});})[_0x312e('0x3b')](function(_0x5c88e5){var _0x597184={'grant_type':_0x312e('0x3c'),'refresh_token':_0x5c88e5['data6'],'scope':getAccessTokenScope(_0x5c88e5),'redirect_uri':_0x5c88e5['data4'],'client_id':_0x5c88e5[_0x312e('0x24')],'client_secret':encryptor[_0x312e('0x3d')](_0x5c88e5['data3'])};var _0x2a2a7e={'method':_0x312e('0x3e'),'uri':MICROSOFT_AUTH_URL[_0x312e('0x2f')](_0x312e('0x1d'),_0x5c88e5['data2'])+MICROSOFT_TOKEN_ENDPOINT,'form':_0x597184,'json':!![]};return rp(_0x2a2a7e);})[_0x312e('0x3b')](function(_0x52d233){_0x138942[_0x312e('0x3f')]=_0x52d233[_0x312e('0x40')];_0x138942['data6']=_0x52d233[_0x312e('0x3c')];return db[_0x312e('0x41')][_0x312e('0x42')]({'data5':_0x138942['data5'],'data6':_0x138942[_0x312e('0x43')]},{'where':{'id':_0x138942['id']}});})[_0x312e('0x3b')](function(){return _0x138942;})[_0x312e('0x44')](function(_0xc3ba3f){logger['error']('Failed\x20to\x20refresh\x20access\x20token\x20for\x20cloud\x20provider\x20#%s,\x20-\x20err:%s',_0x138942['id'],_0xc3ba3f);});}function getOauth2MicrosoftAccessToken(_0x57c1e4,_0x1552fb){var _0x48db42={'grant_type':_0x312e('0x45'),'code':_0x57c1e4,'scope':getAccessTokenScope(_0x1552fb),'redirect_uri':_0x1552fb['data4'],'client_id':_0x1552fb['data1'],'client_secret':encryptor[_0x312e('0x3d')](_0x1552fb[_0x312e('0x39')])};var _0x53a3df={'method':'POST','uri':MICROSOFT_AUTH_URL[_0x312e('0x2f')](_0x312e('0x1d'),_0x1552fb['data2'])+MICROSOFT_TOKEN_ENDPOINT,'form':_0x48db42,'json':!![]};return rp(_0x53a3df);}function startRefreshInterval(_0x3f053e){var _0x57f3bd=schedule[_0x312e('0x46')];if(_0x57f3bd[_0x3f053e['id']])clearInterval(_0x57f3bd[_0x3f053e['id']]);_0x57f3bd[_0x3f053e['id']]=setInterval(refreshOauth2MicrosoftAccessToken[_0x312e('0x47')](this,{'id':_0x3f053e['id']}),OAUTH_REFRESH_INTERVAL*0x3e8);schedule['intervals']=_0x57f3bd;}function startAllRefreshIntervals(){return db[_0x312e('0x41')][_0x312e('0x48')]({'where':{'data6':{'$ne':null}},'raw':!![]})[_0x312e('0x3b')](function(_0x254260){var _0x3e447e=_0x254260[_0x312e('0x14')](function(_0x291d3f){return refreshOauth2MicrosoftAccessToken(_0x291d3f)[_0x312e('0x3b')](function(_0x46e2fc){startRefreshInterval(_0x46e2fc);});});return Promise[_0x312e('0x49')](_0x3e447e);})['catch'](function(_0x1b441d){var _0x5d09a3=_0x1b441d?util[_0x312e('0x4a')](_0x1b441d,{'showHidden':![],'depth':null}):'';logger[_0x312e('0x4b')](_0x312e('0x4c'),_0x5d09a3);});}module[_0x312e('0x4d')]={'generateMicrosoftAuthorizationUrl':generateMicrosoftAuthorizationUrl,'getOauth2MicrosoftAccessToken':getOauth2MicrosoftAccessToken,'isValidIdToken':isValidIdToken,'startAllRefreshIntervals':startAllRefreshIntervals,'refreshOauth2MicrosoftAccessToken':refreshOauth2MicrosoftAccessToken,'startRefreshInterval':startRefreshInterval};