Built motion from commit 7158bc59.|2.5.42
[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 _0xd552=['Unable\x20to\x20validate\x20id_token','del','code','data5','data6','startRefreshInterval','emit','microsoftAuthorization:success','microsoftAuthorization:error','Invalid\x20authentication\x20state\x20parameter','message','lodash','../../components/encryptor','../../config/logger','api','../../mysqldb','redis','localhost','socket.io-emitter','sendStatus','status','end','json','undefined','limit','count','offset','set','Content-Range','update','then','destroy','error','stack','padEnd','slice','map','type','key','keys','query','filters','intersection','model','attributes','fields','length','order','sort','where','filter','merge','VIRTUAL','name','include','CloudProvider','findAll','service','decryptString','data3','catch','rawAttributes','includeAll','options','find','MicrosoftAzure','body','Service\x20parameter\x20not\x20specified','values','includes','join','encryptString','create','params','oauth2MicrosoftAuthorize','findOne','generateMicrosoftAuthorizationUrl','user','state','Invalid\x20state\x20parameter','parse','from','toString','ascii','isValidIdToken'];(function(_0x1d50f2,_0x3c3ec6){var _0x3769b8=function(_0x50926a){while(--_0x50926a){_0x1d50f2['push'](_0x1d50f2['shift']());}};_0x3769b8(++_0x3c3ec6);}(_0xd552,0x1b4));var _0x2d55=function(_0x480c29,_0x2051db){_0x480c29=_0x480c29-0x0;var _0x1c5321=_0xd552[_0x480c29];return _0x1c5321;};'use strict';var _=require(_0x2d55('0x0'));var Redis=require('ioredis');var qs=require('../../components/parsers/qs');var encryptor=require(_0x2d55('0x1'));var config=require('../../config/environment');var logger=require(_0x2d55('0x2'))(_0x2d55('0x3'));var db=require(_0x2d55('0x4'))['db'];var oauth=require('./cloudProvider.oauth');config['redis']=_['defaults'](config[_0x2d55('0x5')],{'host':_0x2d55('0x6'),'port':0x18eb});var socket=require(_0x2d55('0x7'))(new Redis(config['redis']));var redis=new Redis(config[_0x2d55('0x5')]);function respondWithStatusCode(_0x3f5d35,_0x10cb36){_0x10cb36=_0x10cb36||0xcc;return function(_0x2c895f){if(_0x2c895f){return _0x3f5d35[_0x2d55('0x8')](_0x10cb36);}return _0x3f5d35[_0x2d55('0x9')](_0x10cb36)[_0x2d55('0xa')]();};}function respondWithResult(_0x28646f,_0x3fa4bd){_0x3fa4bd=_0x3fa4bd||0xc8;return function(_0x166416){if(_0x166416){return _0x28646f[_0x2d55('0x9')](_0x3fa4bd)[_0x2d55('0xb')](_0x166416);}};}function respondWithFilteredResult(_0x82e8d4,_0x381dd8){return function(_0x1df21a){if(_0x1df21a){var _0x2badd7=typeof _0x381dd8['offset']===_0x2d55('0xc')&&typeof _0x381dd8[_0x2d55('0xd')]==='undefined';var _0x4b7f00=_0x1df21a[_0x2d55('0xe')];var _0xee9d96=_0x2badd7?0x0:_0x381dd8[_0x2d55('0xf')];var _0x28aa8c=_0x2badd7?_0x1df21a[_0x2d55('0xe')]:_0x381dd8[_0x2d55('0xf')]+_0x381dd8[_0x2d55('0xd')];var _0x328f91;if(_0x28aa8c>=_0x4b7f00){_0x28aa8c=_0x4b7f00;_0x328f91=0xc8;}else{_0x328f91=0xce;}_0x82e8d4[_0x2d55('0x9')](_0x328f91);return _0x82e8d4[_0x2d55('0x10')](_0x2d55('0x11'),_0xee9d96+'-'+_0x28aa8c+'/'+_0x4b7f00)[_0x2d55('0xb')](_0x1df21a);}return null;};}function saveUpdates(_0x22c315){return function(_0x466bd4){if(_0x466bd4){return _0x466bd4[_0x2d55('0x12')](_0x22c315)[_0x2d55('0x13')](function(_0x169a00){return _0x169a00;});}return null;};}function removeEntity(_0x138d18){return function(_0x518754){if(_0x518754){return _0x518754[_0x2d55('0x14')]()['then'](function(){_0x138d18[_0x2d55('0x9')](0xcc)[_0x2d55('0xa')]();});}};}function handleEntityNotFound(_0x3de4e6){return function(_0x362cae){if(!_0x362cae){_0x3de4e6[_0x2d55('0x8')](0x194);}return _0x362cae;};}function handleError(_0x18e16e,_0x4e4b55){_0x4e4b55=_0x4e4b55||0x1f4;return function(_0xa62cbe){logger[_0x2d55('0x15')](_0xa62cbe[_0x2d55('0x16')]);if(_0xa62cbe['name']){delete _0xa62cbe['name'];}_0x18e16e[_0x2d55('0x9')](_0x4e4b55)['send'](_0xa62cbe);};}function maskClientSecret(_0x25ec31){return _[_0x2d55('0x17')](_0x25ec31[_0x2d55('0x18')](0x0,0x3),0x14,'*');}exports['index']=function(_0x3ff3a8,_0x2e1299){var _0x4bc042={},_0x41d4fb={},_0x18f8fa={'count':0x0,'rows':[]};var _0x12f047=_[_0x2d55('0x19')](db['CloudProvider']['rawAttributes'],function(_0x4e608f){return{'name':_0x4e608f['fieldName'],'type':_0x4e608f[_0x2d55('0x1a')][_0x2d55('0x1b')]};});_0x41d4fb['model']=_['map'](_0x12f047,'name');_0x41d4fb['query']=_[_0x2d55('0x1c')](_0x3ff3a8[_0x2d55('0x1d')]);_0x41d4fb[_0x2d55('0x1e')]=_[_0x2d55('0x1f')](_0x41d4fb[_0x2d55('0x20')],_0x41d4fb[_0x2d55('0x1d')]);_0x4bc042[_0x2d55('0x21')]=_[_0x2d55('0x1f')](_0x41d4fb[_0x2d55('0x20')],qs['fields'](_0x3ff3a8[_0x2d55('0x1d')][_0x2d55('0x22')]));_0x4bc042[_0x2d55('0x21')]=_0x4bc042[_0x2d55('0x21')][_0x2d55('0x23')]?_0x4bc042[_0x2d55('0x21')]:_0x41d4fb[_0x2d55('0x20')];if(!_0x3ff3a8[_0x2d55('0x1d')]['hasOwnProperty']('nolimit')){_0x4bc042[_0x2d55('0xd')]=qs[_0x2d55('0xd')](_0x3ff3a8['query'][_0x2d55('0xd')]);_0x4bc042[_0x2d55('0xf')]=qs[_0x2d55('0xf')](_0x3ff3a8[_0x2d55('0x1d')][_0x2d55('0xf')]);}_0x4bc042[_0x2d55('0x24')]=qs[_0x2d55('0x25')](_0x3ff3a8[_0x2d55('0x1d')][_0x2d55('0x25')]);_0x4bc042[_0x2d55('0x26')]=qs[_0x2d55('0x1e')](_['pick'](_0x3ff3a8['query'],_0x41d4fb[_0x2d55('0x1e')]),_0x12f047);if(_0x3ff3a8[_0x2d55('0x1d')][_0x2d55('0x27')]){_0x4bc042[_0x2d55('0x26')]=_[_0x2d55('0x28')](_0x4bc042[_0x2d55('0x26')],{'$or':_[_0x2d55('0x19')](_0x12f047,function(_0x24756d){if(_0x24756d[_0x2d55('0x1a')]!==_0x2d55('0x29')){var _0x2d1553={};_0x2d1553[_0x24756d[_0x2d55('0x2a')]]={'$like':'%'+_0x3ff3a8[_0x2d55('0x1d')][_0x2d55('0x27')]+'%'};return _0x2d1553;}})});}_0x4bc042=_[_0x2d55('0x28')]({},_0x4bc042,_0x3ff3a8['options']);var _0xa0552={'where':_0x4bc042[_0x2d55('0x26')]};return db['CloudProvider'][_0x2d55('0xe')](_0xa0552)['then'](function(_0x543f8d){_0x18f8fa[_0x2d55('0xe')]=_0x543f8d;if(_0x3ff3a8[_0x2d55('0x1d')]['includeAll']){_0x4bc042[_0x2d55('0x2b')]=[{'all':!![]}];}return db[_0x2d55('0x2c')][_0x2d55('0x2d')](_0x4bc042);})[_0x2d55('0x13')](function(_0x5bbaf9){_0x18f8fa['rows']=_[_0x2d55('0x19')](_0x5bbaf9,function(_0x4a0023){if(_0x4a0023[_0x2d55('0x2e')]==='MicrosoftAzure'){var _0x598a83=encryptor[_0x2d55('0x2f')](_0x4a0023[_0x2d55('0x30')]);_0x4a0023[_0x2d55('0x30')]=maskClientSecret(_0x598a83);}return _0x4a0023;});return _0x18f8fa;})[_0x2d55('0x13')](respondWithFilteredResult(_0x2e1299,_0x4bc042))[_0x2d55('0x31')](handleError(_0x2e1299,null));};exports['show']=function(_0x5a9202,_0x29ddb4){var _0x6c9c95={'raw':!![],'where':{'id':_0x5a9202['params']['id']}},_0x1151a2={};_0x1151a2['model']=_[_0x2d55('0x1c')](db[_0x2d55('0x2c')][_0x2d55('0x32')]);_0x1151a2[_0x2d55('0x1d')]=_[_0x2d55('0x1c')](_0x5a9202['query']);_0x1151a2[_0x2d55('0x1e')]=_['intersection'](_0x1151a2[_0x2d55('0x20')],_0x1151a2[_0x2d55('0x1d')]);_0x6c9c95[_0x2d55('0x21')]=_[_0x2d55('0x1f')](_0x1151a2['model'],qs[_0x2d55('0x22')](_0x5a9202['query'][_0x2d55('0x22')]));_0x6c9c95[_0x2d55('0x21')]=_0x6c9c95[_0x2d55('0x21')][_0x2d55('0x23')]?_0x6c9c95[_0x2d55('0x21')]:_0x1151a2[_0x2d55('0x20')];if(_0x5a9202[_0x2d55('0x1d')][_0x2d55('0x33')]){_0x6c9c95['include']=[{'all':!![]}];}_0x6c9c95=_['merge']({},_0x6c9c95,_0x5a9202[_0x2d55('0x34')]);return db[_0x2d55('0x2c')][_0x2d55('0x35')](_0x6c9c95)[_0x2d55('0x13')](handleEntityNotFound(_0x29ddb4,null))[_0x2d55('0x13')](function(_0x27aeb7){if(_0x27aeb7[_0x2d55('0x2e')]===_0x2d55('0x36')){var _0x1005a4=encryptor['decryptString'](_0x27aeb7[_0x2d55('0x30')]);_0x27aeb7[_0x2d55('0x30')]=maskClientSecret(_0x1005a4);}return _0x27aeb7;})[_0x2d55('0x13')](respondWithResult(_0x29ddb4,null))[_0x2d55('0x31')](handleError(_0x29ddb4,null));};exports['create']=function(_0x5b43bb,_0x29ce21){if(!_0x5b43bb[_0x2d55('0x37')][_0x2d55('0x2a')])throw new Error('Name\x20parameter\x20not\x20specified');if(!_0x5b43bb['body'][_0x2d55('0x2e')])throw new Error(_0x2d55('0x38'));var _0x43ef5e=db[_0x2d55('0x2c')][_0x2d55('0x32')][_0x2d55('0x2e')][_0x2d55('0x39')];if(!_0x43ef5e[_0x2d55('0x3a')](_0x5b43bb[_0x2d55('0x37')][_0x2d55('0x2e')]))throw new Error('Invalid\x20service\x20parameter.\x20Allowed\x20values:\x20'+_0x43ef5e[_0x2d55('0x3b')](',\x20'));if(_0x5b43bb[_0x2d55('0x37')]['service']===_0x2d55('0x36')&&_0x5b43bb[_0x2d55('0x37')][_0x2d55('0x30')]){_0x5b43bb[_0x2d55('0x37')][_0x2d55('0x30')]=encryptor[_0x2d55('0x3c')](_0x5b43bb[_0x2d55('0x37')][_0x2d55('0x30')]);}return db[_0x2d55('0x2c')][_0x2d55('0x3d')](_0x5b43bb[_0x2d55('0x37')],{})[_0x2d55('0x13')](respondWithResult(_0x29ce21,0xc9))[_0x2d55('0x31')](handleError(_0x29ce21,null));};exports[_0x2d55('0x12')]=function(_0x3162f3,_0xc481bf){if(_0x3162f3[_0x2d55('0x37')]['id']){delete _0x3162f3[_0x2d55('0x37')]['id'];}return db[_0x2d55('0x2c')]['find']({'where':{'id':_0x3162f3['params']['id']}})[_0x2d55('0x13')](handleEntityNotFound(_0xc481bf,null))[_0x2d55('0x13')](function(_0x331a1b){if(_0x331a1b[_0x2d55('0x2e')]==='MicrosoftAzure'&&_0x3162f3[_0x2d55('0x37')][_0x2d55('0x30')]){_0x3162f3[_0x2d55('0x37')][_0x2d55('0x30')]=encryptor[_0x2d55('0x3c')](_0x3162f3[_0x2d55('0x37')][_0x2d55('0x30')]);}return _0x331a1b;})[_0x2d55('0x13')](saveUpdates(_0x3162f3['body'],null))[_0x2d55('0x13')](respondWithResult(_0xc481bf,null))[_0x2d55('0x31')](handleError(_0xc481bf,null));};exports['destroy']=function(_0x1b1bbf,_0xe8229){return db['CloudProvider'][_0x2d55('0x35')]({'where':{'id':_0x1b1bbf[_0x2d55('0x3e')]['id']}})[_0x2d55('0x13')](handleEntityNotFound(_0xe8229,null))[_0x2d55('0x13')](removeEntity(_0xe8229,null))[_0x2d55('0x31')](handleError(_0xe8229,null));};exports[_0x2d55('0x3f')]=function(_0x2363b9,_0x1d5d54){return db[_0x2d55('0x2c')][_0x2d55('0x40')]({'where':{'id':_0x2363b9[_0x2d55('0x3e')]['id']},'raw':!![]})[_0x2d55('0x13')](function(_0x4b40b8){if(!_0x4b40b8)return _0x1d5d54['sendStatus'](0x194);return{'url':oauth[_0x2d55('0x41')](_0x4b40b8,_0x2363b9[_0x2d55('0x42')]['id'])};})[_0x2d55('0x13')](respondWithResult(_0x1d5d54,null))[_0x2d55('0x31')](handleError(_0x1d5d54,null));};exports['oauth2MicrosoftCallback']=function(_0x5514a5,_0x2b831d){var _0x5daff6=_0x5514a5[_0x2d55('0x37')];var _0x2b7050;var _0x3e0fcf;if(_0x5daff6['error'])throw _0x5daff6;redis['get'](_0x5daff6[_0x2d55('0x43')])[_0x2d55('0x13')](function(_0x432ceb){if(!_0x432ceb)throw new Error(_0x2d55('0x44'));_0x2b7050=JSON[_0x2d55('0x45')](_0x432ceb);var _0x3bf58b=Buffer[_0x2d55('0x46')](_0x5daff6[_0x2d55('0x43')],'base64')[_0x2d55('0x47')](_0x2d55('0x48'));_0x3e0fcf=JSON[_0x2d55('0x45')](_0x3bf58b);if(!oauth[_0x2d55('0x49')](_0x5daff6['id_token'],_0x2b7050['oauth2Claims']))throw new Error(_0x2d55('0x4a'));redis[_0x2d55('0x4b')](_0x5daff6['state']);return oauth['getOauth2MicrosoftAccessToken'](_0x5daff6[_0x2d55('0x4c')],_0x2b7050);})[_0x2d55('0x13')](function(_0x4449ee){_0x2b7050[_0x2d55('0x4d')]=_0x4449ee['access_token'];_0x2b7050[_0x2d55('0x4e')]=_0x4449ee['refresh_token'];return db[_0x2d55('0x2c')][_0x2d55('0x12')]({'data5':_0x2b7050[_0x2d55('0x4d')],'data6':_0x2b7050[_0x2d55('0x4e')]},{'where':{'id':_0x2b7050['id']}});})['then'](function(){oauth[_0x2d55('0x4f')](_0x2b7050);socket[_0x2d55('0x50')](_0x2d55('0x51'),{'id':_0x3e0fcf['id']});return;})['then'](respondWithStatusCode(_0x2b831d,null))[_0x2d55('0x31')](function(_0x2e206c){if(_0x3e0fcf){socket[_0x2d55('0x50')](_0x2d55('0x52'),{'id':_0x3e0fcf['id']});}if(!_0x2b7050){logger['error'](_0x2d55('0x53'),_0x2e206c);return _0x2b831d[_0x2d55('0x9')](0x1f4)['send'](_0x2e206c[_0x2d55('0x54')]);}logger['error']('Authentication\x20failed\x20for\x20cloud\x20provider\x20#%s',_0x2b7050['id'],_0x2e206c);});};