cac89d2848b72105fcb58d481610e0666ff4f8eb
[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 _0x9516=['findOne','generateMicrosoftAuthorizationUrl','user','Invalid\x20state\x20parameter','parse','state','base64','toString','ascii','id_token','oauth2Claims','Unable\x20to\x20validate\x20id_token','del','getOauth2MicrosoftAccessToken','code','data5','access_token','refresh_token','data6','startRefreshInterval','emit','Authentication\x20failed\x20for\x20cloud\x20provider\x20#%s,\x20err:%s','stringify','lodash','ioredis','../../components/parsers/qs','../../components/encryptor','../../config/environment','../../config/logger','api','./cloudProvider.oauth','redis','defaults','sendStatus','status','json','offset','undefined','limit','count','Content-Range','update','destroy','end','error','name','send','index','map','CloudProvider','fieldName','type','key','model','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','VIRTUAL','filter','options','include','findAll','service','MicrosoftAzure','decryptString','data3','then','catch','show','params','merge','create','body','Service\x20parameter\x20not\x20specified','includes','Invalid\x20service\x20parameter.\x20Allowed\x20values:\x20','encryptString','find'];(function(_0x10dbf6,_0x3ff964){var _0x452147=function(_0x7476e0){while(--_0x7476e0){_0x10dbf6['push'](_0x10dbf6['shift']());}};_0x452147(++_0x3ff964);}(_0x9516,0x6e));var _0x6951=function(_0x1a9bdf,_0x43130a){_0x1a9bdf=_0x1a9bdf-0x0;var _0x61a042=_0x9516[_0x1a9bdf];return _0x61a042;};'use strict';var _=require(_0x6951('0x0'));var Redis=require(_0x6951('0x1'));var qs=require(_0x6951('0x2'));var encryptor=require(_0x6951('0x3'));var config=require(_0x6951('0x4'));var logger=require(_0x6951('0x5'))(_0x6951('0x6'));var db=require('../../mysqldb')['db'];var oauth=require(_0x6951('0x7'));config[_0x6951('0x8')]=_[_0x6951('0x9')](config[_0x6951('0x8')],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));var redis=new Redis(config[_0x6951('0x8')]);function respondWithStatusCode(_0x1cb218,_0x1a41a2){_0x1a41a2=_0x1a41a2||0xcc;return function(_0x5027bb){if(_0x5027bb){return _0x1cb218[_0x6951('0xa')](_0x1a41a2);}return _0x1cb218[_0x6951('0xb')](_0x1a41a2)['end']();};}function respondWithResult(_0x324f8a,_0x16a569){_0x16a569=_0x16a569||0xc8;return function(_0x565ef4){if(_0x565ef4){return _0x324f8a['status'](_0x16a569)[_0x6951('0xc')](_0x565ef4);}};}function respondWithFilteredResult(_0x2f2e24,_0x241d67){return function(_0x19fda3){if(_0x19fda3){var _0x4077de=typeof _0x241d67[_0x6951('0xd')]===_0x6951('0xe')&&typeof _0x241d67[_0x6951('0xf')]==='undefined';var _0x5ef329=_0x19fda3[_0x6951('0x10')];var _0x3a48f5=_0x4077de?0x0:_0x241d67['offset'];var _0x41f23b=_0x4077de?_0x19fda3[_0x6951('0x10')]:_0x241d67[_0x6951('0xd')]+_0x241d67[_0x6951('0xf')];var _0x174c50;if(_0x41f23b>=_0x5ef329){_0x41f23b=_0x5ef329;_0x174c50=0xc8;}else{_0x174c50=0xce;}_0x2f2e24[_0x6951('0xb')](_0x174c50);return _0x2f2e24['set'](_0x6951('0x11'),_0x3a48f5+'-'+_0x41f23b+'/'+_0x5ef329)[_0x6951('0xc')](_0x19fda3);}return null;};}function saveUpdates(_0x1aa77d){return function(_0x1f08d7){if(_0x1f08d7){return _0x1f08d7[_0x6951('0x12')](_0x1aa77d)['then'](function(_0x4504fe){return _0x4504fe;});}return null;};}function removeEntity(_0x463806){return function(_0x5e035d){if(_0x5e035d){return _0x5e035d[_0x6951('0x13')]()['then'](function(){_0x463806[_0x6951('0xb')](0xcc)[_0x6951('0x14')]();});}};}function handleEntityNotFound(_0xaaf15d){return function(_0x4d6f14){if(!_0x4d6f14){_0xaaf15d[_0x6951('0xa')](0x194);}return _0x4d6f14;};}function handleError(_0x44bb86,_0x207f92){_0x207f92=_0x207f92||0x1f4;return function(_0x4fccc1){logger[_0x6951('0x15')](_0x4fccc1['stack']);if(_0x4fccc1[_0x6951('0x16')]){delete _0x4fccc1[_0x6951('0x16')];}_0x44bb86[_0x6951('0xb')](_0x207f92)[_0x6951('0x17')](_0x4fccc1);};}function maskClientSecret(_0x192b05){return _['padEnd'](_0x192b05['slice'](0x0,0x3),0x14,'*');}exports[_0x6951('0x18')]=function(_0x5e5a8b,_0x426a94){var _0x141601={},_0x5a61d3={},_0x1e23b1={'count':0x0,'rows':[]};var _0x14613a=_[_0x6951('0x19')](db[_0x6951('0x1a')]['rawAttributes'],function(_0x37bd15){return{'name':_0x37bd15[_0x6951('0x1b')],'type':_0x37bd15[_0x6951('0x1c')][_0x6951('0x1d')]};});_0x5a61d3[_0x6951('0x1e')]=_[_0x6951('0x19')](_0x14613a,'name');_0x5a61d3[_0x6951('0x1f')]=_[_0x6951('0x20')](_0x5e5a8b['query']);_0x5a61d3[_0x6951('0x21')]=_[_0x6951('0x22')](_0x5a61d3[_0x6951('0x1e')],_0x5a61d3['query']);_0x141601[_0x6951('0x23')]=_['intersection'](_0x5a61d3[_0x6951('0x1e')],qs[_0x6951('0x24')](_0x5e5a8b[_0x6951('0x1f')][_0x6951('0x24')]));_0x141601[_0x6951('0x23')]=_0x141601['attributes'][_0x6951('0x25')]?_0x141601['attributes']:_0x5a61d3['model'];if(!_0x5e5a8b['query'][_0x6951('0x26')](_0x6951('0x27'))){_0x141601[_0x6951('0xf')]=qs[_0x6951('0xf')](_0x5e5a8b[_0x6951('0x1f')][_0x6951('0xf')]);_0x141601[_0x6951('0xd')]=qs[_0x6951('0xd')](_0x5e5a8b[_0x6951('0x1f')][_0x6951('0xd')]);}_0x141601[_0x6951('0x28')]=qs[_0x6951('0x29')](_0x5e5a8b[_0x6951('0x1f')][_0x6951('0x29')]);_0x141601['where']=qs[_0x6951('0x21')](_['pick'](_0x5e5a8b['query'],_0x5a61d3[_0x6951('0x21')]),_0x14613a);if(_0x5e5a8b[_0x6951('0x1f')]['filter']){_0x141601[_0x6951('0x2a')]=_['merge'](_0x141601[_0x6951('0x2a')],{'$or':_[_0x6951('0x19')](_0x14613a,function(_0x56bfd0){if(_0x56bfd0[_0x6951('0x1c')]!==_0x6951('0x2b')){var _0x591370={};_0x591370[_0x56bfd0['name']]={'$like':'%'+_0x5e5a8b[_0x6951('0x1f')][_0x6951('0x2c')]+'%'};return _0x591370;}})});}_0x141601=_['merge']({},_0x141601,_0x5e5a8b[_0x6951('0x2d')]);var _0x1cfffb={'where':_0x141601[_0x6951('0x2a')]};return db[_0x6951('0x1a')][_0x6951('0x10')](_0x1cfffb)['then'](function(_0x2b1120){_0x1e23b1[_0x6951('0x10')]=_0x2b1120;if(_0x5e5a8b[_0x6951('0x1f')]['includeAll']){_0x141601[_0x6951('0x2e')]=[{'all':!![]}];}return db[_0x6951('0x1a')][_0x6951('0x2f')](_0x141601);})['then'](function(_0x262bf3){_0x1e23b1['rows']=_[_0x6951('0x19')](_0x262bf3,function(_0x4d4bdc){if(_0x4d4bdc[_0x6951('0x30')]===_0x6951('0x31')){var _0x1876c8=encryptor[_0x6951('0x32')](_0x4d4bdc[_0x6951('0x33')]);_0x4d4bdc[_0x6951('0x33')]=maskClientSecret(_0x1876c8);}return _0x4d4bdc;});return _0x1e23b1;})[_0x6951('0x34')](respondWithFilteredResult(_0x426a94,_0x141601))[_0x6951('0x35')](handleError(_0x426a94,null));};exports[_0x6951('0x36')]=function(_0x38ed05,_0x429036){var _0x34fec3={'raw':!![],'where':{'id':_0x38ed05[_0x6951('0x37')]['id']}},_0x703136={};_0x703136[_0x6951('0x1e')]=_[_0x6951('0x20')](db[_0x6951('0x1a')]['rawAttributes']);_0x703136[_0x6951('0x1f')]=_[_0x6951('0x20')](_0x38ed05[_0x6951('0x1f')]);_0x703136[_0x6951('0x21')]=_[_0x6951('0x22')](_0x703136[_0x6951('0x1e')],_0x703136['query']);_0x34fec3[_0x6951('0x23')]=_[_0x6951('0x22')](_0x703136[_0x6951('0x1e')],qs[_0x6951('0x24')](_0x38ed05['query'][_0x6951('0x24')]));_0x34fec3[_0x6951('0x23')]=_0x34fec3[_0x6951('0x23')][_0x6951('0x25')]?_0x34fec3[_0x6951('0x23')]:_0x703136[_0x6951('0x1e')];if(_0x38ed05[_0x6951('0x1f')]['includeAll']){_0x34fec3[_0x6951('0x2e')]=[{'all':!![]}];}_0x34fec3=_[_0x6951('0x38')]({},_0x34fec3,_0x38ed05[_0x6951('0x2d')]);return db[_0x6951('0x1a')]['find'](_0x34fec3)[_0x6951('0x34')](handleEntityNotFound(_0x429036,null))['then'](function(_0x23b721){if(_0x23b721[_0x6951('0x30')]==='MicrosoftAzure'){var _0x2eeeec=encryptor[_0x6951('0x32')](_0x23b721[_0x6951('0x33')]);_0x23b721['data3']=maskClientSecret(_0x2eeeec);}return _0x23b721;})[_0x6951('0x34')](respondWithResult(_0x429036,null))[_0x6951('0x35')](handleError(_0x429036,null));};exports[_0x6951('0x39')]=function(_0x236b54,_0x3c2c23){if(!_0x236b54[_0x6951('0x3a')][_0x6951('0x16')])throw new Error('Name\x20parameter\x20not\x20specified');if(!_0x236b54['body'][_0x6951('0x30')])throw new Error(_0x6951('0x3b'));var _0x155da2=db['CloudProvider']['rawAttributes']['service']['values'];if(!_0x155da2[_0x6951('0x3c')](_0x236b54['body']['service']))throw new Error(_0x6951('0x3d')+_0x155da2['join'](',\x20'));if(_0x236b54[_0x6951('0x3a')]['service']===_0x6951('0x31')&&_0x236b54[_0x6951('0x3a')][_0x6951('0x33')]){_0x236b54[_0x6951('0x3a')][_0x6951('0x33')]=encryptor[_0x6951('0x3e')](_0x236b54[_0x6951('0x3a')][_0x6951('0x33')]);}return db[_0x6951('0x1a')]['create'](_0x236b54[_0x6951('0x3a')],{})['then'](respondWithResult(_0x3c2c23,0xc9))[_0x6951('0x35')](handleError(_0x3c2c23,null));};exports[_0x6951('0x12')]=function(_0x1dbca4,_0x454660){if(_0x1dbca4['body']['id']){delete _0x1dbca4[_0x6951('0x3a')]['id'];}return db['CloudProvider'][_0x6951('0x3f')]({'where':{'id':_0x1dbca4[_0x6951('0x37')]['id']}})['then'](handleEntityNotFound(_0x454660,null))[_0x6951('0x34')](function(_0x1b7bd2){if(_0x1b7bd2[_0x6951('0x30')]==='MicrosoftAzure'&&_0x1dbca4[_0x6951('0x3a')][_0x6951('0x33')]){_0x1dbca4[_0x6951('0x3a')][_0x6951('0x33')]=encryptor[_0x6951('0x3e')](_0x1dbca4[_0x6951('0x3a')][_0x6951('0x33')]);}return _0x1b7bd2;})['then'](saveUpdates(_0x1dbca4[_0x6951('0x3a')],null))[_0x6951('0x34')](respondWithResult(_0x454660,null))[_0x6951('0x35')](handleError(_0x454660,null));};exports[_0x6951('0x13')]=function(_0x1180cb,_0x4b9315){return db['CloudProvider'][_0x6951('0x3f')]({'where':{'id':_0x1180cb['params']['id']}})['then'](handleEntityNotFound(_0x4b9315,null))[_0x6951('0x34')](removeEntity(_0x4b9315,null))[_0x6951('0x35')](handleError(_0x4b9315,null));};exports['oauth2MicrosoftAuthorize']=function(_0x323224,_0x2799f7){return db[_0x6951('0x1a')][_0x6951('0x40')]({'where':{'id':_0x323224[_0x6951('0x37')]['id']},'raw':!![]})[_0x6951('0x34')](function(_0x1bb6f5){if(!_0x1bb6f5)return _0x2799f7[_0x6951('0xa')](0x194);return{'url':oauth[_0x6951('0x41')](_0x1bb6f5,_0x323224[_0x6951('0x42')]['id'])};})[_0x6951('0x34')](respondWithResult(_0x2799f7,null))[_0x6951('0x35')](handleError(_0x2799f7,null));};exports['oauth2MicrosoftCallback']=function(_0x155c04,_0x24968e){var _0x5b5f60=_0x155c04[_0x6951('0x3a')];var _0x460677;var _0xda384c;if(_0x5b5f60[_0x6951('0x15')])throw _0x5b5f60;redis['get'](_0x5b5f60['state'])[_0x6951('0x34')](function(_0x2316be){if(!_0x2316be)throw new Error(_0x6951('0x43'));_0x460677=JSON[_0x6951('0x44')](_0x2316be);var _0x2a4e66=Buffer['from'](_0x5b5f60[_0x6951('0x45')],_0x6951('0x46'))[_0x6951('0x47')](_0x6951('0x48'));_0xda384c=JSON[_0x6951('0x44')](_0x2a4e66);if(!oauth['isValidIdToken'](_0x5b5f60[_0x6951('0x49')],_0x460677[_0x6951('0x4a')]))throw new Error(_0x6951('0x4b'));redis[_0x6951('0x4c')](_0x5b5f60[_0x6951('0x45')]);return oauth[_0x6951('0x4d')](_0x5b5f60[_0x6951('0x4e')],_0x460677);})[_0x6951('0x34')](function(_0x219073){_0x460677[_0x6951('0x4f')]=_0x219073[_0x6951('0x50')];_0x460677['data6']=_0x219073[_0x6951('0x51')];return db[_0x6951('0x1a')]['update']({'data5':_0x460677[_0x6951('0x4f')],'data6':_0x460677[_0x6951('0x52')]},{'where':{'id':_0x460677['id']}});})[_0x6951('0x34')](function(){oauth[_0x6951('0x53')](_0x460677);socket[_0x6951('0x54')]('microsoftAuthorization:success',{'id':_0xda384c['id']});return;})[_0x6951('0x34')](respondWithStatusCode(_0x24968e,null))[_0x6951('0x35')](function(_0x359288){if(_0xda384c){socket[_0x6951('0x54')]('microsoftAuthorization:error',{'id':_0xda384c['id']});}if(!_0x460677){logger['error']('Invalid\x20authentication\x20state\x20parameter',_0x359288);return _0x24968e[_0x6951('0xb')](0x1f4)[_0x6951('0x17')](_0x359288['message']);}logger[_0x6951('0x15')](_0x6951('0x55'),_0x460677['id'],JSON[_0x6951('0x56')](_0x359288));});};