2194dcb194e8497eb1e549f43d8bbdee8d0e7e89
[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 _0x5155=['Content-Range','destroy','then','error','name','send','padEnd','slice','index','map','CloudProvider','rawAttributes','fieldName','key','model','query','keys','filters','attributes','intersection','fields','length','hasOwnProperty','order','sort','where','merge','type','VIRTUAL','filter','options','includeAll','include','findAll','service','MicrosoftAzure','decryptString','data3','params','catch','create','Name\x20parameter\x20not\x20specified','body','Service\x20parameter\x20not\x20specified','includes','Invalid\x20service\x20parameter.\x20Allowed\x20values:\x20','encryptString','find','oauth2MicrosoftAuthorize','findOne','generateMicrosoftAuthorizationUrl','user','get','state','Invalid\x20state\x20parameter','from','base64','toString','isValidIdToken','id_token','oauth2Claims','Unable\x20to\x20validate\x20id_token','getOauth2MicrosoftAccessToken','code','data5','access_token','data6','refresh_token','update','emit','microsoftAuthorization:success','Invalid\x20authentication\x20state\x20parameter','ioredis','../../components/parsers/qs','../../config/logger','../../mysqldb','./cloudProvider.oauth','redis','defaults','localhost','socket.io-emitter','sendStatus','end','status','json','offset','undefined','limit','count'];(function(_0x5e3701,_0x596265){var _0x345dcf=function(_0x5eb12a){while(--_0x5eb12a){_0x5e3701['push'](_0x5e3701['shift']());}};_0x345dcf(++_0x596265);}(_0x5155,0xfa));var _0x5515=function(_0x5cbce6,_0x5492b0){_0x5cbce6=_0x5cbce6-0x0;var _0x59732a=_0x5155[_0x5cbce6];return _0x59732a;};'use strict';var _=require('lodash');var Redis=require(_0x5515('0x0'));var qs=require(_0x5515('0x1'));var encryptor=require('../../components/encryptor');var config=require('../../config/environment');var logger=require(_0x5515('0x2'))('api');var db=require(_0x5515('0x3'))['db'];var oauth=require(_0x5515('0x4'));config[_0x5515('0x5')]=_[_0x5515('0x6')](config[_0x5515('0x5')],{'host':_0x5515('0x7'),'port':0x18eb});var socket=require(_0x5515('0x8'))(new Redis(config[_0x5515('0x5')]));var redis=new Redis(config['redis']);function respondWithStatusCode(_0x3e41d2,_0x4a327f){_0x4a327f=_0x4a327f||0xcc;return function(_0x3f4eba){if(_0x3f4eba){return _0x3e41d2[_0x5515('0x9')](_0x4a327f);}return _0x3e41d2['status'](_0x4a327f)[_0x5515('0xa')]();};}function respondWithResult(_0x1196c0,_0x34aba9){_0x34aba9=_0x34aba9||0xc8;return function(_0x433842){if(_0x433842){return _0x1196c0[_0x5515('0xb')](_0x34aba9)[_0x5515('0xc')](_0x433842);}};}function respondWithFilteredResult(_0x2a0296,_0x4341bc){return function(_0x5140f7){if(_0x5140f7){var _0x12f2f5=typeof _0x4341bc[_0x5515('0xd')]===_0x5515('0xe')&&typeof _0x4341bc[_0x5515('0xf')]===_0x5515('0xe');var _0x586fae=_0x5140f7[_0x5515('0x10')];var _0x3c9fd1=_0x12f2f5?0x0:_0x4341bc[_0x5515('0xd')];var _0x40d7ca=_0x12f2f5?_0x5140f7['count']:_0x4341bc[_0x5515('0xd')]+_0x4341bc['limit'];var _0x5cb259;if(_0x40d7ca>=_0x586fae){_0x40d7ca=_0x586fae;_0x5cb259=0xc8;}else{_0x5cb259=0xce;}_0x2a0296[_0x5515('0xb')](_0x5cb259);return _0x2a0296['set'](_0x5515('0x11'),_0x3c9fd1+'-'+_0x40d7ca+'/'+_0x586fae)[_0x5515('0xc')](_0x5140f7);}return null;};}function saveUpdates(_0x1b9a8e){return function(_0x99c6ff){if(_0x99c6ff){return _0x99c6ff['update'](_0x1b9a8e)['then'](function(_0x451e09){return _0x451e09;});}return null;};}function removeEntity(_0x30e0a1){return function(_0x18fec0){if(_0x18fec0){return _0x18fec0[_0x5515('0x12')]()[_0x5515('0x13')](function(){_0x30e0a1[_0x5515('0xb')](0xcc)[_0x5515('0xa')]();});}};}function handleEntityNotFound(_0x8b51d6){return function(_0x47d60d){if(!_0x47d60d){_0x8b51d6[_0x5515('0x9')](0x194);}return _0x47d60d;};}function handleError(_0x423026,_0x578c46){_0x578c46=_0x578c46||0x1f4;return function(_0xa4ce4b){logger[_0x5515('0x14')](_0xa4ce4b['stack']);if(_0xa4ce4b[_0x5515('0x15')]){delete _0xa4ce4b[_0x5515('0x15')];}_0x423026['status'](_0x578c46)[_0x5515('0x16')](_0xa4ce4b);};}function maskClientSecret(_0x452ced){return _[_0x5515('0x17')](_0x452ced[_0x5515('0x18')](0x0,0x3),0x14,'*');}exports[_0x5515('0x19')]=function(_0x401003,_0x576521){var _0x579b12={},_0x4fbabb={},_0x536dc4={'count':0x0,'rows':[]};var _0x2e5385=_[_0x5515('0x1a')](db[_0x5515('0x1b')][_0x5515('0x1c')],function(_0x50bfd7){return{'name':_0x50bfd7[_0x5515('0x1d')],'type':_0x50bfd7['type'][_0x5515('0x1e')]};});_0x4fbabb[_0x5515('0x1f')]=_[_0x5515('0x1a')](_0x2e5385,_0x5515('0x15'));_0x4fbabb[_0x5515('0x20')]=_[_0x5515('0x21')](_0x401003[_0x5515('0x20')]);_0x4fbabb[_0x5515('0x22')]=_['intersection'](_0x4fbabb[_0x5515('0x1f')],_0x4fbabb['query']);_0x579b12[_0x5515('0x23')]=_[_0x5515('0x24')](_0x4fbabb[_0x5515('0x1f')],qs['fields'](_0x401003[_0x5515('0x20')][_0x5515('0x25')]));_0x579b12[_0x5515('0x23')]=_0x579b12[_0x5515('0x23')][_0x5515('0x26')]?_0x579b12['attributes']:_0x4fbabb[_0x5515('0x1f')];if(!_0x401003[_0x5515('0x20')][_0x5515('0x27')]('nolimit')){_0x579b12[_0x5515('0xf')]=qs[_0x5515('0xf')](_0x401003[_0x5515('0x20')]['limit']);_0x579b12['offset']=qs[_0x5515('0xd')](_0x401003[_0x5515('0x20')][_0x5515('0xd')]);}_0x579b12[_0x5515('0x28')]=qs[_0x5515('0x29')](_0x401003['query'][_0x5515('0x29')]);_0x579b12[_0x5515('0x2a')]=qs['filters'](_['pick'](_0x401003[_0x5515('0x20')],_0x4fbabb[_0x5515('0x22')]),_0x2e5385);if(_0x401003[_0x5515('0x20')]['filter']){_0x579b12['where']=_[_0x5515('0x2b')](_0x579b12['where'],{'$or':_['map'](_0x2e5385,function(_0xb374b7){if(_0xb374b7[_0x5515('0x2c')]!==_0x5515('0x2d')){var _0x586160={};_0x586160[_0xb374b7[_0x5515('0x15')]]={'$like':'%'+_0x401003[_0x5515('0x20')][_0x5515('0x2e')]+'%'};return _0x586160;}})});}_0x579b12=_['merge']({},_0x579b12,_0x401003[_0x5515('0x2f')]);var _0x40115f={'where':_0x579b12[_0x5515('0x2a')]};return db[_0x5515('0x1b')][_0x5515('0x10')](_0x40115f)[_0x5515('0x13')](function(_0x168fba){_0x536dc4[_0x5515('0x10')]=_0x168fba;if(_0x401003[_0x5515('0x20')][_0x5515('0x30')]){_0x579b12[_0x5515('0x31')]=[{'all':!![]}];}return db['CloudProvider'][_0x5515('0x32')](_0x579b12);})['then'](function(_0x471605){_0x536dc4['rows']=_[_0x5515('0x1a')](_0x471605,function(_0x117cb1){if(_0x117cb1[_0x5515('0x33')]===_0x5515('0x34')){var _0xd2cd5a=encryptor[_0x5515('0x35')](_0x117cb1[_0x5515('0x36')]);_0x117cb1['data3']=maskClientSecret(_0xd2cd5a);}return _0x117cb1;});return _0x536dc4;})[_0x5515('0x13')](respondWithFilteredResult(_0x576521,_0x579b12))['catch'](handleError(_0x576521,null));};exports['show']=function(_0x2f20a9,_0x5ebe07){var _0x55977b={'raw':!![],'where':{'id':_0x2f20a9[_0x5515('0x37')]['id']}},_0x11df53={};_0x11df53['model']=_[_0x5515('0x21')](db[_0x5515('0x1b')][_0x5515('0x1c')]);_0x11df53[_0x5515('0x20')]=_[_0x5515('0x21')](_0x2f20a9[_0x5515('0x20')]);_0x11df53[_0x5515('0x22')]=_[_0x5515('0x24')](_0x11df53[_0x5515('0x1f')],_0x11df53[_0x5515('0x20')]);_0x55977b[_0x5515('0x23')]=_['intersection'](_0x11df53['model'],qs['fields'](_0x2f20a9[_0x5515('0x20')][_0x5515('0x25')]));_0x55977b[_0x5515('0x23')]=_0x55977b[_0x5515('0x23')][_0x5515('0x26')]?_0x55977b[_0x5515('0x23')]:_0x11df53[_0x5515('0x1f')];if(_0x2f20a9[_0x5515('0x20')][_0x5515('0x30')]){_0x55977b['include']=[{'all':!![]}];}_0x55977b=_[_0x5515('0x2b')]({},_0x55977b,_0x2f20a9['options']);return db[_0x5515('0x1b')]['find'](_0x55977b)[_0x5515('0x13')](handleEntityNotFound(_0x5ebe07,null))[_0x5515('0x13')](function(_0x4ffb7d){if(_0x4ffb7d[_0x5515('0x33')]===_0x5515('0x34')){var _0xba5ae0=encryptor[_0x5515('0x35')](_0x4ffb7d[_0x5515('0x36')]);_0x4ffb7d[_0x5515('0x36')]=maskClientSecret(_0xba5ae0);}return _0x4ffb7d;})['then'](respondWithResult(_0x5ebe07,null))[_0x5515('0x38')](handleError(_0x5ebe07,null));};exports[_0x5515('0x39')]=function(_0x86308e,_0x32f1cb){if(!_0x86308e['body']['name'])throw new Error(_0x5515('0x3a'));if(!_0x86308e[_0x5515('0x3b')][_0x5515('0x33')])throw new Error(_0x5515('0x3c'));var _0x5953af=db['CloudProvider'][_0x5515('0x1c')][_0x5515('0x33')]['values'];if(!_0x5953af[_0x5515('0x3d')](_0x86308e[_0x5515('0x3b')][_0x5515('0x33')]))throw new Error(_0x5515('0x3e')+_0x5953af['join'](',\x20'));if(_0x86308e[_0x5515('0x3b')][_0x5515('0x33')]==='MicrosoftAzure'&&_0x86308e[_0x5515('0x3b')][_0x5515('0x36')]){_0x86308e[_0x5515('0x3b')][_0x5515('0x36')]=encryptor['encryptString'](_0x86308e[_0x5515('0x3b')][_0x5515('0x36')]);}return db[_0x5515('0x1b')]['create'](_0x86308e['body'],{})['then'](respondWithResult(_0x32f1cb,0xc9))['catch'](handleError(_0x32f1cb,null));};exports['update']=function(_0x2412a4,_0x147afe){if(_0x2412a4[_0x5515('0x3b')]['id']){delete _0x2412a4[_0x5515('0x3b')]['id'];}return db['CloudProvider']['find']({'where':{'id':_0x2412a4[_0x5515('0x37')]['id']}})[_0x5515('0x13')](handleEntityNotFound(_0x147afe,null))[_0x5515('0x13')](function(_0x11eb45){if(_0x11eb45[_0x5515('0x33')]===_0x5515('0x34')&&_0x2412a4['body']['data3']){_0x2412a4[_0x5515('0x3b')][_0x5515('0x36')]=encryptor[_0x5515('0x3f')](_0x2412a4['body'][_0x5515('0x36')]);}return _0x11eb45;})[_0x5515('0x13')](saveUpdates(_0x2412a4[_0x5515('0x3b')],null))[_0x5515('0x13')](respondWithResult(_0x147afe,null))[_0x5515('0x38')](handleError(_0x147afe,null));};exports[_0x5515('0x12')]=function(_0x391a4a,_0x494367){return db['CloudProvider'][_0x5515('0x40')]({'where':{'id':_0x391a4a[_0x5515('0x37')]['id']}})['then'](handleEntityNotFound(_0x494367,null))['then'](removeEntity(_0x494367,null))['catch'](handleError(_0x494367,null));};exports[_0x5515('0x41')]=function(_0x49560c,_0x231933){return db[_0x5515('0x1b')][_0x5515('0x42')]({'where':{'id':_0x49560c[_0x5515('0x37')]['id']},'raw':!![]})['then'](function(_0x4646da){if(!_0x4646da)return _0x231933[_0x5515('0x9')](0x194);return{'url':oauth[_0x5515('0x43')](_0x4646da,_0x49560c[_0x5515('0x44')]['id'])};})['then'](respondWithResult(_0x231933,null))['catch'](handleError(_0x231933,null));};exports['oauth2MicrosoftCallback']=function(_0x39462d,_0x136f4a){var _0x15d5a8=_0x39462d[_0x5515('0x3b')];var _0x1ab564;var _0x100adc;if(_0x15d5a8['error'])throw _0x15d5a8;redis[_0x5515('0x45')](_0x15d5a8[_0x5515('0x46')])[_0x5515('0x13')](function(_0x28df6d){if(!_0x28df6d)throw new Error(_0x5515('0x47'));_0x1ab564=JSON['parse'](_0x28df6d);var _0x174007=Buffer[_0x5515('0x48')](_0x15d5a8['state'],_0x5515('0x49'))[_0x5515('0x4a')]('ascii');_0x100adc=JSON['parse'](_0x174007);if(!oauth[_0x5515('0x4b')](_0x15d5a8[_0x5515('0x4c')],_0x1ab564[_0x5515('0x4d')]))throw new Error(_0x5515('0x4e'));redis['del'](_0x15d5a8[_0x5515('0x46')]);return oauth[_0x5515('0x4f')](_0x15d5a8[_0x5515('0x50')],_0x1ab564);})[_0x5515('0x13')](function(_0x1e7662){_0x1ab564[_0x5515('0x51')]=_0x1e7662[_0x5515('0x52')];_0x1ab564[_0x5515('0x53')]=_0x1e7662[_0x5515('0x54')];return db[_0x5515('0x1b')][_0x5515('0x55')]({'data5':_0x1ab564['data5'],'data6':_0x1ab564[_0x5515('0x53')]},{'where':{'id':_0x1ab564['id']}});})[_0x5515('0x13')](function(){oauth['startRefreshInterval'](_0x1ab564);socket[_0x5515('0x56')](_0x5515('0x57'),{'id':_0x100adc['id']});return;})[_0x5515('0x13')](respondWithStatusCode(_0x136f4a,null))[_0x5515('0x38')](function(_0x360922){if(_0x100adc){socket[_0x5515('0x56')]('microsoftAuthorization:error',{'id':_0x100adc['id']});}if(!_0x1ab564){logger[_0x5515('0x14')](_0x5515('0x58'),_0x360922);return _0x136f4a[_0x5515('0xb')](0x1f4)['send'](_0x360922['message']);}logger['error']('Authentication\x20failed\x20for\x20cloud\x20provider\x20#%s,\x20err:%s',_0x1ab564['id'],JSON['stringify'](_0x360922));});};