d45e4c6a708a28a036ea501bdf0a3824252813b1
[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 _0x6c49=['decode','iss','issuer','audience','isAfter','unix','exp','resolve','then','data3','findOne','refresh_token','data6','decryptString','POST','data5','access_token','update','catch','error','Failed\x20to\x20refresh\x20access\x20token\x20for\x20cloud\x20provider\x20#%s,\x20-\x20err:%s','authorization_code','intervals','bind','CloudProvider','findAll','all','inspect','exports','lodash','jsonwebtoken','moment','ioredis','request-promise','../../components/encryptor','../../config/environment','../../config/logger','api','../../config/schedule/cloud-provider','../../mysqldb','redis','localhost','https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0','openid','profile','offline_access','https://outlook.office365.com/IMAP.AccessAsUser.All','/authorize','/token','map','type','Dynamics365','data7','/.default','join','Outlook365','replace','{TENANT_ID}','data2','code','id_token','toString','base64','randomBytes','hex','client_id','data1','response_type','redirect_uri','data4','response_mode','scope','state','nonce','prompt','login','key','value','oauth2/','stringify'];(function(_0x32532e,_0x122216){var _0xbc7bb7=function(_0xad268){while(--_0xad268){_0x32532e['push'](_0x32532e['shift']());}};_0xbc7bb7(++_0x122216);}(_0x6c49,0x1ad));var _0x96c4=function(_0x121265,_0xad7305){_0x121265=_0x121265-0x0;var _0x11b9a7=_0x6c49[_0x121265];return _0x11b9a7;};'use strict';var _=require(_0x96c4('0x0'));var crypto=require('crypto');var jwt=require(_0x96c4('0x1'));var moment=require(_0x96c4('0x2'));var Redis=require(_0x96c4('0x3'));var rp=require(_0x96c4('0x4'));var util=require('util');var encryptor=require(_0x96c4('0x5'));var config=require(_0x96c4('0x6'));var logger=require(_0x96c4('0x7'))(_0x96c4('0x8'));var schedule=require(_0x96c4('0x9'));var db=require(_0x96c4('0xa'))['db'];config[_0x96c4('0xb')]=_['defaults'](config[_0x96c4('0xb')],{'host':_0x96c4('0xc'),'port':0x18eb});var redis=new Redis(config[_0x96c4('0xb')]);var MICROSOFT_AUTH_URL=_0x96c4('0xd');var AZURE_AUTH_SCOPES={'Outlook365':[_0x96c4('0xe'),_0x96c4('0xf'),'email',_0x96c4('0x10'),_0x96c4('0x11'),'https://outlook.office.com/POP.AccessAsUser.All','https://outlook.office.com/SMTP.Send'],'Dynamics365':[_0x96c4('0xe'),_0x96c4('0x10')]};var MICROSOFT_AUTH_ENDPOINT=_0x96c4('0x12');var MICROSOFT_TOKEN_ENDPOINT=_0x96c4('0x13');var OAUTH_REFRESH_INTERVAL=0xfa;function getAuthorizationScopes(_0x2056b7){var _0x312467=_[_0x96c4('0x14')](AZURE_AUTH_SCOPES[_0x2056b7[_0x96c4('0x15')]]);if(_0x2056b7['type']===_0x96c4('0x16'))_0x312467['push'](_0x2056b7[_0x96c4('0x17')]+_0x96c4('0x18'));return _0x312467[_0x96c4('0x19')]('\x20');}function getAccessTokenScope(_0x4a59a5){if(_0x4a59a5[_0x96c4('0x15')]===_0x96c4('0x1a'))return _0x96c4('0x11');if(_0x4a59a5[_0x96c4('0x15')]===_0x96c4('0x16'))return _0x4a59a5[_0x96c4('0x17')]+'/.default';}function generateMicrosoftAuthorizationUrl(_0x17fb5b,_0x50d8fc){var _0x5bf46b=MICROSOFT_AUTH_URL[_0x96c4('0x1b')](_0x96c4('0x1c'),_0x17fb5b[_0x96c4('0x1d')]);var _0x34bce4=[_0x96c4('0x1e'),_0x96c4('0x1f')];var _0x560b0a=Buffer['from'](JSON['stringify']({'id':_0x50d8fc}))[_0x96c4('0x20')](_0x96c4('0x21'));var _0x13acb6=crypto[_0x96c4('0x22')](0x10)[_0x96c4('0x20')](_0x96c4('0x23'));var _0x4ef970=getAuthorizationScopes(_0x17fb5b);var _0x2d90b0=[{'key':_0x96c4('0x24'),'value':_0x17fb5b[_0x96c4('0x25')]},{'key':_0x96c4('0x26'),'value':encodeURIComponent(_0x34bce4['join']('\x20'))},{'key':_0x96c4('0x27'),'value':_0x17fb5b[_0x96c4('0x28')]},{'key':_0x96c4('0x29'),'value':'form_post'},{'key':_0x96c4('0x2a'),'value':encodeURIComponent(_0x4ef970)},{'key':_0x96c4('0x2b'),'value':_0x560b0a},{'key':_0x96c4('0x2c'),'value':_0x13acb6},{'key':_0x96c4('0x2d'),'value':_0x96c4('0x2e')}];var _0x78481=_0x5bf46b+MICROSOFT_AUTH_ENDPOINT+'?'+_['map'](_0x2d90b0,function(_0x132260){return _0x132260[_0x96c4('0x2f')]+'='+_0x132260[_0x96c4('0x30')];})[_0x96c4('0x19')]('&');_0x17fb5b['oauth2Claims']={'issuer':_0x5bf46b[_0x96c4('0x1b')](_0x96c4('0x31'),''),'audience':_0x17fb5b[_0x96c4('0x25')],'state':_0x560b0a,'nonce':_0x13acb6};redis['set'](_0x560b0a,JSON[_0x96c4('0x32')](_0x17fb5b));return _0x78481;}function isValidIdToken(_0x3f4364,_0x5ce72c){try{var _0x51b056=jwt[_0x96c4('0x33')](_0x3f4364,{'complete':!![]});var _0x3714ae=_0x51b056['payload'];if(_0x3714ae[_0x96c4('0x34')]!==_0x5ce72c[_0x96c4('0x35')])return![];if(_0x3714ae['aud']!==_0x5ce72c[_0x96c4('0x36')])return![];if(_0x3714ae[_0x96c4('0x2c')]!==_0x5ce72c[_0x96c4('0x2c')])return![];if(moment()[_0x96c4('0x37')](moment[_0x96c4('0x38')](_0x3714ae[_0x96c4('0x39')])))return![];return!![];}catch(_0x4b3a24){throw _0x4b3a24;}}function refreshOauth2MicrosoftAccessToken(_0x31b176){return Promise[_0x96c4('0x3a')]()[_0x96c4('0x3b')](function(){if(_0x31b176[_0x96c4('0x3c')])return _0x31b176;return db['CloudProvider'][_0x96c4('0x3d')]({'where':{'id':_0x31b176['id']},'raw':!![]});})[_0x96c4('0x3b')](function(_0xa35106){var _0x1acad8={'grant_type':_0x96c4('0x3e'),'refresh_token':_0xa35106[_0x96c4('0x3f')],'scope':getAccessTokenScope(_0xa35106),'redirect_uri':_0xa35106[_0x96c4('0x28')],'client_id':_0xa35106['data1'],'client_secret':encryptor[_0x96c4('0x40')](_0xa35106[_0x96c4('0x3c')])};var _0x369841={'method':_0x96c4('0x41'),'uri':MICROSOFT_AUTH_URL[_0x96c4('0x1b')](_0x96c4('0x1c'),_0xa35106['data2'])+MICROSOFT_TOKEN_ENDPOINT,'form':_0x1acad8,'json':!![]};return rp(_0x369841);})[_0x96c4('0x3b')](function(_0x132c64){_0x31b176[_0x96c4('0x42')]=_0x132c64[_0x96c4('0x43')];_0x31b176[_0x96c4('0x3f')]=_0x132c64['refresh_token'];return db['CloudProvider'][_0x96c4('0x44')]({'data5':_0x31b176['data5'],'data6':_0x31b176[_0x96c4('0x3f')]},{'where':{'id':_0x31b176['id']}});})['then'](function(){return _0x31b176;})[_0x96c4('0x45')](function(_0x3dc8fe){logger[_0x96c4('0x46')](_0x96c4('0x47'),_0x31b176['id'],_0x3dc8fe);});}function getOauth2MicrosoftAccessToken(_0x16da70,_0x49aa5d){var _0xefb911={'grant_type':_0x96c4('0x48'),'code':_0x16da70,'scope':getAccessTokenScope(_0x49aa5d),'redirect_uri':_0x49aa5d[_0x96c4('0x28')],'client_id':_0x49aa5d[_0x96c4('0x25')],'client_secret':encryptor[_0x96c4('0x40')](_0x49aa5d[_0x96c4('0x3c')])};var _0x38389a={'method':'POST','uri':MICROSOFT_AUTH_URL[_0x96c4('0x1b')](_0x96c4('0x1c'),_0x49aa5d[_0x96c4('0x1d')])+MICROSOFT_TOKEN_ENDPOINT,'form':_0xefb911,'json':!![]};return rp(_0x38389a);}function startRefreshInterval(_0x1df05e){var _0x50fda6=schedule[_0x96c4('0x49')];if(_0x50fda6[_0x1df05e['id']])clearInterval(_0x50fda6[_0x1df05e['id']]);_0x50fda6[_0x1df05e['id']]=setInterval(refreshOauth2MicrosoftAccessToken[_0x96c4('0x4a')](this,{'id':_0x1df05e['id']}),OAUTH_REFRESH_INTERVAL*0x3e8);schedule[_0x96c4('0x49')]=_0x50fda6;}function startAllRefreshIntervals(){return db[_0x96c4('0x4b')][_0x96c4('0x4c')]({'where':{'data6':{'$ne':null}},'raw':!![]})[_0x96c4('0x3b')](function(_0xd08fba){var _0x2f64c5=_0xd08fba[_0x96c4('0x14')](function(_0x131185){return refreshOauth2MicrosoftAccessToken(_0x131185)[_0x96c4('0x3b')](function(_0x355f96){startRefreshInterval(_0x355f96);});});return Promise[_0x96c4('0x4d')](_0x2f64c5);})[_0x96c4('0x45')](function(_0x4814c4){var _0x33a7fd=_0x4814c4?util[_0x96c4('0x4e')](_0x4814c4,{'showHidden':![],'depth':null}):'';logger[_0x96c4('0x46')]('[CLOUD_PROVIDER]\x20Error\x20while\x20refreshing\x20the\x20tokens\x20after\x20service\x20restart\x20error:%s',_0x33a7fd);});}module[_0x96c4('0x4f')]={'generateMicrosoftAuthorizationUrl':generateMicrosoftAuthorizationUrl,'getOauth2MicrosoftAccessToken':getOauth2MicrosoftAccessToken,'isValidIdToken':isValidIdToken,'startAllRefreshIntervals':startAllRefreshIntervals,'refreshOauth2MicrosoftAccessToken':refreshOauth2MicrosoftAccessToken,'startRefreshInterval':startRefreshInterval};