Built motion from commit 1fd437e9.|2.6.19
[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 _0x3ae0=['json','undefined','limit','count','offset','set','Content-Range','update','then','destroy','end','sendStatus','error','name','send','padEnd','slice','index','map','CloudProvider','rawAttributes','type','key','model','query','keys','filters','intersection','attributes','fields','nolimit','order','sort','where','pick','merge','VIRTUAL','filter','options','includeAll','include','findAll','rows','service','MicrosoftAzure','decryptString','data3','catch','params','length','create','Name\x20parameter\x20not\x20specified','body','Service\x20parameter\x20not\x20specified','values','find','encryptString','oauth2MicrosoftAuthorize','findOne','user','oauth2MicrosoftCallback','get','parse','from','state','base64','toString','ascii','isValidIdToken','oauth2Claims','Unable\x20to\x20validate\x20id_token','del','getOauth2MicrosoftAccessToken','code','data5','data6','refresh_token','startRefreshInterval','emit','microsoftAuthorization:success','microsoftAuthorization:error','Invalid\x20authentication\x20state\x20parameter','message','stringify','lodash','ioredis','../../config/logger','api','../../mysqldb','defaults','redis','localhost','socket.io-emitter','status'];(function(_0x34ae7e,_0x1e8cdd){var _0x2a5324=function(_0x4f1dfc){while(--_0x4f1dfc){_0x34ae7e['push'](_0x34ae7e['shift']());}};_0x2a5324(++_0x1e8cdd);}(_0x3ae0,0x110));var _0x03ae=function(_0x57349e,_0x34c1c1){_0x57349e=_0x57349e-0x0;var _0x2a2671=_0x3ae0[_0x57349e];return _0x2a2671;};'use strict';var _=require(_0x03ae('0x0'));var Redis=require(_0x03ae('0x1'));var qs=require('../../components/parsers/qs');var encryptor=require('../../components/encryptor');var config=require('../../config/environment');var logger=require(_0x03ae('0x2'))(_0x03ae('0x3'));var db=require(_0x03ae('0x4'))['db'];var oauth=require('./cloudProvider.oauth');config['redis']=_[_0x03ae('0x5')](config[_0x03ae('0x6')],{'host':_0x03ae('0x7'),'port':0x18eb});var socket=require(_0x03ae('0x8'))(new Redis(config[_0x03ae('0x6')]));var redis=new Redis(config[_0x03ae('0x6')]);function respondWithStatusCode(_0x3a64fc,_0x1aa2a0){_0x1aa2a0=_0x1aa2a0||0xcc;return function(_0x2d2093){if(_0x2d2093){return _0x3a64fc['sendStatus'](_0x1aa2a0);}return _0x3a64fc[_0x03ae('0x9')](_0x1aa2a0)['end']();};}function respondWithResult(_0x51ee33,_0x2c327f){_0x2c327f=_0x2c327f||0xc8;return function(_0x53f7bc){if(_0x53f7bc){return _0x51ee33[_0x03ae('0x9')](_0x2c327f)[_0x03ae('0xa')](_0x53f7bc);}};}function respondWithFilteredResult(_0x5a2aa8,_0x2d87c0){return function(_0x43c660){if(_0x43c660){var _0x2d0517=typeof _0x2d87c0['offset']===_0x03ae('0xb')&&typeof _0x2d87c0[_0x03ae('0xc')]==='undefined';var _0x549c2a=_0x43c660[_0x03ae('0xd')];var _0x21682e=_0x2d0517?0x0:_0x2d87c0[_0x03ae('0xe')];var _0x403a8a=_0x2d0517?_0x43c660['count']:_0x2d87c0[_0x03ae('0xe')]+_0x2d87c0[_0x03ae('0xc')];var _0x541da5;if(_0x403a8a>=_0x549c2a){_0x403a8a=_0x549c2a;_0x541da5=0xc8;}else{_0x541da5=0xce;}_0x5a2aa8['status'](_0x541da5);return _0x5a2aa8[_0x03ae('0xf')](_0x03ae('0x10'),_0x21682e+'-'+_0x403a8a+'/'+_0x549c2a)[_0x03ae('0xa')](_0x43c660);}return null;};}function saveUpdates(_0x371aa2){return function(_0x596f5b){if(_0x596f5b){return _0x596f5b[_0x03ae('0x11')](_0x371aa2)[_0x03ae('0x12')](function(_0x2c81f){return _0x2c81f;});}return null;};}function removeEntity(_0x2cdb86){return function(_0x54f93a){if(_0x54f93a){return _0x54f93a[_0x03ae('0x13')]()[_0x03ae('0x12')](function(){_0x2cdb86[_0x03ae('0x9')](0xcc)[_0x03ae('0x14')]();});}};}function handleEntityNotFound(_0x2b3643){return function(_0x2cf171){if(!_0x2cf171){_0x2b3643[_0x03ae('0x15')](0x194);}return _0x2cf171;};}function handleError(_0xa8c24f,_0x43a149){_0x43a149=_0x43a149||0x1f4;return function(_0x509b0e){logger[_0x03ae('0x16')](_0x509b0e['stack']);if(_0x509b0e[_0x03ae('0x17')]){delete _0x509b0e[_0x03ae('0x17')];}_0xa8c24f[_0x03ae('0x9')](_0x43a149)[_0x03ae('0x18')](_0x509b0e);};}function maskClientSecret(_0x5674f9){return _[_0x03ae('0x19')](_0x5674f9[_0x03ae('0x1a')](0x0,0x3),0x14,'*');}exports[_0x03ae('0x1b')]=function(_0x560dbd,_0x78e833){var _0x126ba7={},_0x342eda={},_0x9c832b={'count':0x0,'rows':[]};var _0x28c9fb=_[_0x03ae('0x1c')](db[_0x03ae('0x1d')][_0x03ae('0x1e')],function(_0x527c7d){return{'name':_0x527c7d['fieldName'],'type':_0x527c7d[_0x03ae('0x1f')][_0x03ae('0x20')]};});_0x342eda[_0x03ae('0x21')]=_[_0x03ae('0x1c')](_0x28c9fb,_0x03ae('0x17'));_0x342eda[_0x03ae('0x22')]=_[_0x03ae('0x23')](_0x560dbd[_0x03ae('0x22')]);_0x342eda[_0x03ae('0x24')]=_[_0x03ae('0x25')](_0x342eda[_0x03ae('0x21')],_0x342eda['query']);_0x126ba7[_0x03ae('0x26')]=_[_0x03ae('0x25')](_0x342eda['model'],qs[_0x03ae('0x27')](_0x560dbd[_0x03ae('0x22')]['fields']));_0x126ba7['attributes']=_0x126ba7[_0x03ae('0x26')]['length']?_0x126ba7['attributes']:_0x342eda['model'];if(!_0x560dbd[_0x03ae('0x22')]['hasOwnProperty'](_0x03ae('0x28'))){_0x126ba7[_0x03ae('0xc')]=qs[_0x03ae('0xc')](_0x560dbd[_0x03ae('0x22')][_0x03ae('0xc')]);_0x126ba7[_0x03ae('0xe')]=qs['offset'](_0x560dbd[_0x03ae('0x22')][_0x03ae('0xe')]);}_0x126ba7[_0x03ae('0x29')]=qs[_0x03ae('0x2a')](_0x560dbd[_0x03ae('0x22')]['sort']);_0x126ba7[_0x03ae('0x2b')]=qs[_0x03ae('0x24')](_[_0x03ae('0x2c')](_0x560dbd[_0x03ae('0x22')],_0x342eda[_0x03ae('0x24')]),_0x28c9fb);if(_0x560dbd[_0x03ae('0x22')]['filter']){_0x126ba7['where']=_[_0x03ae('0x2d')](_0x126ba7[_0x03ae('0x2b')],{'$or':_['map'](_0x28c9fb,function(_0x554c95){if(_0x554c95[_0x03ae('0x1f')]!==_0x03ae('0x2e')){var _0x21333d={};_0x21333d[_0x554c95[_0x03ae('0x17')]]={'$like':'%'+_0x560dbd[_0x03ae('0x22')][_0x03ae('0x2f')]+'%'};return _0x21333d;}})});}_0x126ba7=_['merge']({},_0x126ba7,_0x560dbd[_0x03ae('0x30')]);var _0x528c3a={'where':_0x126ba7[_0x03ae('0x2b')]};return db[_0x03ae('0x1d')]['count'](_0x528c3a)[_0x03ae('0x12')](function(_0x394e58){_0x9c832b[_0x03ae('0xd')]=_0x394e58;if(_0x560dbd[_0x03ae('0x22')][_0x03ae('0x31')]){_0x126ba7[_0x03ae('0x32')]=[{'all':!![]}];}return db[_0x03ae('0x1d')][_0x03ae('0x33')](_0x126ba7);})[_0x03ae('0x12')](function(_0x6f4c34){_0x9c832b[_0x03ae('0x34')]=_[_0x03ae('0x1c')](_0x6f4c34,function(_0x1c5bb8){if(_0x1c5bb8[_0x03ae('0x35')]===_0x03ae('0x36')){var _0x4b85fc=encryptor[_0x03ae('0x37')](_0x1c5bb8[_0x03ae('0x38')]);_0x1c5bb8[_0x03ae('0x38')]=maskClientSecret(_0x4b85fc);}return _0x1c5bb8;});return _0x9c832b;})[_0x03ae('0x12')](respondWithFilteredResult(_0x78e833,_0x126ba7))[_0x03ae('0x39')](handleError(_0x78e833,null));};exports['show']=function(_0x52db40,_0x29c6be){var _0x5d07da={'raw':!![],'where':{'id':_0x52db40[_0x03ae('0x3a')]['id']}},_0x184d38={};_0x184d38['model']=_[_0x03ae('0x23')](db[_0x03ae('0x1d')][_0x03ae('0x1e')]);_0x184d38['query']=_[_0x03ae('0x23')](_0x52db40[_0x03ae('0x22')]);_0x184d38[_0x03ae('0x24')]=_['intersection'](_0x184d38['model'],_0x184d38[_0x03ae('0x22')]);_0x5d07da[_0x03ae('0x26')]=_[_0x03ae('0x25')](_0x184d38['model'],qs[_0x03ae('0x27')](_0x52db40[_0x03ae('0x22')][_0x03ae('0x27')]));_0x5d07da[_0x03ae('0x26')]=_0x5d07da[_0x03ae('0x26')][_0x03ae('0x3b')]?_0x5d07da['attributes']:_0x184d38['model'];if(_0x52db40[_0x03ae('0x22')][_0x03ae('0x31')]){_0x5d07da['include']=[{'all':!![]}];}_0x5d07da=_[_0x03ae('0x2d')]({},_0x5d07da,_0x52db40[_0x03ae('0x30')]);return db['CloudProvider']['find'](_0x5d07da)[_0x03ae('0x12')](handleEntityNotFound(_0x29c6be,null))[_0x03ae('0x12')](function(_0x15787b){if(_0x15787b[_0x03ae('0x35')]===_0x03ae('0x36')){var _0x3e65dc=encryptor[_0x03ae('0x37')](_0x15787b[_0x03ae('0x38')]);_0x15787b[_0x03ae('0x38')]=maskClientSecret(_0x3e65dc);}return _0x15787b;})[_0x03ae('0x12')](respondWithResult(_0x29c6be,null))[_0x03ae('0x39')](handleError(_0x29c6be,null));};exports[_0x03ae('0x3c')]=function(_0x2a72ef,_0x388220){if(!_0x2a72ef['body']['name'])throw new Error(_0x03ae('0x3d'));if(!_0x2a72ef[_0x03ae('0x3e')][_0x03ae('0x35')])throw new Error(_0x03ae('0x3f'));var _0x594031=db['CloudProvider'][_0x03ae('0x1e')]['service'][_0x03ae('0x40')];if(!_0x594031['includes'](_0x2a72ef[_0x03ae('0x3e')][_0x03ae('0x35')]))throw new Error('Invalid\x20service\x20parameter.\x20Allowed\x20values:\x20'+_0x594031['join'](',\x20'));if(_0x2a72ef[_0x03ae('0x3e')][_0x03ae('0x35')]==='MicrosoftAzure'&&_0x2a72ef['body'][_0x03ae('0x38')]){_0x2a72ef['body'][_0x03ae('0x38')]=encryptor['encryptString'](_0x2a72ef[_0x03ae('0x3e')][_0x03ae('0x38')]);}return db[_0x03ae('0x1d')][_0x03ae('0x3c')](_0x2a72ef['body'],{})['then'](respondWithResult(_0x388220,0xc9))[_0x03ae('0x39')](handleError(_0x388220,null));};exports[_0x03ae('0x11')]=function(_0x5cc266,_0x55463c){if(_0x5cc266[_0x03ae('0x3e')]['id']){delete _0x5cc266[_0x03ae('0x3e')]['id'];}return db[_0x03ae('0x1d')][_0x03ae('0x41')]({'where':{'id':_0x5cc266[_0x03ae('0x3a')]['id']}})['then'](handleEntityNotFound(_0x55463c,null))[_0x03ae('0x12')](function(_0xbca63d){if(_0xbca63d[_0x03ae('0x35')]===_0x03ae('0x36')&&_0x5cc266[_0x03ae('0x3e')]['data3']){_0x5cc266['body'][_0x03ae('0x38')]=encryptor[_0x03ae('0x42')](_0x5cc266[_0x03ae('0x3e')][_0x03ae('0x38')]);}return _0xbca63d;})[_0x03ae('0x12')](saveUpdates(_0x5cc266['body'],null))['then'](respondWithResult(_0x55463c,null))[_0x03ae('0x39')](handleError(_0x55463c,null));};exports[_0x03ae('0x13')]=function(_0x3d5eb7,_0x5e987f){return db[_0x03ae('0x1d')]['find']({'where':{'id':_0x3d5eb7[_0x03ae('0x3a')]['id']}})['then'](handleEntityNotFound(_0x5e987f,null))['then'](removeEntity(_0x5e987f,null))[_0x03ae('0x39')](handleError(_0x5e987f,null));};exports[_0x03ae('0x43')]=function(_0x35ae87,_0x34151f){return db[_0x03ae('0x1d')][_0x03ae('0x44')]({'where':{'id':_0x35ae87[_0x03ae('0x3a')]['id']},'raw':!![]})[_0x03ae('0x12')](function(_0x51f4c0){if(!_0x51f4c0)return _0x34151f[_0x03ae('0x15')](0x194);return{'url':oauth['generateMicrosoftAuthorizationUrl'](_0x51f4c0,_0x35ae87[_0x03ae('0x45')]['id'])};})['then'](respondWithResult(_0x34151f,null))[_0x03ae('0x39')](handleError(_0x34151f,null));};exports[_0x03ae('0x46')]=function(_0x1b2139,_0x564a1c){var _0x4cadb9=_0x1b2139[_0x03ae('0x3e')];var _0x32188d;var _0x1ea4b8;if(_0x4cadb9[_0x03ae('0x16')])throw _0x4cadb9;redis[_0x03ae('0x47')](_0x4cadb9['state'])['then'](function(_0x38ffbb){if(!_0x38ffbb)throw new Error('Invalid\x20state\x20parameter');_0x32188d=JSON[_0x03ae('0x48')](_0x38ffbb);var _0x467f4a=Buffer[_0x03ae('0x49')](_0x4cadb9[_0x03ae('0x4a')],_0x03ae('0x4b'))[_0x03ae('0x4c')](_0x03ae('0x4d'));_0x1ea4b8=JSON['parse'](_0x467f4a);if(!oauth[_0x03ae('0x4e')](_0x4cadb9['id_token'],_0x32188d[_0x03ae('0x4f')]))throw new Error(_0x03ae('0x50'));redis[_0x03ae('0x51')](_0x4cadb9['state']);return oauth[_0x03ae('0x52')](_0x4cadb9[_0x03ae('0x53')],_0x32188d);})['then'](function(_0x49b5e5){_0x32188d[_0x03ae('0x54')]=_0x49b5e5['access_token'];_0x32188d[_0x03ae('0x55')]=_0x49b5e5[_0x03ae('0x56')];return db[_0x03ae('0x1d')][_0x03ae('0x11')]({'data5':_0x32188d[_0x03ae('0x54')],'data6':_0x32188d[_0x03ae('0x55')]},{'where':{'id':_0x32188d['id']}});})['then'](function(){oauth[_0x03ae('0x57')](_0x32188d);socket[_0x03ae('0x58')](_0x03ae('0x59'),{'id':_0x1ea4b8['id']});return;})[_0x03ae('0x12')](respondWithStatusCode(_0x564a1c,null))['catch'](function(_0x14f1cf){if(_0x1ea4b8){socket['emit'](_0x03ae('0x5a'),{'id':_0x1ea4b8['id']});}if(!_0x32188d){logger[_0x03ae('0x16')](_0x03ae('0x5b'),_0x14f1cf);return _0x564a1c['status'](0x1f4)[_0x03ae('0x18')](_0x14f1cf[_0x03ae('0x5c')]);}logger[_0x03ae('0x16')]('Authentication\x20failed\x20for\x20cloud\x20provider\x20#%s,\x20err:%s',_0x32188d['id'],JSON[_0x03ae('0x5d')](_0x14f1cf));});};