590664f32a7f40ff1931428da47e5b48e82eb357
[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 _0x1286=['Invalid\x20service\x20parameter.\x20Allowed\x20values:\x20','encryptString','find','oauth2MicrosoftAuthorize','findOne','generateMicrosoftAuthorizationUrl','user','oauth2MicrosoftCallback','error','state','parse','from','toString','isValidIdToken','id_token','Unable\x20to\x20validate\x20id_token','del','getOauth2MicrosoftAccessToken','data5','access_token','data6','refresh_token','startRefreshInterval','microsoftAuthorization:success','emit','message','Authentication\x20failed\x20for\x20cloud\x20provider\x20#%s','../../components/parsers/qs','../../components/encryptor','../../config/environment','../../config/logger','../../mysqldb','./cloudProvider.oauth','redis','localhost','socket.io-emitter','sendStatus','status','end','json','offset','undefined','count','limit','set','Content-Range','update','then','destroy','stack','name','send','padEnd','slice','index','CloudProvider','rawAttributes','fieldName','type','key','model','map','query','keys','filters','intersection','fields','attributes','hasOwnProperty','nolimit','order','sort','pick','filter','where','VIRTUAL','options','include','findAll','decryptString','data3','catch','show','params','length','includeAll','merge','service','MicrosoftAzure','create','body','values','includes'];(function(_0x3dbe14,_0x542edc){var _0x6525b9=function(_0xe72193){while(--_0xe72193){_0x3dbe14['push'](_0x3dbe14['shift']());}};_0x6525b9(++_0x542edc);}(_0x1286,0x78));var _0x6128=function(_0x83af7f,_0x49c6fd){_0x83af7f=_0x83af7f-0x0;var _0x32d85c=_0x1286[_0x83af7f];return _0x32d85c;};'use strict';var _=require('lodash');var Redis=require('ioredis');var qs=require(_0x6128('0x0'));var encryptor=require(_0x6128('0x1'));var config=require(_0x6128('0x2'));var logger=require(_0x6128('0x3'))('api');var db=require(_0x6128('0x4'))['db'];var oauth=require(_0x6128('0x5'));config['redis']=_['defaults'](config[_0x6128('0x6')],{'host':_0x6128('0x7'),'port':0x18eb});var socket=require(_0x6128('0x8'))(new Redis(config['redis']));var redis=new Redis(config[_0x6128('0x6')]);function respondWithStatusCode(_0x59dd17,_0x3bad2c){_0x3bad2c=_0x3bad2c||0xcc;return function(_0x20a109){if(_0x20a109){return _0x59dd17[_0x6128('0x9')](_0x3bad2c);}return _0x59dd17[_0x6128('0xa')](_0x3bad2c)[_0x6128('0xb')]();};}function respondWithResult(_0x5e1554,_0x4601b6){_0x4601b6=_0x4601b6||0xc8;return function(_0x3971b1){if(_0x3971b1){return _0x5e1554[_0x6128('0xa')](_0x4601b6)[_0x6128('0xc')](_0x3971b1);}};}function respondWithFilteredResult(_0xfd6218,_0x430ea6){return function(_0x2c2fed){if(_0x2c2fed){var _0x4f741f=typeof _0x430ea6[_0x6128('0xd')]===_0x6128('0xe')&&typeof _0x430ea6['limit']===_0x6128('0xe');var _0x5ab823=_0x2c2fed[_0x6128('0xf')];var _0x5d0e7f=_0x4f741f?0x0:_0x430ea6[_0x6128('0xd')];var _0x39d577=_0x4f741f?_0x2c2fed[_0x6128('0xf')]:_0x430ea6[_0x6128('0xd')]+_0x430ea6[_0x6128('0x10')];var _0x2755cf;if(_0x39d577>=_0x5ab823){_0x39d577=_0x5ab823;_0x2755cf=0xc8;}else{_0x2755cf=0xce;}_0xfd6218['status'](_0x2755cf);return _0xfd6218[_0x6128('0x11')](_0x6128('0x12'),_0x5d0e7f+'-'+_0x39d577+'/'+_0x5ab823)[_0x6128('0xc')](_0x2c2fed);}return null;};}function saveUpdates(_0x57ee11){return function(_0x2853a0){if(_0x2853a0){return _0x2853a0[_0x6128('0x13')](_0x57ee11)[_0x6128('0x14')](function(_0x1a63dd){return _0x1a63dd;});}return null;};}function removeEntity(_0x2ef761){return function(_0x522abc){if(_0x522abc){return _0x522abc[_0x6128('0x15')]()['then'](function(){_0x2ef761[_0x6128('0xa')](0xcc)[_0x6128('0xb')]();});}};}function handleEntityNotFound(_0x1fe94c){return function(_0xfa6197){if(!_0xfa6197){_0x1fe94c[_0x6128('0x9')](0x194);}return _0xfa6197;};}function handleError(_0x550e42,_0x210b40){_0x210b40=_0x210b40||0x1f4;return function(_0x5c72e7){logger['error'](_0x5c72e7[_0x6128('0x16')]);if(_0x5c72e7[_0x6128('0x17')]){delete _0x5c72e7[_0x6128('0x17')];}_0x550e42[_0x6128('0xa')](_0x210b40)[_0x6128('0x18')](_0x5c72e7);};}function maskClientSecret(_0x4071e6){return _[_0x6128('0x19')](_0x4071e6[_0x6128('0x1a')](0x0,0x3),0x14,'*');}exports[_0x6128('0x1b')]=function(_0x2933a6,_0xcaadae){var _0x78d3d3={},_0x465bd5={},_0x174007={'count':0x0,'rows':[]};var _0xde298b=_['map'](db[_0x6128('0x1c')][_0x6128('0x1d')],function(_0x4db6ab){return{'name':_0x4db6ab[_0x6128('0x1e')],'type':_0x4db6ab[_0x6128('0x1f')][_0x6128('0x20')]};});_0x465bd5[_0x6128('0x21')]=_[_0x6128('0x22')](_0xde298b,_0x6128('0x17'));_0x465bd5[_0x6128('0x23')]=_[_0x6128('0x24')](_0x2933a6[_0x6128('0x23')]);_0x465bd5[_0x6128('0x25')]=_[_0x6128('0x26')](_0x465bd5['model'],_0x465bd5[_0x6128('0x23')]);_0x78d3d3['attributes']=_['intersection'](_0x465bd5[_0x6128('0x21')],qs[_0x6128('0x27')](_0x2933a6[_0x6128('0x23')][_0x6128('0x27')]));_0x78d3d3[_0x6128('0x28')]=_0x78d3d3[_0x6128('0x28')]['length']?_0x78d3d3['attributes']:_0x465bd5[_0x6128('0x21')];if(!_0x2933a6[_0x6128('0x23')][_0x6128('0x29')](_0x6128('0x2a'))){_0x78d3d3[_0x6128('0x10')]=qs['limit'](_0x2933a6[_0x6128('0x23')]['limit']);_0x78d3d3['offset']=qs[_0x6128('0xd')](_0x2933a6['query'][_0x6128('0xd')]);}_0x78d3d3[_0x6128('0x2b')]=qs[_0x6128('0x2c')](_0x2933a6[_0x6128('0x23')][_0x6128('0x2c')]);_0x78d3d3['where']=qs[_0x6128('0x25')](_[_0x6128('0x2d')](_0x2933a6['query'],_0x465bd5[_0x6128('0x25')]),_0xde298b);if(_0x2933a6[_0x6128('0x23')][_0x6128('0x2e')]){_0x78d3d3[_0x6128('0x2f')]=_['merge'](_0x78d3d3['where'],{'$or':_[_0x6128('0x22')](_0xde298b,function(_0x4bcdc7){if(_0x4bcdc7['type']!==_0x6128('0x30')){var _0x4381d3={};_0x4381d3[_0x4bcdc7[_0x6128('0x17')]]={'$like':'%'+_0x2933a6[_0x6128('0x23')][_0x6128('0x2e')]+'%'};return _0x4381d3;}})});}_0x78d3d3=_['merge']({},_0x78d3d3,_0x2933a6[_0x6128('0x31')]);var _0x49f6df={'where':_0x78d3d3[_0x6128('0x2f')]};return db[_0x6128('0x1c')][_0x6128('0xf')](_0x49f6df)[_0x6128('0x14')](function(_0x3aeeef){_0x174007[_0x6128('0xf')]=_0x3aeeef;if(_0x2933a6[_0x6128('0x23')]['includeAll']){_0x78d3d3[_0x6128('0x32')]=[{'all':!![]}];}return db[_0x6128('0x1c')][_0x6128('0x33')](_0x78d3d3);})[_0x6128('0x14')](function(_0x4d6d3a){_0x174007['rows']=_[_0x6128('0x22')](_0x4d6d3a,function(_0xfce603){if(_0xfce603['service']==='MicrosoftAzure'){var _0x288946=encryptor[_0x6128('0x34')](_0xfce603[_0x6128('0x35')]);_0xfce603[_0x6128('0x35')]=maskClientSecret(_0x288946);}return _0xfce603;});return _0x174007;})[_0x6128('0x14')](respondWithFilteredResult(_0xcaadae,_0x78d3d3))[_0x6128('0x36')](handleError(_0xcaadae,null));};exports[_0x6128('0x37')]=function(_0x4926ca,_0x3646c0){var _0x10edf8={'raw':!![],'where':{'id':_0x4926ca[_0x6128('0x38')]['id']}},_0x18db84={};_0x18db84[_0x6128('0x21')]=_['keys'](db['CloudProvider'][_0x6128('0x1d')]);_0x18db84[_0x6128('0x23')]=_['keys'](_0x4926ca['query']);_0x18db84[_0x6128('0x25')]=_[_0x6128('0x26')](_0x18db84[_0x6128('0x21')],_0x18db84[_0x6128('0x23')]);_0x10edf8[_0x6128('0x28')]=_['intersection'](_0x18db84[_0x6128('0x21')],qs['fields'](_0x4926ca[_0x6128('0x23')][_0x6128('0x27')]));_0x10edf8[_0x6128('0x28')]=_0x10edf8[_0x6128('0x28')][_0x6128('0x39')]?_0x10edf8[_0x6128('0x28')]:_0x18db84[_0x6128('0x21')];if(_0x4926ca[_0x6128('0x23')][_0x6128('0x3a')]){_0x10edf8[_0x6128('0x32')]=[{'all':!![]}];}_0x10edf8=_[_0x6128('0x3b')]({},_0x10edf8,_0x4926ca['options']);return db[_0x6128('0x1c')]['find'](_0x10edf8)['then'](handleEntityNotFound(_0x3646c0,null))['then'](function(_0x3b76cd){if(_0x3b76cd[_0x6128('0x3c')]===_0x6128('0x3d')){var _0x52be0e=encryptor[_0x6128('0x34')](_0x3b76cd['data3']);_0x3b76cd[_0x6128('0x35')]=maskClientSecret(_0x52be0e);}return _0x3b76cd;})[_0x6128('0x14')](respondWithResult(_0x3646c0,null))[_0x6128('0x36')](handleError(_0x3646c0,null));};exports[_0x6128('0x3e')]=function(_0x3acbbc,_0x4e208e){if(!_0x3acbbc[_0x6128('0x3f')][_0x6128('0x17')])throw new Error('Name\x20parameter\x20not\x20specified');if(!_0x3acbbc['body'][_0x6128('0x3c')])throw new Error('Service\x20parameter\x20not\x20specified');var _0x54980c=db[_0x6128('0x1c')][_0x6128('0x1d')][_0x6128('0x3c')][_0x6128('0x40')];if(!_0x54980c[_0x6128('0x41')](_0x3acbbc[_0x6128('0x3f')][_0x6128('0x3c')]))throw new Error(_0x6128('0x42')+_0x54980c['join'](',\x20'));if(_0x3acbbc[_0x6128('0x3f')]['service']===_0x6128('0x3d')&&_0x3acbbc[_0x6128('0x3f')][_0x6128('0x35')]){_0x3acbbc[_0x6128('0x3f')][_0x6128('0x35')]=encryptor['encryptString'](_0x3acbbc['body'][_0x6128('0x35')]);}return db[_0x6128('0x1c')][_0x6128('0x3e')](_0x3acbbc[_0x6128('0x3f')],{})[_0x6128('0x14')](respondWithResult(_0x4e208e,0xc9))[_0x6128('0x36')](handleError(_0x4e208e,null));};exports['update']=function(_0x782e0f,_0x23d2d7){if(_0x782e0f['body']['id']){delete _0x782e0f[_0x6128('0x3f')]['id'];}return db[_0x6128('0x1c')]['find']({'where':{'id':_0x782e0f[_0x6128('0x38')]['id']}})['then'](handleEntityNotFound(_0x23d2d7,null))['then'](function(_0x122cb0){if(_0x122cb0[_0x6128('0x3c')]===_0x6128('0x3d')&&_0x782e0f[_0x6128('0x3f')]['data3']){_0x782e0f[_0x6128('0x3f')][_0x6128('0x35')]=encryptor[_0x6128('0x43')](_0x782e0f[_0x6128('0x3f')][_0x6128('0x35')]);}return _0x122cb0;})[_0x6128('0x14')](saveUpdates(_0x782e0f[_0x6128('0x3f')],null))[_0x6128('0x14')](respondWithResult(_0x23d2d7,null))[_0x6128('0x36')](handleError(_0x23d2d7,null));};exports[_0x6128('0x15')]=function(_0x2261fa,_0x279e51){return db[_0x6128('0x1c')][_0x6128('0x44')]({'where':{'id':_0x2261fa[_0x6128('0x38')]['id']}})[_0x6128('0x14')](handleEntityNotFound(_0x279e51,null))[_0x6128('0x14')](removeEntity(_0x279e51,null))[_0x6128('0x36')](handleError(_0x279e51,null));};exports[_0x6128('0x45')]=function(_0x319f64,_0x311847){return db[_0x6128('0x1c')][_0x6128('0x46')]({'where':{'id':_0x319f64['params']['id']},'raw':!![]})['then'](function(_0x23e96e){if(!_0x23e96e)return _0x311847[_0x6128('0x9')](0x194);return{'url':oauth[_0x6128('0x47')](_0x23e96e,_0x319f64[_0x6128('0x48')]['id'])};})['then'](respondWithResult(_0x311847,null))[_0x6128('0x36')](handleError(_0x311847,null));};exports[_0x6128('0x49')]=function(_0x493530,_0x24b93e){var _0x6b89d2=_0x493530['body'];var _0x278d44;var _0x42a722;if(_0x6b89d2[_0x6128('0x4a')])throw _0x6b89d2;redis['get'](_0x6b89d2[_0x6128('0x4b')])['then'](function(_0x38fb2f){if(!_0x38fb2f)throw new Error('Invalid\x20state\x20parameter');_0x278d44=JSON[_0x6128('0x4c')](_0x38fb2f);var _0x173141=Buffer[_0x6128('0x4d')](_0x6b89d2[_0x6128('0x4b')],'base64')[_0x6128('0x4e')]('ascii');_0x42a722=JSON[_0x6128('0x4c')](_0x173141);if(!oauth[_0x6128('0x4f')](_0x6b89d2[_0x6128('0x50')],_0x278d44['oauth2Claims']))throw new Error(_0x6128('0x51'));redis[_0x6128('0x52')](_0x6b89d2[_0x6128('0x4b')]);return oauth[_0x6128('0x53')](_0x6b89d2['code'],_0x278d44);})[_0x6128('0x14')](function(_0x159e70){_0x278d44[_0x6128('0x54')]=_0x159e70[_0x6128('0x55')];_0x278d44[_0x6128('0x56')]=_0x159e70[_0x6128('0x57')];return db[_0x6128('0x1c')]['update']({'data5':_0x278d44[_0x6128('0x54')],'data6':_0x278d44[_0x6128('0x56')]},{'where':{'id':_0x278d44['id']}});})[_0x6128('0x14')](function(){oauth[_0x6128('0x58')](_0x278d44);socket['emit'](_0x6128('0x59'),{'id':_0x42a722['id']});return;})[_0x6128('0x14')](respondWithStatusCode(_0x24b93e,null))['catch'](function(_0x3cff91){if(_0x42a722){socket[_0x6128('0x5a')]('microsoftAuthorization:error',{'id':_0x42a722['id']});}if(!_0x278d44){logger[_0x6128('0x4a')]('Invalid\x20authentication\x20state\x20parameter',_0x3cff91);return _0x24b93e[_0x6128('0xa')](0x1f4)['send'](_0x3cff91[_0x6128('0x5b')]);}logger[_0x6128('0x4a')](_0x6128('0x5c'),_0x278d44['id'],_0x3cff91);});};