ec06fca57121a2f1e74918fdf14fc3c333411aba
[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 _0x0642=['redis','defaults','localhost','socket.io-emitter','sendStatus','status','offset','undefined','count','set','Content-Range','json','update','then','error','stack','padEnd','slice','index','CloudProvider','rawAttributes','fieldName','type','key','model','name','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','pick','filter','map','merge','options','includeAll','findAll','service','decryptString','catch','show','params','include','find','MicrosoftAzure','data3','create','body','Name\x20parameter\x20not\x20specified','Service\x20parameter\x20not\x20specified','values','includes','Invalid\x20service\x20parameter.\x20Allowed\x20values:\x20','join','encryptString','destroy','oauth2MicrosoftAuthorize','findOne','generateMicrosoftAuthorizationUrl','user','state','Invalid\x20state\x20parameter','parse','isValidIdToken','id_token','oauth2Claims','del','getOauth2MicrosoftAccessToken','code','data6','refresh_token','emit','microsoftAuthorization:success','Invalid\x20authentication\x20state\x20parameter','send','message','stringify','ioredis','../../components/parsers/qs','../../components/encryptor','../../config/environment','../../config/logger','api','./cloudProvider.oauth'];(function(_0x462516,_0x5042bb){var _0x28f3bf=function(_0x11e8dc){while(--_0x11e8dc){_0x462516['push'](_0x462516['shift']());}};_0x28f3bf(++_0x5042bb);}(_0x0642,0x1c5));var _0x2064=function(_0x3c4f1f,_0x20d3ec){_0x3c4f1f=_0x3c4f1f-0x0;var _0x19cb69=_0x0642[_0x3c4f1f];return _0x19cb69;};'use strict';var _=require('lodash');var Redis=require(_0x2064('0x0'));var qs=require(_0x2064('0x1'));var encryptor=require(_0x2064('0x2'));var config=require(_0x2064('0x3'));var logger=require(_0x2064('0x4'))(_0x2064('0x5'));var db=require('../../mysqldb')['db'];var oauth=require(_0x2064('0x6'));config[_0x2064('0x7')]=_[_0x2064('0x8')](config[_0x2064('0x7')],{'host':_0x2064('0x9'),'port':0x18eb});var socket=require(_0x2064('0xa'))(new Redis(config[_0x2064('0x7')]));var redis=new Redis(config[_0x2064('0x7')]);function respondWithStatusCode(_0x10e70e,_0x3be7a2){_0x3be7a2=_0x3be7a2||0xcc;return function(_0x20ba60){if(_0x20ba60){return _0x10e70e[_0x2064('0xb')](_0x3be7a2);}return _0x10e70e[_0x2064('0xc')](_0x3be7a2)['end']();};}function respondWithResult(_0x44adf1,_0x257376){_0x257376=_0x257376||0xc8;return function(_0x465e55){if(_0x465e55){return _0x44adf1[_0x2064('0xc')](_0x257376)['json'](_0x465e55);}};}function respondWithFilteredResult(_0x557ff6,_0x356cc3){return function(_0x6c048a){if(_0x6c048a){var _0x1508c8=typeof _0x356cc3[_0x2064('0xd')]===_0x2064('0xe')&&typeof _0x356cc3['limit']===_0x2064('0xe');var _0x2a9452=_0x6c048a[_0x2064('0xf')];var _0x2cfcc7=_0x1508c8?0x0:_0x356cc3[_0x2064('0xd')];var _0x4d1008=_0x1508c8?_0x6c048a[_0x2064('0xf')]:_0x356cc3[_0x2064('0xd')]+_0x356cc3['limit'];var _0x4ed761;if(_0x4d1008>=_0x2a9452){_0x4d1008=_0x2a9452;_0x4ed761=0xc8;}else{_0x4ed761=0xce;}_0x557ff6['status'](_0x4ed761);return _0x557ff6[_0x2064('0x10')](_0x2064('0x11'),_0x2cfcc7+'-'+_0x4d1008+'/'+_0x2a9452)[_0x2064('0x12')](_0x6c048a);}return null;};}function saveUpdates(_0x542116){return function(_0x43ce5c){if(_0x43ce5c){return _0x43ce5c[_0x2064('0x13')](_0x542116)['then'](function(_0x223b90){return _0x223b90;});}return null;};}function removeEntity(_0x50ec80){return function(_0x2e7422){if(_0x2e7422){return _0x2e7422['destroy']()[_0x2064('0x14')](function(){_0x50ec80[_0x2064('0xc')](0xcc)['end']();});}};}function handleEntityNotFound(_0x16c2a0){return function(_0x359bb5){if(!_0x359bb5){_0x16c2a0[_0x2064('0xb')](0x194);}return _0x359bb5;};}function handleError(_0x135d5d,_0x7b86be){_0x7b86be=_0x7b86be||0x1f4;return function(_0x6ce682){logger[_0x2064('0x15')](_0x6ce682[_0x2064('0x16')]);if(_0x6ce682['name']){delete _0x6ce682['name'];}_0x135d5d[_0x2064('0xc')](_0x7b86be)['send'](_0x6ce682);};}function maskClientSecret(_0x48b5ad){return _[_0x2064('0x17')](_0x48b5ad[_0x2064('0x18')](0x0,0x3),0x14,'*');}exports[_0x2064('0x19')]=function(_0x335824,_0x9b3505){var _0x2284eb={},_0x5c3203={},_0x3292bf={'count':0x0,'rows':[]};var _0x5d1f69=_['map'](db[_0x2064('0x1a')][_0x2064('0x1b')],function(_0xf418d8){return{'name':_0xf418d8[_0x2064('0x1c')],'type':_0xf418d8[_0x2064('0x1d')][_0x2064('0x1e')]};});_0x5c3203[_0x2064('0x1f')]=_['map'](_0x5d1f69,_0x2064('0x20'));_0x5c3203[_0x2064('0x21')]=_[_0x2064('0x22')](_0x335824[_0x2064('0x21')]);_0x5c3203[_0x2064('0x23')]=_[_0x2064('0x24')](_0x5c3203['model'],_0x5c3203[_0x2064('0x21')]);_0x2284eb[_0x2064('0x25')]=_[_0x2064('0x24')](_0x5c3203['model'],qs['fields'](_0x335824[_0x2064('0x21')][_0x2064('0x26')]));_0x2284eb[_0x2064('0x25')]=_0x2284eb[_0x2064('0x25')][_0x2064('0x27')]?_0x2284eb[_0x2064('0x25')]:_0x5c3203[_0x2064('0x1f')];if(!_0x335824[_0x2064('0x21')][_0x2064('0x28')](_0x2064('0x29'))){_0x2284eb[_0x2064('0x2a')]=qs['limit'](_0x335824[_0x2064('0x21')][_0x2064('0x2a')]);_0x2284eb[_0x2064('0xd')]=qs[_0x2064('0xd')](_0x335824[_0x2064('0x21')][_0x2064('0xd')]);}_0x2284eb[_0x2064('0x2b')]=qs[_0x2064('0x2c')](_0x335824[_0x2064('0x21')][_0x2064('0x2c')]);_0x2284eb['where']=qs['filters'](_[_0x2064('0x2d')](_0x335824[_0x2064('0x21')],_0x5c3203[_0x2064('0x23')]),_0x5d1f69);if(_0x335824[_0x2064('0x21')][_0x2064('0x2e')]){_0x2284eb['where']=_['merge'](_0x2284eb['where'],{'$or':_[_0x2064('0x2f')](_0x5d1f69,function(_0x11f141){if(_0x11f141[_0x2064('0x1d')]!=='VIRTUAL'){var _0x52d43c={};_0x52d43c[_0x11f141[_0x2064('0x20')]]={'$like':'%'+_0x335824[_0x2064('0x21')][_0x2064('0x2e')]+'%'};return _0x52d43c;}})});}_0x2284eb=_[_0x2064('0x30')]({},_0x2284eb,_0x335824[_0x2064('0x31')]);var _0x177af2={'where':_0x2284eb['where']};return db['CloudProvider'][_0x2064('0xf')](_0x177af2)[_0x2064('0x14')](function(_0x370b64){_0x3292bf[_0x2064('0xf')]=_0x370b64;if(_0x335824[_0x2064('0x21')][_0x2064('0x32')]){_0x2284eb['include']=[{'all':!![]}];}return db[_0x2064('0x1a')][_0x2064('0x33')](_0x2284eb);})[_0x2064('0x14')](function(_0x2072a8){_0x3292bf['rows']=_[_0x2064('0x2f')](_0x2072a8,function(_0x1b5fa1){if(_0x1b5fa1[_0x2064('0x34')]==='MicrosoftAzure'){var _0xee72c1=encryptor[_0x2064('0x35')](_0x1b5fa1['data3']);_0x1b5fa1['data3']=maskClientSecret(_0xee72c1);}return _0x1b5fa1;});return _0x3292bf;})[_0x2064('0x14')](respondWithFilteredResult(_0x9b3505,_0x2284eb))[_0x2064('0x36')](handleError(_0x9b3505,null));};exports[_0x2064('0x37')]=function(_0x2cae1b,_0xa436fd){var _0x2d9c6b={'raw':!![],'where':{'id':_0x2cae1b[_0x2064('0x38')]['id']}},_0x280ce4={};_0x280ce4['model']=_[_0x2064('0x22')](db[_0x2064('0x1a')][_0x2064('0x1b')]);_0x280ce4[_0x2064('0x21')]=_[_0x2064('0x22')](_0x2cae1b[_0x2064('0x21')]);_0x280ce4['filters']=_[_0x2064('0x24')](_0x280ce4[_0x2064('0x1f')],_0x280ce4[_0x2064('0x21')]);_0x2d9c6b[_0x2064('0x25')]=_[_0x2064('0x24')](_0x280ce4[_0x2064('0x1f')],qs[_0x2064('0x26')](_0x2cae1b[_0x2064('0x21')][_0x2064('0x26')]));_0x2d9c6b['attributes']=_0x2d9c6b[_0x2064('0x25')]['length']?_0x2d9c6b['attributes']:_0x280ce4[_0x2064('0x1f')];if(_0x2cae1b[_0x2064('0x21')][_0x2064('0x32')]){_0x2d9c6b[_0x2064('0x39')]=[{'all':!![]}];}_0x2d9c6b=_[_0x2064('0x30')]({},_0x2d9c6b,_0x2cae1b[_0x2064('0x31')]);return db[_0x2064('0x1a')][_0x2064('0x3a')](_0x2d9c6b)[_0x2064('0x14')](handleEntityNotFound(_0xa436fd,null))[_0x2064('0x14')](function(_0xbff98f){if(_0xbff98f['service']===_0x2064('0x3b')){var _0x500322=encryptor[_0x2064('0x35')](_0xbff98f[_0x2064('0x3c')]);_0xbff98f[_0x2064('0x3c')]=maskClientSecret(_0x500322);}return _0xbff98f;})['then'](respondWithResult(_0xa436fd,null))[_0x2064('0x36')](handleError(_0xa436fd,null));};exports[_0x2064('0x3d')]=function(_0x3ac2ec,_0x38b6da){if(!_0x3ac2ec[_0x2064('0x3e')]['name'])throw new Error(_0x2064('0x3f'));if(!_0x3ac2ec['body'][_0x2064('0x34')])throw new Error(_0x2064('0x40'));var _0xa2030d=db[_0x2064('0x1a')][_0x2064('0x1b')][_0x2064('0x34')][_0x2064('0x41')];if(!_0xa2030d[_0x2064('0x42')](_0x3ac2ec[_0x2064('0x3e')][_0x2064('0x34')]))throw new Error(_0x2064('0x43')+_0xa2030d[_0x2064('0x44')](',\x20'));if(_0x3ac2ec[_0x2064('0x3e')][_0x2064('0x34')]===_0x2064('0x3b')&&_0x3ac2ec['body'][_0x2064('0x3c')]){_0x3ac2ec[_0x2064('0x3e')]['data3']=encryptor[_0x2064('0x45')](_0x3ac2ec[_0x2064('0x3e')][_0x2064('0x3c')]);}return db['CloudProvider'][_0x2064('0x3d')](_0x3ac2ec['body'],{})[_0x2064('0x14')](respondWithResult(_0x38b6da,0xc9))[_0x2064('0x36')](handleError(_0x38b6da,null));};exports[_0x2064('0x13')]=function(_0x30914e,_0x1e1f3e){if(_0x30914e[_0x2064('0x3e')]['id']){delete _0x30914e[_0x2064('0x3e')]['id'];}return db['CloudProvider'][_0x2064('0x3a')]({'where':{'id':_0x30914e[_0x2064('0x38')]['id']}})[_0x2064('0x14')](handleEntityNotFound(_0x1e1f3e,null))['then'](function(_0xd3b9d7){if(_0xd3b9d7[_0x2064('0x34')]==='MicrosoftAzure'&&_0x30914e[_0x2064('0x3e')][_0x2064('0x3c')]){_0x30914e[_0x2064('0x3e')][_0x2064('0x3c')]=encryptor['encryptString'](_0x30914e[_0x2064('0x3e')][_0x2064('0x3c')]);}return _0xd3b9d7;})['then'](saveUpdates(_0x30914e['body'],null))[_0x2064('0x14')](respondWithResult(_0x1e1f3e,null))[_0x2064('0x36')](handleError(_0x1e1f3e,null));};exports[_0x2064('0x46')]=function(_0x3dc715,_0x53fccf){return db[_0x2064('0x1a')][_0x2064('0x3a')]({'where':{'id':_0x3dc715['params']['id']}})['then'](handleEntityNotFound(_0x53fccf,null))[_0x2064('0x14')](removeEntity(_0x53fccf,null))[_0x2064('0x36')](handleError(_0x53fccf,null));};exports[_0x2064('0x47')]=function(_0x53ba72,_0x557088){return db[_0x2064('0x1a')][_0x2064('0x48')]({'where':{'id':_0x53ba72[_0x2064('0x38')]['id']},'raw':!![]})[_0x2064('0x14')](function(_0xac017a){if(!_0xac017a)return _0x557088[_0x2064('0xb')](0x194);return{'url':oauth[_0x2064('0x49')](_0xac017a,_0x53ba72[_0x2064('0x4a')]['id'])};})[_0x2064('0x14')](respondWithResult(_0x557088,null))[_0x2064('0x36')](handleError(_0x557088,null));};exports['oauth2MicrosoftCallback']=function(_0x38dda8,_0x2b5369){var _0x55ec6c=_0x38dda8[_0x2064('0x3e')];var _0x288676;var _0x1cc878;if(_0x55ec6c[_0x2064('0x15')])throw _0x55ec6c;redis['get'](_0x55ec6c[_0x2064('0x4b')])[_0x2064('0x14')](function(_0x13aab0){if(!_0x13aab0)throw new Error(_0x2064('0x4c'));_0x288676=JSON[_0x2064('0x4d')](_0x13aab0);var _0x161d1f=Buffer['from'](_0x55ec6c[_0x2064('0x4b')],'base64')['toString']('ascii');_0x1cc878=JSON[_0x2064('0x4d')](_0x161d1f);if(!oauth[_0x2064('0x4e')](_0x55ec6c[_0x2064('0x4f')],_0x288676[_0x2064('0x50')]))throw new Error('Unable\x20to\x20validate\x20id_token');redis[_0x2064('0x51')](_0x55ec6c['state']);return oauth[_0x2064('0x52')](_0x55ec6c[_0x2064('0x53')],_0x288676);})[_0x2064('0x14')](function(_0x4e4232){_0x288676['data5']=_0x4e4232['access_token'];_0x288676[_0x2064('0x54')]=_0x4e4232[_0x2064('0x55')];return db[_0x2064('0x1a')]['update']({'data5':_0x288676['data5'],'data6':_0x288676[_0x2064('0x54')]},{'where':{'id':_0x288676['id']}});})['then'](function(){oauth['startRefreshInterval'](_0x288676);socket[_0x2064('0x56')](_0x2064('0x57'),{'id':_0x1cc878['id']});return;})[_0x2064('0x14')](respondWithStatusCode(_0x2b5369,null))[_0x2064('0x36')](function(_0x133e4b){if(_0x1cc878){socket[_0x2064('0x56')]('microsoftAuthorization:error',{'id':_0x1cc878['id']});}if(!_0x288676){logger['error'](_0x2064('0x58'),_0x133e4b);return _0x2b5369[_0x2064('0xc')](0x1f4)[_0x2064('0x59')](_0x133e4b[_0x2064('0x5a')]);}logger['error']('Authentication\x20failed\x20for\x20cloud\x20provider\x20#%s,\x20err:%s',_0x288676['id'],JSON[_0x2064('0x5b')](_0x133e4b));});};