Built motion from commit a61a4a20.|2.5.46
[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 _0xbf55=['decryptString','data3','data5','access_token','refresh_token','update','error','Failed\x20to\x20refresh\x20access\x20token\x20for\x20cloud\x20provider\x20#%s,\x20-\x20err:%s','POST','intervals','bind','all','catch','inspect','[CLOUD_PROVIDER]\x20Error\x20while\x20refreshing\x20the\x20tokens\x20after\x20service\x20restart\x20error:%s','lodash','crypto','moment','ioredis','request-promise','../../config/logger','api','../../config/schedule/cloud-provider','../../mysqldb','redis','defaults','localhost','https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0','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','map','type','Dynamics365','push','data7','/.default','join','replace','{TENANT_ID}','data2','id_token','from','stringify','toString','base64','randomBytes','hex','data1','response_type','redirect_uri','data4','response_mode','form_post','scope','state','nonce','login','key','oauth2/','decode','iss','aud','audience','isAfter','unix','resolve','then','CloudProvider','findOne','data6'];(function(_0x86e009,_0x1ac7ca){var _0x590dcd=function(_0x4a87da){while(--_0x4a87da){_0x86e009['push'](_0x86e009['shift']());}};_0x590dcd(++_0x1ac7ca);}(_0xbf55,0x1d1));var _0x5bf5=function(_0x540d04,_0x249c77){_0x540d04=_0x540d04-0x0;var _0x3c7b57=_0xbf55[_0x540d04];return _0x3c7b57;};'use strict';var _=require(_0x5bf5('0x0'));var crypto=require(_0x5bf5('0x1'));var jwt=require('jsonwebtoken');var moment=require(_0x5bf5('0x2'));var Redis=require(_0x5bf5('0x3'));var rp=require(_0x5bf5('0x4'));var util=require('util');var encryptor=require('../../components/encryptor');var config=require('../../config/environment');var logger=require(_0x5bf5('0x5'))(_0x5bf5('0x6'));var schedule=require(_0x5bf5('0x7'));var db=require(_0x5bf5('0x8'))['db'];config[_0x5bf5('0x9')]=_[_0x5bf5('0xa')](config[_0x5bf5('0x9')],{'host':_0x5bf5('0xb'),'port':0x18eb});var redis=new Redis(config[_0x5bf5('0x9')]);var MICROSOFT_AUTH_URL=_0x5bf5('0xc');var AZURE_AUTH_SCOPES={'Outlook365':[_0x5bf5('0xd'),_0x5bf5('0xe'),_0x5bf5('0xf'),_0x5bf5('0x10'),_0x5bf5('0x11'),_0x5bf5('0x12'),_0x5bf5('0x13')],'Dynamics365':[_0x5bf5('0xd'),'offline_access']};var MICROSOFT_AUTH_ENDPOINT='/authorize';var MICROSOFT_TOKEN_ENDPOINT='/token';var OAUTH_REFRESH_INTERVAL=0xfa;function getAuthorizationScopes(_0x266ec9){var _0x590b9b=_[_0x5bf5('0x14')](AZURE_AUTH_SCOPES[_0x266ec9[_0x5bf5('0x15')]]);if(_0x266ec9[_0x5bf5('0x15')]===_0x5bf5('0x16'))_0x590b9b[_0x5bf5('0x17')](_0x266ec9[_0x5bf5('0x18')]+_0x5bf5('0x19'));return _0x590b9b[_0x5bf5('0x1a')]('\x20');}function getAccessTokenScope(_0x3f31f1){if(_0x3f31f1[_0x5bf5('0x15')]==='Outlook365')return _0x5bf5('0x11');if(_0x3f31f1[_0x5bf5('0x15')]===_0x5bf5('0x16'))return _0x3f31f1[_0x5bf5('0x18')]+_0x5bf5('0x19');}function generateMicrosoftAuthorizationUrl(_0x8d6171,_0x4fc29f){var _0x660c0=MICROSOFT_AUTH_URL[_0x5bf5('0x1b')](_0x5bf5('0x1c'),_0x8d6171[_0x5bf5('0x1d')]);var _0x3b9fd4=['code',_0x5bf5('0x1e')];var _0x503125=Buffer[_0x5bf5('0x1f')](JSON[_0x5bf5('0x20')]({'id':_0x4fc29f}))[_0x5bf5('0x21')](_0x5bf5('0x22'));var _0x339a88=crypto[_0x5bf5('0x23')](0x10)['toString'](_0x5bf5('0x24'));var _0x10c00a=getAuthorizationScopes(_0x8d6171);var _0x25dcf7=[{'key':'client_id','value':_0x8d6171[_0x5bf5('0x25')]},{'key':_0x5bf5('0x26'),'value':encodeURIComponent(_0x3b9fd4[_0x5bf5('0x1a')]('\x20'))},{'key':_0x5bf5('0x27'),'value':_0x8d6171[_0x5bf5('0x28')]},{'key':_0x5bf5('0x29'),'value':_0x5bf5('0x2a')},{'key':_0x5bf5('0x2b'),'value':encodeURIComponent(_0x10c00a)},{'key':_0x5bf5('0x2c'),'value':_0x503125},{'key':_0x5bf5('0x2d'),'value':_0x339a88},{'key':'prompt','value':_0x5bf5('0x2e')}];var _0x1f09d7=_0x660c0+MICROSOFT_AUTH_ENDPOINT+'?'+_[_0x5bf5('0x14')](_0x25dcf7,function(_0x7ed1ee){return _0x7ed1ee[_0x5bf5('0x2f')]+'='+_0x7ed1ee['value'];})[_0x5bf5('0x1a')]('&');_0x8d6171['oauth2Claims']={'issuer':_0x660c0[_0x5bf5('0x1b')](_0x5bf5('0x30'),''),'audience':_0x8d6171[_0x5bf5('0x25')],'state':_0x503125,'nonce':_0x339a88};redis['set'](_0x503125,JSON['stringify'](_0x8d6171));return _0x1f09d7;}function isValidIdToken(_0x5ba720,_0x21699a){try{var _0x30ae23=jwt[_0x5bf5('0x31')](_0x5ba720,{'complete':!![]});var _0x2b71e3=_0x30ae23['payload'];if(_0x2b71e3[_0x5bf5('0x32')]!==_0x21699a['issuer'])return![];if(_0x2b71e3[_0x5bf5('0x33')]!==_0x21699a[_0x5bf5('0x34')])return![];if(_0x2b71e3['nonce']!==_0x21699a[_0x5bf5('0x2d')])return![];if(moment()[_0x5bf5('0x35')](moment[_0x5bf5('0x36')](_0x2b71e3['exp'])))return![];return!![];}catch(_0x369a42){throw _0x369a42;}}function refreshOauth2MicrosoftAccessToken(_0x30effc){return Promise[_0x5bf5('0x37')]()[_0x5bf5('0x38')](function(){if(_0x30effc['data3'])return _0x30effc;return db[_0x5bf5('0x39')][_0x5bf5('0x3a')]({'where':{'id':_0x30effc['id']},'raw':!![]});})[_0x5bf5('0x38')](function(_0x3b49eb){var _0x3a5202={'grant_type':'refresh_token','refresh_token':_0x3b49eb[_0x5bf5('0x3b')],'scope':getAccessTokenScope(_0x3b49eb),'redirect_uri':_0x3b49eb[_0x5bf5('0x28')],'client_id':_0x3b49eb[_0x5bf5('0x25')],'client_secret':encryptor[_0x5bf5('0x3c')](_0x3b49eb[_0x5bf5('0x3d')])};var _0x47639f={'method':'POST','uri':MICROSOFT_AUTH_URL[_0x5bf5('0x1b')]('{TENANT_ID}',_0x3b49eb[_0x5bf5('0x1d')])+MICROSOFT_TOKEN_ENDPOINT,'form':_0x3a5202,'json':!![]};return rp(_0x47639f);})['then'](function(_0x27e50c){_0x30effc[_0x5bf5('0x3e')]=_0x27e50c[_0x5bf5('0x3f')];_0x30effc[_0x5bf5('0x3b')]=_0x27e50c[_0x5bf5('0x40')];return db[_0x5bf5('0x39')][_0x5bf5('0x41')]({'data5':_0x30effc[_0x5bf5('0x3e')],'data6':_0x30effc['data6']},{'where':{'id':_0x30effc['id']}});})['then'](function(){return _0x30effc;})['catch'](function(_0x3da7e1){logger[_0x5bf5('0x42')](_0x5bf5('0x43'),_0x30effc['id'],_0x3da7e1);});}function getOauth2MicrosoftAccessToken(_0x5bab0d,_0x295015){var _0x2a4c40={'grant_type':'authorization_code','code':_0x5bab0d,'scope':getAccessTokenScope(_0x295015),'redirect_uri':_0x295015[_0x5bf5('0x28')],'client_id':_0x295015[_0x5bf5('0x25')],'client_secret':encryptor[_0x5bf5('0x3c')](_0x295015[_0x5bf5('0x3d')])};var _0x626808={'method':_0x5bf5('0x44'),'uri':MICROSOFT_AUTH_URL[_0x5bf5('0x1b')](_0x5bf5('0x1c'),_0x295015['data2'])+MICROSOFT_TOKEN_ENDPOINT,'form':_0x2a4c40,'json':!![]};return rp(_0x626808);}function startRefreshInterval(_0x2c72a7){var _0x532737=schedule[_0x5bf5('0x45')];if(_0x532737[_0x2c72a7['id']])clearInterval(_0x532737[_0x2c72a7['id']]);_0x532737[_0x2c72a7['id']]=setInterval(refreshOauth2MicrosoftAccessToken[_0x5bf5('0x46')](this,{'id':_0x2c72a7['id']}),OAUTH_REFRESH_INTERVAL*0x3e8);schedule[_0x5bf5('0x45')]=_0x532737;}function startAllRefreshIntervals(){return db['CloudProvider']['findAll']({'where':{'data6':{'$ne':null}},'raw':!![]})[_0x5bf5('0x38')](function(_0x42b722){var _0x714725=_0x42b722['map'](function(_0x5e36a4){return refreshOauth2MicrosoftAccessToken(_0x5e36a4)[_0x5bf5('0x38')](function(_0x182b55){startRefreshInterval(_0x182b55);});});return Promise[_0x5bf5('0x47')](_0x714725);})[_0x5bf5('0x48')](function(_0x3e73b6){var _0x3f9aff=_0x3e73b6?util[_0x5bf5('0x49')](_0x3e73b6,{'showHidden':![],'depth':null}):'';logger[_0x5bf5('0x42')](_0x5bf5('0x4a'),_0x3f9aff);});}module['exports']={'generateMicrosoftAuthorizationUrl':generateMicrosoftAuthorizationUrl,'getOauth2MicrosoftAccessToken':getOauth2MicrosoftAccessToken,'isValidIdToken':isValidIdToken,'startAllRefreshIntervals':startAllRefreshIntervals,'refreshOauth2MicrosoftAccessToken':refreshOauth2MicrosoftAccessToken,'startRefreshInterval':startRefreshInterval};