e7ce355271b815ceec340a887e72c6517f1394e8
[motion2.git] / server / api / cloudProvider / cloudProvider.controller.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 _0xa6a2=['find','decryptString','create','body','values','Invalid\x20service\x20parameter.\x20Allowed\x20values:\x20','join','encryptString','oauth2MicrosoftAuthorize','findOne','generateMicrosoftAuthorizationUrl','user','oauth2MicrosoftCallback','state','Invalid\x20state\x20parameter','parse','from','base64','ascii','id_token','oauth2Claims','Unable\x20to\x20validate\x20id_token','del','code','data5','access_token','data6','emit','microsoftAuthorization:success','microsoftAuthorization:error','Invalid\x20authentication\x20state\x20parameter','message','Authentication\x20failed\x20for\x20cloud\x20provider\x20#%s,\x20err:%s','stringify','lodash','ioredis','../../config/logger','api','../../mysqldb','redis','localhost','socket.io-emitter','status','offset','undefined','limit','count','set','Content-Range','json','update','then','destroy','end','sendStatus','error','stack','name','send','padEnd','slice','index','map','CloudProvider','fieldName','type','key','model','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','merge','VIRTUAL','filter','options','include','findAll','service','MicrosoftAzure','data3','catch','show','params','keys','rawAttributes','includeAll'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xa6a2,0x13c));var _0x2a6a=function(_0x393eec,_0x53fa56){_0x393eec=_0x393eec-0x0;var _0x24dd68=_0xa6a2[_0x393eec];return _0x24dd68;};'use strict';var _=require(_0x2a6a('0x0'));var Redis=require(_0x2a6a('0x1'));var qs=require('../../components/parsers/qs');var encryptor=require('../../components/encryptor');var config=require('../../config/environment');var logger=require(_0x2a6a('0x2'))(_0x2a6a('0x3'));var db=require(_0x2a6a('0x4'))['db'];var oauth=require('./cloudProvider.oauth');config[_0x2a6a('0x5')]=_['defaults'](config[_0x2a6a('0x5')],{'host':_0x2a6a('0x6'),'port':0x18eb});var socket=require(_0x2a6a('0x7'))(new Redis(config[_0x2a6a('0x5')]));var redis=new Redis(config[_0x2a6a('0x5')]);function respondWithStatusCode(_0x275369,_0x12cb61){_0x12cb61=_0x12cb61||0xcc;return function(_0x22a576){if(_0x22a576){return _0x275369['sendStatus'](_0x12cb61);}return _0x275369['status'](_0x12cb61)['end']();};}function respondWithResult(_0x121875,_0x51ac17){_0x51ac17=_0x51ac17||0xc8;return function(_0x1f1be8){if(_0x1f1be8){return _0x121875[_0x2a6a('0x8')](_0x51ac17)['json'](_0x1f1be8);}};}function respondWithFilteredResult(_0x1965fd,_0x50ea9d){return function(_0x8075e7){if(_0x8075e7){var _0x3eecd4=typeof _0x50ea9d[_0x2a6a('0x9')]===_0x2a6a('0xa')&&typeof _0x50ea9d[_0x2a6a('0xb')]===_0x2a6a('0xa');var _0x550188=_0x8075e7[_0x2a6a('0xc')];var _0x9ef048=_0x3eecd4?0x0:_0x50ea9d[_0x2a6a('0x9')];var _0x37eef6=_0x3eecd4?_0x8075e7['count']:_0x50ea9d[_0x2a6a('0x9')]+_0x50ea9d['limit'];var _0x1dac35;if(_0x37eef6>=_0x550188){_0x37eef6=_0x550188;_0x1dac35=0xc8;}else{_0x1dac35=0xce;}_0x1965fd[_0x2a6a('0x8')](_0x1dac35);return _0x1965fd[_0x2a6a('0xd')](_0x2a6a('0xe'),_0x9ef048+'-'+_0x37eef6+'/'+_0x550188)[_0x2a6a('0xf')](_0x8075e7);}return null;};}function saveUpdates(_0x540326){return function(_0x1d3f02){if(_0x1d3f02){return _0x1d3f02[_0x2a6a('0x10')](_0x540326)[_0x2a6a('0x11')](function(_0x2b8808){return _0x2b8808;});}return null;};}function removeEntity(_0x20e722){return function(_0x5d1329){if(_0x5d1329){return _0x5d1329[_0x2a6a('0x12')]()['then'](function(){_0x20e722['status'](0xcc)[_0x2a6a('0x13')]();});}};}function handleEntityNotFound(_0x23967e){return function(_0x336f16){if(!_0x336f16){_0x23967e[_0x2a6a('0x14')](0x194);}return _0x336f16;};}function handleError(_0x291582,_0x245221){_0x245221=_0x245221||0x1f4;return function(_0x2d4a2c){logger[_0x2a6a('0x15')](_0x2d4a2c[_0x2a6a('0x16')]);if(_0x2d4a2c[_0x2a6a('0x17')]){delete _0x2d4a2c[_0x2a6a('0x17')];}_0x291582[_0x2a6a('0x8')](_0x245221)[_0x2a6a('0x18')](_0x2d4a2c);};}function maskClientSecret(_0xada553){return _[_0x2a6a('0x19')](_0xada553[_0x2a6a('0x1a')](0x0,0x3),0x14,'*');}exports[_0x2a6a('0x1b')]=function(_0x57f18c,_0x4a9fee){var _0x421469={},_0x294dc9={},_0x4c6620={'count':0x0,'rows':[]};var _0x504acb=_[_0x2a6a('0x1c')](db[_0x2a6a('0x1d')]['rawAttributes'],function(_0x84af30){return{'name':_0x84af30[_0x2a6a('0x1e')],'type':_0x84af30[_0x2a6a('0x1f')][_0x2a6a('0x20')]};});_0x294dc9[_0x2a6a('0x21')]=_[_0x2a6a('0x1c')](_0x504acb,_0x2a6a('0x17'));_0x294dc9[_0x2a6a('0x22')]=_['keys'](_0x57f18c[_0x2a6a('0x22')]);_0x294dc9[_0x2a6a('0x23')]=_[_0x2a6a('0x24')](_0x294dc9['model'],_0x294dc9[_0x2a6a('0x22')]);_0x421469[_0x2a6a('0x25')]=_['intersection'](_0x294dc9['model'],qs[_0x2a6a('0x26')](_0x57f18c[_0x2a6a('0x22')]['fields']));_0x421469[_0x2a6a('0x25')]=_0x421469[_0x2a6a('0x25')][_0x2a6a('0x27')]?_0x421469[_0x2a6a('0x25')]:_0x294dc9['model'];if(!_0x57f18c[_0x2a6a('0x22')][_0x2a6a('0x28')](_0x2a6a('0x29'))){_0x421469['limit']=qs[_0x2a6a('0xb')](_0x57f18c[_0x2a6a('0x22')][_0x2a6a('0xb')]);_0x421469['offset']=qs['offset'](_0x57f18c[_0x2a6a('0x22')][_0x2a6a('0x9')]);}_0x421469[_0x2a6a('0x2a')]=qs['sort'](_0x57f18c[_0x2a6a('0x22')][_0x2a6a('0x2b')]);_0x421469['where']=qs[_0x2a6a('0x23')](_['pick'](_0x57f18c[_0x2a6a('0x22')],_0x294dc9['filters']),_0x504acb);if(_0x57f18c['query']['filter']){_0x421469[_0x2a6a('0x2c')]=_[_0x2a6a('0x2d')](_0x421469[_0x2a6a('0x2c')],{'$or':_['map'](_0x504acb,function(_0x2218a9){if(_0x2218a9['type']!==_0x2a6a('0x2e')){var _0x10aad5={};_0x10aad5[_0x2218a9[_0x2a6a('0x17')]]={'$like':'%'+_0x57f18c[_0x2a6a('0x22')][_0x2a6a('0x2f')]+'%'};return _0x10aad5;}})});}_0x421469=_[_0x2a6a('0x2d')]({},_0x421469,_0x57f18c[_0x2a6a('0x30')]);var _0x407a3f={'where':_0x421469[_0x2a6a('0x2c')]};return db[_0x2a6a('0x1d')]['count'](_0x407a3f)[_0x2a6a('0x11')](function(_0x239583){_0x4c6620[_0x2a6a('0xc')]=_0x239583;if(_0x57f18c['query']['includeAll']){_0x421469[_0x2a6a('0x31')]=[{'all':!![]}];}return db[_0x2a6a('0x1d')][_0x2a6a('0x32')](_0x421469);})['then'](function(_0x23136b){_0x4c6620['rows']=_['map'](_0x23136b,function(_0x24ecf4){if(_0x24ecf4[_0x2a6a('0x33')]===_0x2a6a('0x34')){var _0x347437=encryptor['decryptString'](_0x24ecf4['data3']);_0x24ecf4[_0x2a6a('0x35')]=maskClientSecret(_0x347437);}return _0x24ecf4;});return _0x4c6620;})[_0x2a6a('0x11')](respondWithFilteredResult(_0x4a9fee,_0x421469))[_0x2a6a('0x36')](handleError(_0x4a9fee,null));};exports[_0x2a6a('0x37')]=function(_0x21144b,_0x2395a3){var _0x3ac6d6={'raw':!![],'where':{'id':_0x21144b[_0x2a6a('0x38')]['id']}},_0x381509={};_0x381509[_0x2a6a('0x21')]=_[_0x2a6a('0x39')](db[_0x2a6a('0x1d')][_0x2a6a('0x3a')]);_0x381509[_0x2a6a('0x22')]=_[_0x2a6a('0x39')](_0x21144b['query']);_0x381509[_0x2a6a('0x23')]=_[_0x2a6a('0x24')](_0x381509['model'],_0x381509['query']);_0x3ac6d6[_0x2a6a('0x25')]=_[_0x2a6a('0x24')](_0x381509[_0x2a6a('0x21')],qs[_0x2a6a('0x26')](_0x21144b[_0x2a6a('0x22')][_0x2a6a('0x26')]));_0x3ac6d6['attributes']=_0x3ac6d6[_0x2a6a('0x25')][_0x2a6a('0x27')]?_0x3ac6d6[_0x2a6a('0x25')]:_0x381509[_0x2a6a('0x21')];if(_0x21144b['query'][_0x2a6a('0x3b')]){_0x3ac6d6[_0x2a6a('0x31')]=[{'all':!![]}];}_0x3ac6d6=_[_0x2a6a('0x2d')]({},_0x3ac6d6,_0x21144b[_0x2a6a('0x30')]);return db[_0x2a6a('0x1d')][_0x2a6a('0x3c')](_0x3ac6d6)['then'](handleEntityNotFound(_0x2395a3,null))[_0x2a6a('0x11')](function(_0x4aacdb){if(_0x4aacdb[_0x2a6a('0x33')]===_0x2a6a('0x34')){var _0x5ea905=encryptor[_0x2a6a('0x3d')](_0x4aacdb[_0x2a6a('0x35')]);_0x4aacdb[_0x2a6a('0x35')]=maskClientSecret(_0x5ea905);}return _0x4aacdb;})[_0x2a6a('0x11')](respondWithResult(_0x2395a3,null))[_0x2a6a('0x36')](handleError(_0x2395a3,null));};exports[_0x2a6a('0x3e')]=function(_0x22d159,_0x21818e){if(!_0x22d159[_0x2a6a('0x3f')]['name'])throw new Error('Name\x20parameter\x20not\x20specified');if(!_0x22d159[_0x2a6a('0x3f')][_0x2a6a('0x33')])throw new Error('Service\x20parameter\x20not\x20specified');var _0x3fa9c6=db[_0x2a6a('0x1d')][_0x2a6a('0x3a')][_0x2a6a('0x33')][_0x2a6a('0x40')];if(!_0x3fa9c6['includes'](_0x22d159[_0x2a6a('0x3f')]['service']))throw new Error(_0x2a6a('0x41')+_0x3fa9c6[_0x2a6a('0x42')](',\x20'));if(_0x22d159[_0x2a6a('0x3f')][_0x2a6a('0x33')]==='MicrosoftAzure'&&_0x22d159[_0x2a6a('0x3f')]['data3']){_0x22d159['body'][_0x2a6a('0x35')]=encryptor[_0x2a6a('0x43')](_0x22d159[_0x2a6a('0x3f')][_0x2a6a('0x35')]);}return db[_0x2a6a('0x1d')][_0x2a6a('0x3e')](_0x22d159['body'],{})[_0x2a6a('0x11')](respondWithResult(_0x21818e,0xc9))[_0x2a6a('0x36')](handleError(_0x21818e,null));};exports[_0x2a6a('0x10')]=function(_0xfdd148,_0x348c54){if(_0xfdd148['body']['id']){delete _0xfdd148[_0x2a6a('0x3f')]['id'];}return db[_0x2a6a('0x1d')][_0x2a6a('0x3c')]({'where':{'id':_0xfdd148[_0x2a6a('0x38')]['id']}})[_0x2a6a('0x11')](handleEntityNotFound(_0x348c54,null))[_0x2a6a('0x11')](function(_0x58b070){if(_0x58b070['service']===_0x2a6a('0x34')&&_0xfdd148['body'][_0x2a6a('0x35')]){_0xfdd148[_0x2a6a('0x3f')][_0x2a6a('0x35')]=encryptor['encryptString'](_0xfdd148[_0x2a6a('0x3f')][_0x2a6a('0x35')]);}return _0x58b070;})['then'](saveUpdates(_0xfdd148[_0x2a6a('0x3f')],null))[_0x2a6a('0x11')](respondWithResult(_0x348c54,null))['catch'](handleError(_0x348c54,null));};exports[_0x2a6a('0x12')]=function(_0x27c356,_0x342ed9){return db['CloudProvider'][_0x2a6a('0x3c')]({'where':{'id':_0x27c356[_0x2a6a('0x38')]['id']}})[_0x2a6a('0x11')](handleEntityNotFound(_0x342ed9,null))[_0x2a6a('0x11')](removeEntity(_0x342ed9,null))[_0x2a6a('0x36')](handleError(_0x342ed9,null));};exports[_0x2a6a('0x44')]=function(_0x1dd2ae,_0x5e8e9e){return db[_0x2a6a('0x1d')][_0x2a6a('0x45')]({'where':{'id':_0x1dd2ae[_0x2a6a('0x38')]['id']},'raw':!![]})['then'](function(_0x4a6fd5){if(!_0x4a6fd5)return _0x5e8e9e[_0x2a6a('0x14')](0x194);return{'url':oauth[_0x2a6a('0x46')](_0x4a6fd5,_0x1dd2ae[_0x2a6a('0x47')]['id'])};})[_0x2a6a('0x11')](respondWithResult(_0x5e8e9e,null))['catch'](handleError(_0x5e8e9e,null));};exports[_0x2a6a('0x48')]=function(_0x16bd31,_0x597970){var _0x34dc8c=_0x16bd31[_0x2a6a('0x3f')];var _0x580996;var _0x97fec5;if(_0x34dc8c[_0x2a6a('0x15')])throw _0x34dc8c;redis['get'](_0x34dc8c[_0x2a6a('0x49')])[_0x2a6a('0x11')](function(_0x54ad42){if(!_0x54ad42)throw new Error(_0x2a6a('0x4a'));_0x580996=JSON[_0x2a6a('0x4b')](_0x54ad42);var _0x2ce4b5=Buffer[_0x2a6a('0x4c')](_0x34dc8c[_0x2a6a('0x49')],_0x2a6a('0x4d'))['toString'](_0x2a6a('0x4e'));_0x97fec5=JSON[_0x2a6a('0x4b')](_0x2ce4b5);if(!oauth['isValidIdToken'](_0x34dc8c[_0x2a6a('0x4f')],_0x580996[_0x2a6a('0x50')]))throw new Error(_0x2a6a('0x51'));redis[_0x2a6a('0x52')](_0x34dc8c[_0x2a6a('0x49')]);return oauth['getOauth2MicrosoftAccessToken'](_0x34dc8c[_0x2a6a('0x53')],_0x580996);})[_0x2a6a('0x11')](function(_0x52912c){_0x580996[_0x2a6a('0x54')]=_0x52912c[_0x2a6a('0x55')];_0x580996['data6']=_0x52912c['refresh_token'];return db[_0x2a6a('0x1d')][_0x2a6a('0x10')]({'data5':_0x580996['data5'],'data6':_0x580996[_0x2a6a('0x56')]},{'where':{'id':_0x580996['id']}});})[_0x2a6a('0x11')](function(){oauth['startRefreshInterval'](_0x580996);socket[_0x2a6a('0x57')](_0x2a6a('0x58'),{'id':_0x97fec5['id']});return;})[_0x2a6a('0x11')](respondWithStatusCode(_0x597970,null))['catch'](function(_0x3aea32){if(_0x97fec5){socket[_0x2a6a('0x57')](_0x2a6a('0x59'),{'id':_0x97fec5['id']});}if(!_0x580996){logger[_0x2a6a('0x15')](_0x2a6a('0x5a'),_0x3aea32);return _0x597970[_0x2a6a('0x8')](0x1f4)['send'](_0x3aea32[_0x2a6a('0x5b')]);}logger['error'](_0x2a6a('0x5c'),_0x580996['id'],JSON[_0x2a6a('0x5d')](_0x3aea32));});};