cb85d9ed440ee15e09713c3353abeb789c5b5970
[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 _0x8167=['stringify','../../components/parsers/qs','../../components/encryptor','../../config/environment','api','../../mysqldb','./cloudProvider.oauth','redis','defaults','localhost','status','end','offset','limit','count','set','Content-Range','update','destroy','then','sendStatus','error','stack','name','send','padEnd','slice','map','CloudProvider','rawAttributes','type','key','model','query','keys','intersection','attributes','fields','length','hasOwnProperty','nolimit','filters','pick','filter','where','VIRTUAL','options','includeAll','include','rows','service','MicrosoftAzure','decryptString','data3','catch','show','params','merge','find','create','body','Name\x20parameter\x20not\x20specified','Service\x20parameter\x20not\x20specified','Invalid\x20service\x20parameter.\x20Allowed\x20values:\x20','encryptString','findOne','oauth2MicrosoftCallback','get','state','base64','toString','id_token','oauth2Claims','Unable\x20to\x20validate\x20id_token','del','getOauth2MicrosoftAccessToken','data5','access_token','data6','refresh_token','startRefreshInterval','emit','microsoftAuthorization:success','microsoftAuthorization:error','Authentication\x20failed\x20for\x20cloud\x20provider\x20#%s,\x20err:%s'];(function(_0x514c15,_0x486901){var _0x16283e=function(_0x53b7d0){while(--_0x53b7d0){_0x514c15['push'](_0x514c15['shift']());}};_0x16283e(++_0x486901);}(_0x8167,0xab));var _0x7816=function(_0x2b1796,_0xcdb779){_0x2b1796=_0x2b1796-0x0;var _0x1e0f44=_0x8167[_0x2b1796];return _0x1e0f44;};'use strict';var _=require('lodash');var Redis=require('ioredis');var qs=require(_0x7816('0x0'));var encryptor=require(_0x7816('0x1'));var config=require(_0x7816('0x2'));var logger=require('../../config/logger')(_0x7816('0x3'));var db=require(_0x7816('0x4'))['db'];var oauth=require(_0x7816('0x5'));config[_0x7816('0x6')]=_[_0x7816('0x7')](config['redis'],{'host':_0x7816('0x8'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));var redis=new Redis(config['redis']);function respondWithStatusCode(_0x1f7bf7,_0x5f11ef){_0x5f11ef=_0x5f11ef||0xcc;return function(_0x107a14){if(_0x107a14){return _0x1f7bf7['sendStatus'](_0x5f11ef);}return _0x1f7bf7[_0x7816('0x9')](_0x5f11ef)[_0x7816('0xa')]();};}function respondWithResult(_0x3b5b99,_0x4518a6){_0x4518a6=_0x4518a6||0xc8;return function(_0x1ff5c5){if(_0x1ff5c5){return _0x3b5b99[_0x7816('0x9')](_0x4518a6)['json'](_0x1ff5c5);}};}function respondWithFilteredResult(_0x58b717,_0x2fb2f5){return function(_0x20fec3){if(_0x20fec3){var _0x531fb4=typeof _0x2fb2f5[_0x7816('0xb')]==='undefined'&&typeof _0x2fb2f5[_0x7816('0xc')]==='undefined';var _0x41aca0=_0x20fec3['count'];var _0x703620=_0x531fb4?0x0:_0x2fb2f5[_0x7816('0xb')];var _0x2ddbc8=_0x531fb4?_0x20fec3[_0x7816('0xd')]:_0x2fb2f5[_0x7816('0xb')]+_0x2fb2f5[_0x7816('0xc')];var _0x1863d7;if(_0x2ddbc8>=_0x41aca0){_0x2ddbc8=_0x41aca0;_0x1863d7=0xc8;}else{_0x1863d7=0xce;}_0x58b717['status'](_0x1863d7);return _0x58b717[_0x7816('0xe')](_0x7816('0xf'),_0x703620+'-'+_0x2ddbc8+'/'+_0x41aca0)['json'](_0x20fec3);}return null;};}function saveUpdates(_0x4b80f7){return function(_0x406aa6){if(_0x406aa6){return _0x406aa6[_0x7816('0x10')](_0x4b80f7)['then'](function(_0x1cf118){return _0x1cf118;});}return null;};}function removeEntity(_0x503fbe){return function(_0x411aa7){if(_0x411aa7){return _0x411aa7[_0x7816('0x11')]()[_0x7816('0x12')](function(){_0x503fbe[_0x7816('0x9')](0xcc)[_0x7816('0xa')]();});}};}function handleEntityNotFound(_0x50be36){return function(_0x21673f){if(!_0x21673f){_0x50be36[_0x7816('0x13')](0x194);}return _0x21673f;};}function handleError(_0xf12456,_0x427af6){_0x427af6=_0x427af6||0x1f4;return function(_0x2c095c){logger[_0x7816('0x14')](_0x2c095c[_0x7816('0x15')]);if(_0x2c095c[_0x7816('0x16')]){delete _0x2c095c[_0x7816('0x16')];}_0xf12456['status'](_0x427af6)[_0x7816('0x17')](_0x2c095c);};}function maskClientSecret(_0x4562cd){return _[_0x7816('0x18')](_0x4562cd[_0x7816('0x19')](0x0,0x3),0x14,'*');}exports['index']=function(_0x556459,_0x3f9b3f){var _0x18e8ba={},_0x4bbbf3={},_0x360b93={'count':0x0,'rows':[]};var _0x49013e=_[_0x7816('0x1a')](db[_0x7816('0x1b')][_0x7816('0x1c')],function(_0xd48657){return{'name':_0xd48657['fieldName'],'type':_0xd48657[_0x7816('0x1d')][_0x7816('0x1e')]};});_0x4bbbf3[_0x7816('0x1f')]=_[_0x7816('0x1a')](_0x49013e,'name');_0x4bbbf3[_0x7816('0x20')]=_[_0x7816('0x21')](_0x556459[_0x7816('0x20')]);_0x4bbbf3['filters']=_[_0x7816('0x22')](_0x4bbbf3['model'],_0x4bbbf3[_0x7816('0x20')]);_0x18e8ba[_0x7816('0x23')]=_[_0x7816('0x22')](_0x4bbbf3[_0x7816('0x1f')],qs[_0x7816('0x24')](_0x556459[_0x7816('0x20')][_0x7816('0x24')]));_0x18e8ba['attributes']=_0x18e8ba[_0x7816('0x23')][_0x7816('0x25')]?_0x18e8ba[_0x7816('0x23')]:_0x4bbbf3[_0x7816('0x1f')];if(!_0x556459[_0x7816('0x20')][_0x7816('0x26')](_0x7816('0x27'))){_0x18e8ba['limit']=qs[_0x7816('0xc')](_0x556459[_0x7816('0x20')][_0x7816('0xc')]);_0x18e8ba[_0x7816('0xb')]=qs[_0x7816('0xb')](_0x556459[_0x7816('0x20')]['offset']);}_0x18e8ba['order']=qs['sort'](_0x556459[_0x7816('0x20')]['sort']);_0x18e8ba['where']=qs[_0x7816('0x28')](_[_0x7816('0x29')](_0x556459[_0x7816('0x20')],_0x4bbbf3[_0x7816('0x28')]),_0x49013e);if(_0x556459[_0x7816('0x20')][_0x7816('0x2a')]){_0x18e8ba[_0x7816('0x2b')]=_['merge'](_0x18e8ba['where'],{'$or':_[_0x7816('0x1a')](_0x49013e,function(_0x581452){if(_0x581452[_0x7816('0x1d')]!==_0x7816('0x2c')){var _0x57e71e={};_0x57e71e[_0x581452[_0x7816('0x16')]]={'$like':'%'+_0x556459[_0x7816('0x20')][_0x7816('0x2a')]+'%'};return _0x57e71e;}})});}_0x18e8ba=_['merge']({},_0x18e8ba,_0x556459[_0x7816('0x2d')]);var _0x451a1d={'where':_0x18e8ba[_0x7816('0x2b')]};return db['CloudProvider'][_0x7816('0xd')](_0x451a1d)['then'](function(_0x5e3d3d){_0x360b93[_0x7816('0xd')]=_0x5e3d3d;if(_0x556459[_0x7816('0x20')][_0x7816('0x2e')]){_0x18e8ba[_0x7816('0x2f')]=[{'all':!![]}];}return db['CloudProvider']['findAll'](_0x18e8ba);})[_0x7816('0x12')](function(_0x1505c9){_0x360b93[_0x7816('0x30')]=_[_0x7816('0x1a')](_0x1505c9,function(_0x4083e8){if(_0x4083e8[_0x7816('0x31')]===_0x7816('0x32')){var _0x3b137f=encryptor[_0x7816('0x33')](_0x4083e8[_0x7816('0x34')]);_0x4083e8[_0x7816('0x34')]=maskClientSecret(_0x3b137f);}return _0x4083e8;});return _0x360b93;})[_0x7816('0x12')](respondWithFilteredResult(_0x3f9b3f,_0x18e8ba))[_0x7816('0x35')](handleError(_0x3f9b3f,null));};exports[_0x7816('0x36')]=function(_0x3135db,_0x5217a7){var _0x5af2ff={'raw':!![],'where':{'id':_0x3135db[_0x7816('0x37')]['id']}},_0x3afbdf={};_0x3afbdf['model']=_[_0x7816('0x21')](db[_0x7816('0x1b')]['rawAttributes']);_0x3afbdf[_0x7816('0x20')]=_[_0x7816('0x21')](_0x3135db[_0x7816('0x20')]);_0x3afbdf[_0x7816('0x28')]=_[_0x7816('0x22')](_0x3afbdf[_0x7816('0x1f')],_0x3afbdf[_0x7816('0x20')]);_0x5af2ff['attributes']=_[_0x7816('0x22')](_0x3afbdf[_0x7816('0x1f')],qs['fields'](_0x3135db['query'][_0x7816('0x24')]));_0x5af2ff[_0x7816('0x23')]=_0x5af2ff['attributes'][_0x7816('0x25')]?_0x5af2ff['attributes']:_0x3afbdf[_0x7816('0x1f')];if(_0x3135db[_0x7816('0x20')][_0x7816('0x2e')]){_0x5af2ff[_0x7816('0x2f')]=[{'all':!![]}];}_0x5af2ff=_[_0x7816('0x38')]({},_0x5af2ff,_0x3135db['options']);return db[_0x7816('0x1b')][_0x7816('0x39')](_0x5af2ff)[_0x7816('0x12')](handleEntityNotFound(_0x5217a7,null))['then'](function(_0x24d586){if(_0x24d586['service']===_0x7816('0x32')){var _0x367571=encryptor[_0x7816('0x33')](_0x24d586[_0x7816('0x34')]);_0x24d586['data3']=maskClientSecret(_0x367571);}return _0x24d586;})[_0x7816('0x12')](respondWithResult(_0x5217a7,null))[_0x7816('0x35')](handleError(_0x5217a7,null));};exports[_0x7816('0x3a')]=function(_0x191190,_0x40adb6){if(!_0x191190[_0x7816('0x3b')]['name'])throw new Error(_0x7816('0x3c'));if(!_0x191190['body'][_0x7816('0x31')])throw new Error(_0x7816('0x3d'));var _0x3570c8=db[_0x7816('0x1b')][_0x7816('0x1c')][_0x7816('0x31')]['values'];if(!_0x3570c8['includes'](_0x191190[_0x7816('0x3b')]['service']))throw new Error(_0x7816('0x3e')+_0x3570c8['join'](',\x20'));if(_0x191190['body']['service']==='MicrosoftAzure'&&_0x191190['body']['data3']){_0x191190['body'][_0x7816('0x34')]=encryptor[_0x7816('0x3f')](_0x191190['body'][_0x7816('0x34')]);}return db[_0x7816('0x1b')][_0x7816('0x3a')](_0x191190[_0x7816('0x3b')],{})['then'](respondWithResult(_0x40adb6,0xc9))[_0x7816('0x35')](handleError(_0x40adb6,null));};exports[_0x7816('0x10')]=function(_0x26e564,_0x10fafb){if(_0x26e564[_0x7816('0x3b')]['id']){delete _0x26e564[_0x7816('0x3b')]['id'];}return db[_0x7816('0x1b')][_0x7816('0x39')]({'where':{'id':_0x26e564['params']['id']}})[_0x7816('0x12')](handleEntityNotFound(_0x10fafb,null))[_0x7816('0x12')](function(_0x3d1434){if(_0x3d1434['service']===_0x7816('0x32')&&_0x26e564['body'][_0x7816('0x34')]){_0x26e564[_0x7816('0x3b')][_0x7816('0x34')]=encryptor[_0x7816('0x3f')](_0x26e564['body'][_0x7816('0x34')]);}return _0x3d1434;})[_0x7816('0x12')](saveUpdates(_0x26e564['body'],null))[_0x7816('0x12')](respondWithResult(_0x10fafb,null))[_0x7816('0x35')](handleError(_0x10fafb,null));};exports[_0x7816('0x11')]=function(_0x500f90,_0x2e0a77){return db[_0x7816('0x1b')][_0x7816('0x39')]({'where':{'id':_0x500f90[_0x7816('0x37')]['id']}})[_0x7816('0x12')](handleEntityNotFound(_0x2e0a77,null))[_0x7816('0x12')](removeEntity(_0x2e0a77,null))[_0x7816('0x35')](handleError(_0x2e0a77,null));};exports['oauth2MicrosoftAuthorize']=function(_0x2e39ed,_0x1d7955){return db[_0x7816('0x1b')][_0x7816('0x40')]({'where':{'id':_0x2e39ed[_0x7816('0x37')]['id']},'raw':!![]})[_0x7816('0x12')](function(_0x15be87){if(!_0x15be87)return _0x1d7955[_0x7816('0x13')](0x194);return{'url':oauth['generateMicrosoftAuthorizationUrl'](_0x15be87,_0x2e39ed['user']['id'])};})[_0x7816('0x12')](respondWithResult(_0x1d7955,null))[_0x7816('0x35')](handleError(_0x1d7955,null));};exports[_0x7816('0x41')]=function(_0x4c064f,_0x36c75c){var _0x48b006=_0x4c064f[_0x7816('0x3b')];var _0x474df3;var _0x13a28d;if(_0x48b006['error'])throw _0x48b006;redis[_0x7816('0x42')](_0x48b006[_0x7816('0x43')])['then'](function(_0xb56ca0){if(!_0xb56ca0)throw new Error('Invalid\x20state\x20parameter');_0x474df3=JSON['parse'](_0xb56ca0);var _0x4a78db=Buffer['from'](_0x48b006[_0x7816('0x43')],_0x7816('0x44'))[_0x7816('0x45')]('ascii');_0x13a28d=JSON['parse'](_0x4a78db);if(!oauth['isValidIdToken'](_0x48b006[_0x7816('0x46')],_0x474df3[_0x7816('0x47')]))throw new Error(_0x7816('0x48'));redis[_0x7816('0x49')](_0x48b006[_0x7816('0x43')]);return oauth[_0x7816('0x4a')](_0x48b006['code'],_0x474df3);})[_0x7816('0x12')](function(_0x2162cb){_0x474df3[_0x7816('0x4b')]=_0x2162cb[_0x7816('0x4c')];_0x474df3[_0x7816('0x4d')]=_0x2162cb[_0x7816('0x4e')];return db[_0x7816('0x1b')][_0x7816('0x10')]({'data5':_0x474df3['data5'],'data6':_0x474df3['data6']},{'where':{'id':_0x474df3['id']}});})['then'](function(){oauth[_0x7816('0x4f')](_0x474df3);socket[_0x7816('0x50')](_0x7816('0x51'),{'id':_0x13a28d['id']});return;})[_0x7816('0x12')](respondWithStatusCode(_0x36c75c,null))['catch'](function(_0x33eb2c){if(_0x13a28d){socket[_0x7816('0x50')](_0x7816('0x52'),{'id':_0x13a28d['id']});}if(!_0x474df3){logger['error']('Invalid\x20authentication\x20state\x20parameter',_0x33eb2c);return _0x36c75c[_0x7816('0x9')](0x1f4)[_0x7816('0x17')](_0x33eb2c['message']);}logger[_0x7816('0x14')](_0x7816('0x53'),_0x474df3['id'],JSON[_0x7816('0x54')](_0x33eb2c));});};