695d595cf8e948eb0ce21c266b71f6dc2773c216
[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 _0xf26c=['catch','params','rawAttributes','keys','MicrosoftAzure','decryptString','body','values','includes','Invalid\x20service\x20parameter.\x20Allowed\x20values:\x20','encryptString','create','update','find','destroy','oauth2MicrosoftAuthorize','oauth2MicrosoftCallback','get','state','parse','from','base64','toString','ascii','isValidIdToken','oauth2Claims','Unable\x20to\x20validate\x20id_token','del','getOauth2MicrosoftAccessToken','code','data5','access_token','data6','refresh_token','startRefreshInterval','emit','microsoftAuthorization:success','microsoftAuthorization:error','send','stringify','../../components/parsers/qs','../../config/environment','../../config/logger','../../mysqldb','redis','localhost','sendStatus','status','end','json','offset','undefined','count','set','then','error','stack','name','padEnd','map','CloudProvider','fieldName','type','key','model','query','filters','intersection','attributes','fields','length','hasOwnProperty','limit','order','sort','where','pick','filter','merge','VIRTUAL','options','includeAll','include','findAll','rows','service','data3'];(function(_0x470212,_0x1387de){var _0x5083cb=function(_0x3bec27){while(--_0x3bec27){_0x470212['push'](_0x470212['shift']());}};_0x5083cb(++_0x1387de);}(_0xf26c,0x12d));var _0xcf26=function(_0x2fc791,_0x312b37){_0x2fc791=_0x2fc791-0x0;var _0x373ce0=_0xf26c[_0x2fc791];return _0x373ce0;};'use strict';var _=require('lodash');var Redis=require('ioredis');var qs=require(_0xcf26('0x0'));var encryptor=require('../../components/encryptor');var config=require(_0xcf26('0x1'));var logger=require(_0xcf26('0x2'))('api');var db=require(_0xcf26('0x3'))['db'];var oauth=require('./cloudProvider.oauth');config[_0xcf26('0x4')]=_['defaults'](config[_0xcf26('0x4')],{'host':_0xcf26('0x5'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));var redis=new Redis(config[_0xcf26('0x4')]);function respondWithStatusCode(_0x1f17d5,_0x4d644e){_0x4d644e=_0x4d644e||0xcc;return function(_0x4a8805){if(_0x4a8805){return _0x1f17d5[_0xcf26('0x6')](_0x4d644e);}return _0x1f17d5[_0xcf26('0x7')](_0x4d644e)[_0xcf26('0x8')]();};}function respondWithResult(_0x4baae5,_0x2e7059){_0x2e7059=_0x2e7059||0xc8;return function(_0x144bdb){if(_0x144bdb){return _0x4baae5[_0xcf26('0x7')](_0x2e7059)[_0xcf26('0x9')](_0x144bdb);}};}function respondWithFilteredResult(_0x1d3a73,_0x4e105c){return function(_0x6bc835){if(_0x6bc835){var _0x5242d2=typeof _0x4e105c[_0xcf26('0xa')]===_0xcf26('0xb')&&typeof _0x4e105c['limit']===_0xcf26('0xb');var _0x3ad36d=_0x6bc835[_0xcf26('0xc')];var _0x103a22=_0x5242d2?0x0:_0x4e105c[_0xcf26('0xa')];var _0x17fecb=_0x5242d2?_0x6bc835['count']:_0x4e105c[_0xcf26('0xa')]+_0x4e105c['limit'];var _0x4ca072;if(_0x17fecb>=_0x3ad36d){_0x17fecb=_0x3ad36d;_0x4ca072=0xc8;}else{_0x4ca072=0xce;}_0x1d3a73[_0xcf26('0x7')](_0x4ca072);return _0x1d3a73[_0xcf26('0xd')]('Content-Range',_0x103a22+'-'+_0x17fecb+'/'+_0x3ad36d)['json'](_0x6bc835);}return null;};}function saveUpdates(_0x459773){return function(_0xef2f9c){if(_0xef2f9c){return _0xef2f9c['update'](_0x459773)[_0xcf26('0xe')](function(_0x213e91){return _0x213e91;});}return null;};}function removeEntity(_0x39f9b0){return function(_0x18b325){if(_0x18b325){return _0x18b325['destroy']()['then'](function(){_0x39f9b0[_0xcf26('0x7')](0xcc)['end']();});}};}function handleEntityNotFound(_0x19f4e5){return function(_0x464464){if(!_0x464464){_0x19f4e5[_0xcf26('0x6')](0x194);}return _0x464464;};}function handleError(_0x295e85,_0x4bde49){_0x4bde49=_0x4bde49||0x1f4;return function(_0x1cee5c){logger[_0xcf26('0xf')](_0x1cee5c[_0xcf26('0x10')]);if(_0x1cee5c[_0xcf26('0x11')]){delete _0x1cee5c[_0xcf26('0x11')];}_0x295e85[_0xcf26('0x7')](_0x4bde49)['send'](_0x1cee5c);};}function maskClientSecret(_0x489327){return _[_0xcf26('0x12')](_0x489327['slice'](0x0,0x3),0x14,'*');}exports['index']=function(_0x41d0fd,_0x252846){var _0x59be70={},_0x2c3c06={},_0x5026c7={'count':0x0,'rows':[]};var _0x34fafe=_[_0xcf26('0x13')](db[_0xcf26('0x14')]['rawAttributes'],function(_0x6c25e1){return{'name':_0x6c25e1[_0xcf26('0x15')],'type':_0x6c25e1[_0xcf26('0x16')][_0xcf26('0x17')]};});_0x2c3c06[_0xcf26('0x18')]=_[_0xcf26('0x13')](_0x34fafe,_0xcf26('0x11'));_0x2c3c06[_0xcf26('0x19')]=_['keys'](_0x41d0fd[_0xcf26('0x19')]);_0x2c3c06[_0xcf26('0x1a')]=_[_0xcf26('0x1b')](_0x2c3c06[_0xcf26('0x18')],_0x2c3c06[_0xcf26('0x19')]);_0x59be70[_0xcf26('0x1c')]=_[_0xcf26('0x1b')](_0x2c3c06[_0xcf26('0x18')],qs[_0xcf26('0x1d')](_0x41d0fd['query'][_0xcf26('0x1d')]));_0x59be70['attributes']=_0x59be70[_0xcf26('0x1c')][_0xcf26('0x1e')]?_0x59be70['attributes']:_0x2c3c06['model'];if(!_0x41d0fd[_0xcf26('0x19')][_0xcf26('0x1f')]('nolimit')){_0x59be70[_0xcf26('0x20')]=qs[_0xcf26('0x20')](_0x41d0fd[_0xcf26('0x19')]['limit']);_0x59be70['offset']=qs[_0xcf26('0xa')](_0x41d0fd[_0xcf26('0x19')]['offset']);}_0x59be70[_0xcf26('0x21')]=qs[_0xcf26('0x22')](_0x41d0fd[_0xcf26('0x19')][_0xcf26('0x22')]);_0x59be70[_0xcf26('0x23')]=qs[_0xcf26('0x1a')](_[_0xcf26('0x24')](_0x41d0fd['query'],_0x2c3c06[_0xcf26('0x1a')]),_0x34fafe);if(_0x41d0fd[_0xcf26('0x19')][_0xcf26('0x25')]){_0x59be70[_0xcf26('0x23')]=_[_0xcf26('0x26')](_0x59be70[_0xcf26('0x23')],{'$or':_[_0xcf26('0x13')](_0x34fafe,function(_0x12a319){if(_0x12a319['type']!==_0xcf26('0x27')){var _0x20aaf6={};_0x20aaf6[_0x12a319['name']]={'$like':'%'+_0x41d0fd[_0xcf26('0x19')][_0xcf26('0x25')]+'%'};return _0x20aaf6;}})});}_0x59be70=_[_0xcf26('0x26')]({},_0x59be70,_0x41d0fd[_0xcf26('0x28')]);var _0x3f0f09={'where':_0x59be70[_0xcf26('0x23')]};return db[_0xcf26('0x14')][_0xcf26('0xc')](_0x3f0f09)['then'](function(_0x170041){_0x5026c7['count']=_0x170041;if(_0x41d0fd['query'][_0xcf26('0x29')]){_0x59be70[_0xcf26('0x2a')]=[{'all':!![]}];}return db[_0xcf26('0x14')][_0xcf26('0x2b')](_0x59be70);})[_0xcf26('0xe')](function(_0x15cce){_0x5026c7[_0xcf26('0x2c')]=_[_0xcf26('0x13')](_0x15cce,function(_0x5e137a){if(_0x5e137a[_0xcf26('0x2d')]==='MicrosoftAzure'){var _0x30c35f=encryptor['decryptString'](_0x5e137a[_0xcf26('0x2e')]);_0x5e137a[_0xcf26('0x2e')]=maskClientSecret(_0x30c35f);}return _0x5e137a;});return _0x5026c7;})[_0xcf26('0xe')](respondWithFilteredResult(_0x252846,_0x59be70))[_0xcf26('0x2f')](handleError(_0x252846,null));};exports['show']=function(_0x5d879d,_0x56f0bb){var _0x2e2f3d={'raw':!![],'where':{'id':_0x5d879d[_0xcf26('0x30')]['id']}},_0x2d9826={};_0x2d9826[_0xcf26('0x18')]=_['keys'](db[_0xcf26('0x14')][_0xcf26('0x31')]);_0x2d9826[_0xcf26('0x19')]=_[_0xcf26('0x32')](_0x5d879d[_0xcf26('0x19')]);_0x2d9826[_0xcf26('0x1a')]=_[_0xcf26('0x1b')](_0x2d9826[_0xcf26('0x18')],_0x2d9826[_0xcf26('0x19')]);_0x2e2f3d[_0xcf26('0x1c')]=_[_0xcf26('0x1b')](_0x2d9826['model'],qs[_0xcf26('0x1d')](_0x5d879d['query'][_0xcf26('0x1d')]));_0x2e2f3d['attributes']=_0x2e2f3d[_0xcf26('0x1c')][_0xcf26('0x1e')]?_0x2e2f3d[_0xcf26('0x1c')]:_0x2d9826[_0xcf26('0x18')];if(_0x5d879d['query'][_0xcf26('0x29')]){_0x2e2f3d[_0xcf26('0x2a')]=[{'all':!![]}];}_0x2e2f3d=_[_0xcf26('0x26')]({},_0x2e2f3d,_0x5d879d[_0xcf26('0x28')]);return db[_0xcf26('0x14')]['find'](_0x2e2f3d)[_0xcf26('0xe')](handleEntityNotFound(_0x56f0bb,null))[_0xcf26('0xe')](function(_0x686d2){if(_0x686d2['service']===_0xcf26('0x33')){var _0x2c31ae=encryptor[_0xcf26('0x34')](_0x686d2['data3']);_0x686d2[_0xcf26('0x2e')]=maskClientSecret(_0x2c31ae);}return _0x686d2;})['then'](respondWithResult(_0x56f0bb,null))[_0xcf26('0x2f')](handleError(_0x56f0bb,null));};exports['create']=function(_0x5fa62f,_0x56c10f){if(!_0x5fa62f[_0xcf26('0x35')][_0xcf26('0x11')])throw new Error('Name\x20parameter\x20not\x20specified');if(!_0x5fa62f['body'][_0xcf26('0x2d')])throw new Error('Service\x20parameter\x20not\x20specified');var _0x426862=db[_0xcf26('0x14')][_0xcf26('0x31')][_0xcf26('0x2d')][_0xcf26('0x36')];if(!_0x426862[_0xcf26('0x37')](_0x5fa62f[_0xcf26('0x35')][_0xcf26('0x2d')]))throw new Error(_0xcf26('0x38')+_0x426862['join'](',\x20'));if(_0x5fa62f['body'][_0xcf26('0x2d')]===_0xcf26('0x33')&&_0x5fa62f['body']['data3']){_0x5fa62f[_0xcf26('0x35')][_0xcf26('0x2e')]=encryptor[_0xcf26('0x39')](_0x5fa62f['body']['data3']);}return db[_0xcf26('0x14')][_0xcf26('0x3a')](_0x5fa62f[_0xcf26('0x35')],{})[_0xcf26('0xe')](respondWithResult(_0x56c10f,0xc9))[_0xcf26('0x2f')](handleError(_0x56c10f,null));};exports[_0xcf26('0x3b')]=function(_0xc8a974,_0x24df7a){if(_0xc8a974[_0xcf26('0x35')]['id']){delete _0xc8a974['body']['id'];}return db[_0xcf26('0x14')][_0xcf26('0x3c')]({'where':{'id':_0xc8a974[_0xcf26('0x30')]['id']}})[_0xcf26('0xe')](handleEntityNotFound(_0x24df7a,null))[_0xcf26('0xe')](function(_0x244bb4){if(_0x244bb4['service']===_0xcf26('0x33')&&_0xc8a974[_0xcf26('0x35')][_0xcf26('0x2e')]){_0xc8a974['body'][_0xcf26('0x2e')]=encryptor['encryptString'](_0xc8a974['body'][_0xcf26('0x2e')]);}return _0x244bb4;})[_0xcf26('0xe')](saveUpdates(_0xc8a974[_0xcf26('0x35')],null))['then'](respondWithResult(_0x24df7a,null))[_0xcf26('0x2f')](handleError(_0x24df7a,null));};exports[_0xcf26('0x3d')]=function(_0x2b6bba,_0x4b8a21){return db['CloudProvider'][_0xcf26('0x3c')]({'where':{'id':_0x2b6bba[_0xcf26('0x30')]['id']}})[_0xcf26('0xe')](handleEntityNotFound(_0x4b8a21,null))[_0xcf26('0xe')](removeEntity(_0x4b8a21,null))['catch'](handleError(_0x4b8a21,null));};exports[_0xcf26('0x3e')]=function(_0x830a8,_0x346729){return db[_0xcf26('0x14')]['findOne']({'where':{'id':_0x830a8[_0xcf26('0x30')]['id']},'raw':!![]})[_0xcf26('0xe')](function(_0x5cafe3){if(!_0x5cafe3)return _0x346729['sendStatus'](0x194);return{'url':oauth['generateMicrosoftAuthorizationUrl'](_0x5cafe3,_0x830a8['user']['id'])};})[_0xcf26('0xe')](respondWithResult(_0x346729,null))['catch'](handleError(_0x346729,null));};exports[_0xcf26('0x3f')]=function(_0x2fd0de,_0x5b42e2){var _0x2c3db4=_0x2fd0de[_0xcf26('0x35')];var _0x203a9a;var _0x3728d1;if(_0x2c3db4[_0xcf26('0xf')])throw _0x2c3db4;redis[_0xcf26('0x40')](_0x2c3db4[_0xcf26('0x41')])['then'](function(_0x108fac){if(!_0x108fac)throw new Error('Invalid\x20state\x20parameter');_0x203a9a=JSON[_0xcf26('0x42')](_0x108fac);var _0x50ef24=Buffer[_0xcf26('0x43')](_0x2c3db4[_0xcf26('0x41')],_0xcf26('0x44'))[_0xcf26('0x45')](_0xcf26('0x46'));_0x3728d1=JSON[_0xcf26('0x42')](_0x50ef24);if(!oauth[_0xcf26('0x47')](_0x2c3db4['id_token'],_0x203a9a[_0xcf26('0x48')]))throw new Error(_0xcf26('0x49'));redis[_0xcf26('0x4a')](_0x2c3db4[_0xcf26('0x41')]);return oauth[_0xcf26('0x4b')](_0x2c3db4[_0xcf26('0x4c')],_0x203a9a);})[_0xcf26('0xe')](function(_0x19fc95){_0x203a9a[_0xcf26('0x4d')]=_0x19fc95[_0xcf26('0x4e')];_0x203a9a[_0xcf26('0x4f')]=_0x19fc95[_0xcf26('0x50')];return db[_0xcf26('0x14')][_0xcf26('0x3b')]({'data5':_0x203a9a['data5'],'data6':_0x203a9a[_0xcf26('0x4f')]},{'where':{'id':_0x203a9a['id']}});})[_0xcf26('0xe')](function(){oauth[_0xcf26('0x51')](_0x203a9a);socket[_0xcf26('0x52')](_0xcf26('0x53'),{'id':_0x3728d1['id']});return;})[_0xcf26('0xe')](respondWithStatusCode(_0x5b42e2,null))['catch'](function(_0x55c686){if(_0x3728d1){socket[_0xcf26('0x52')](_0xcf26('0x54'),{'id':_0x3728d1['id']});}if(!_0x203a9a){logger[_0xcf26('0xf')]('Invalid\x20authentication\x20state\x20parameter',_0x55c686);return _0x5b42e2[_0xcf26('0x7')](0x1f4)[_0xcf26('0x55')](_0x55c686['message']);}logger[_0xcf26('0xf')]('Authentication\x20failed\x20for\x20cloud\x20provider\x20#%s,\x20err:%s',_0x203a9a['id'],JSON[_0xcf26('0x56')](_0x55c686));});};