a5dd22a87b048d5e532a553535b1bfc8149ec4fa
[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 _0xae7f=['https://outlook.office.com/POP.AccessAsUser.All','https://outlook.office.com/SMTP.Send','/token','map','type','Dynamics365','push','data7','/.default','replace','{TENANT_ID}','data2','id_token','stringify','toString','base64','randomBytes','hex','data1','response_type','join','redirect_uri','data4','response_mode','form_post','state','nonce','prompt','login','value','oauth2/','set','decode','iss','issuer','isAfter','unix','exp','then','CloudProvider','refresh_token','data6','decryptString','data3','data5','access_token','update','catch','error','Failed\x20to\x20refresh\x20access\x20token\x20for\x20cloud\x20provider\x20#%s,\x20-\x20err:%s','authorization_code','POST','intervals','bind','findAll','all','lodash','moment','ioredis','request-promise','util','../../config/environment','../../config/logger','api','../../mysqldb','redis','defaults','https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0','openid','profile','email','offline_access','https://outlook.office365.com/IMAP.AccessAsUser.All'];(function(_0x5c1aaf,_0x53267a){var _0x3d202c=function(_0x36af8b){while(--_0x36af8b){_0x5c1aaf['push'](_0x5c1aaf['shift']());}};_0x3d202c(++_0x53267a);}(_0xae7f,0x1a5));var _0xfae7=function(_0x25e458,_0x58d1c5){_0x25e458=_0x25e458-0x0;var _0x182993=_0xae7f[_0x25e458];return _0x182993;};'use strict';var _=require(_0xfae7('0x0'));var crypto=require('crypto');var jwt=require('jsonwebtoken');var moment=require(_0xfae7('0x1'));var Redis=require(_0xfae7('0x2'));var rp=require(_0xfae7('0x3'));var util=require(_0xfae7('0x4'));var encryptor=require('../../components/encryptor');var config=require(_0xfae7('0x5'));var logger=require(_0xfae7('0x6'))(_0xfae7('0x7'));var schedule=require('../../config/schedule/cloud-provider');var db=require(_0xfae7('0x8'))['db'];config[_0xfae7('0x9')]=_[_0xfae7('0xa')](config[_0xfae7('0x9')],{'host':'localhost','port':0x18eb});var redis=new Redis(config['redis']);var MICROSOFT_AUTH_URL=_0xfae7('0xb');var AZURE_AUTH_SCOPES={'Outlook365':[_0xfae7('0xc'),_0xfae7('0xd'),_0xfae7('0xe'),_0xfae7('0xf'),_0xfae7('0x10'),_0xfae7('0x11'),_0xfae7('0x12')],'Dynamics365':[_0xfae7('0xc'),_0xfae7('0xf')]};var MICROSOFT_AUTH_ENDPOINT='/authorize';var MICROSOFT_TOKEN_ENDPOINT=_0xfae7('0x13');var OAUTH_REFRESH_INTERVAL=0xfa;function getAuthorizationScopes(_0x114650){var _0x571387=_[_0xfae7('0x14')](AZURE_AUTH_SCOPES[_0x114650[_0xfae7('0x15')]]);if(_0x114650[_0xfae7('0x15')]===_0xfae7('0x16'))_0x571387[_0xfae7('0x17')](_0x114650[_0xfae7('0x18')]+_0xfae7('0x19'));return _0x571387['join']('\x20');}function getAccessTokenScope(_0x1e1d83){if(_0x1e1d83[_0xfae7('0x15')]==='Outlook365')return _0xfae7('0x10');if(_0x1e1d83[_0xfae7('0x15')]==='Dynamics365')return _0x1e1d83[_0xfae7('0x18')]+'/.default';}function generateMicrosoftAuthorizationUrl(_0x609910,_0x517434){var _0x38cd99=MICROSOFT_AUTH_URL[_0xfae7('0x1a')](_0xfae7('0x1b'),_0x609910[_0xfae7('0x1c')]);var _0x3c8a7c=['code',_0xfae7('0x1d')];var _0x2f364f=Buffer['from'](JSON[_0xfae7('0x1e')]({'id':_0x517434}))[_0xfae7('0x1f')](_0xfae7('0x20'));var _0x59eca1=crypto[_0xfae7('0x21')](0x10)[_0xfae7('0x1f')](_0xfae7('0x22'));var _0x3a642f=getAuthorizationScopes(_0x609910);var _0x391f0b=[{'key':'client_id','value':_0x609910[_0xfae7('0x23')]},{'key':_0xfae7('0x24'),'value':encodeURIComponent(_0x3c8a7c[_0xfae7('0x25')]('\x20'))},{'key':_0xfae7('0x26'),'value':_0x609910[_0xfae7('0x27')]},{'key':_0xfae7('0x28'),'value':_0xfae7('0x29')},{'key':'scope','value':encodeURIComponent(_0x3a642f)},{'key':_0xfae7('0x2a'),'value':_0x2f364f},{'key':_0xfae7('0x2b'),'value':_0x59eca1},{'key':_0xfae7('0x2c'),'value':_0xfae7('0x2d')}];var _0x2e999e=_0x38cd99+MICROSOFT_AUTH_ENDPOINT+'?'+_[_0xfae7('0x14')](_0x391f0b,function(_0x369879){return _0x369879['key']+'='+_0x369879[_0xfae7('0x2e')];})[_0xfae7('0x25')]('&');_0x609910['oauth2Claims']={'issuer':_0x38cd99[_0xfae7('0x1a')](_0xfae7('0x2f'),''),'audience':_0x609910[_0xfae7('0x23')],'state':_0x2f364f,'nonce':_0x59eca1};redis[_0xfae7('0x30')](_0x2f364f,JSON[_0xfae7('0x1e')](_0x609910));return _0x2e999e;}function isValidIdToken(_0x2186ec,_0xaa0db0){try{var _0x46d96e=jwt[_0xfae7('0x31')](_0x2186ec,{'complete':!![]});var _0x14746d=_0x46d96e['payload'];if(_0x14746d[_0xfae7('0x32')]!==_0xaa0db0[_0xfae7('0x33')])return![];if(_0x14746d['aud']!==_0xaa0db0['audience'])return![];if(_0x14746d[_0xfae7('0x2b')]!==_0xaa0db0[_0xfae7('0x2b')])return![];if(moment()[_0xfae7('0x34')](moment[_0xfae7('0x35')](_0x14746d[_0xfae7('0x36')])))return![];return!![];}catch(_0x2a79e5){throw _0x2a79e5;}}function refreshOauth2MicrosoftAccessToken(_0x36f3e0){return Promise['resolve']()[_0xfae7('0x37')](function(){if(_0x36f3e0['data3'])return _0x36f3e0;return db[_0xfae7('0x38')]['findOne']({'where':{'id':_0x36f3e0['id']},'raw':!![]});})[_0xfae7('0x37')](function(_0x5bd671){var _0x5aa938={'grant_type':_0xfae7('0x39'),'refresh_token':_0x5bd671[_0xfae7('0x3a')],'scope':getAccessTokenScope(_0x5bd671),'redirect_uri':_0x5bd671[_0xfae7('0x27')],'client_id':_0x5bd671[_0xfae7('0x23')],'client_secret':encryptor[_0xfae7('0x3b')](_0x5bd671[_0xfae7('0x3c')])};var _0x4df24f={'method':'POST','uri':MICROSOFT_AUTH_URL['replace'](_0xfae7('0x1b'),_0x5bd671[_0xfae7('0x1c')])+MICROSOFT_TOKEN_ENDPOINT,'form':_0x5aa938,'json':!![]};return rp(_0x4df24f);})['then'](function(_0x192aeb){_0x36f3e0[_0xfae7('0x3d')]=_0x192aeb[_0xfae7('0x3e')];_0x36f3e0['data6']=_0x192aeb[_0xfae7('0x39')];return db[_0xfae7('0x38')][_0xfae7('0x3f')]({'data5':_0x36f3e0['data5'],'data6':_0x36f3e0[_0xfae7('0x3a')]},{'where':{'id':_0x36f3e0['id']}});})[_0xfae7('0x37')](function(){return _0x36f3e0;})[_0xfae7('0x40')](function(_0x126a82){logger[_0xfae7('0x41')](_0xfae7('0x42'),_0x36f3e0['id'],_0x126a82);});}function getOauth2MicrosoftAccessToken(_0x25aa86,_0x14e6ec){var _0x1bc91b={'grant_type':_0xfae7('0x43'),'code':_0x25aa86,'scope':getAccessTokenScope(_0x14e6ec),'redirect_uri':_0x14e6ec[_0xfae7('0x27')],'client_id':_0x14e6ec['data1'],'client_secret':encryptor[_0xfae7('0x3b')](_0x14e6ec[_0xfae7('0x3c')])};var _0x4f7cda={'method':_0xfae7('0x44'),'uri':MICROSOFT_AUTH_URL[_0xfae7('0x1a')]('{TENANT_ID}',_0x14e6ec[_0xfae7('0x1c')])+MICROSOFT_TOKEN_ENDPOINT,'form':_0x1bc91b,'json':!![]};return rp(_0x4f7cda);}function startRefreshInterval(_0x141d54){var _0x5856bd=schedule[_0xfae7('0x45')];if(_0x5856bd[_0x141d54['id']])clearInterval(_0x5856bd[_0x141d54['id']]);_0x5856bd[_0x141d54['id']]=setInterval(refreshOauth2MicrosoftAccessToken[_0xfae7('0x46')](this,{'id':_0x141d54['id']}),OAUTH_REFRESH_INTERVAL*0x3e8);schedule[_0xfae7('0x45')]=_0x5856bd;}function startAllRefreshIntervals(){return db[_0xfae7('0x38')][_0xfae7('0x47')]({'where':{'data6':{'$ne':null}},'raw':!![]})[_0xfae7('0x37')](function(_0x198689){var _0x467a8f=_0x198689[_0xfae7('0x14')](function(_0x46f1e3){return refreshOauth2MicrosoftAccessToken(_0x46f1e3)[_0xfae7('0x37')](function(_0x353dd1){startRefreshInterval(_0x353dd1);});});return Promise[_0xfae7('0x48')](_0x467a8f);})[_0xfae7('0x40')](function(_0x2f7262){var _0x96f577=_0x2f7262?util['inspect'](_0x2f7262,{'showHidden':![],'depth':null}):'';logger[_0xfae7('0x41')]('[CLOUD_PROVIDER]\x20Error\x20while\x20refreshing\x20the\x20tokens\x20after\x20service\x20restart\x20error:%s',_0x96f577);});}module['exports']={'generateMicrosoftAuthorizationUrl':generateMicrosoftAuthorizationUrl,'getOauth2MicrosoftAccessToken':getOauth2MicrosoftAccessToken,'isValidIdToken':isValidIdToken,'startAllRefreshIntervals':startAllRefreshIntervals,'refreshOauth2MicrosoftAccessToken':refreshOauth2MicrosoftAccessToken,'startRefreshInterval':startRefreshInterval};