1a7c481f0ab9291ef6d550988954876855651cff
[motion2.git] / server / components / encryptor / index.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 _0x7fcb=['data','final','encryptString','secret','utf8','base64','decryptString','crypto','bluebird','lodash','../../config/logger','app','session','aes-256-ctr','aes192','encrypt','algorithm','join','error','is\x20not\x20a\x20supported\x20algorithm.\x20Your\x20system\x20supports\x20the\x20following\x20algorithms:','filter','indexOf','hasOwnProperty','createReadStream','createCipher','update','binary','write','end','close','unlink','decryptFile','createWriteStream','createDecipher'];(function(_0x409972,_0x39bcde){var _0x5d9dfd=function(_0x4499c0){while(--_0x4499c0){_0x409972['push'](_0x409972['shift']());}};_0x5d9dfd(++_0x39bcde);}(_0x7fcb,0x17d));var _0xb7fc=function(_0x2fb534,_0x1d88a3){_0x2fb534=_0x2fb534-0x0;var _0x391369=_0x7fcb[_0x2fb534];return _0x391369;};'use strict';var crypto=require(_0xb7fc('0x0'));var fs=require('fs');var BPromise=require(_0xb7fc('0x1'));var _=require(_0xb7fc('0x2'));var config=require('../../config/environment');var logger=require(_0xb7fc('0x3'))(_0xb7fc('0x4'));const AES_SUPPORTED_RX=/^aes(-)?\d{3}(-(cbc|cfb|ctr)(1|8)?){0,1}$/;const stringOptions={'secret':config['secrets'][_0xb7fc('0x5')],'algorithm':_0xb7fc('0x6')};const fileOptions={'algorithm':_0xb7fc('0x7')};if(config[_0xb7fc('0x8')]&&config['encrypt']['algorithm']){var isSupported=isAlgorithmSupported(config[_0xb7fc('0x8')][_0xb7fc('0x9')]);if(isSupported){fileOptions[_0xb7fc('0x9')]=config[_0xb7fc('0x8')][_0xb7fc('0x9')];}else{var supportedAlgorithms=getSupportedCiphers()[_0xb7fc('0xa')](',\x20');logger[_0xb7fc('0xb')](config[_0xb7fc('0x8')][_0xb7fc('0x9')],_0xb7fc('0xc'),supportedAlgorithms);}}function isASupportedCipher(_0x195978){return AES_SUPPORTED_RX['test'](_0x195978);}function getSupportedCiphers(){return crypto['getCiphers']()[_0xb7fc('0xd')](isASupportedCipher);}function isAlgorithmSupported(_0x24e255){return getSupportedCiphers()[_0xb7fc('0xe')](_0x24e255)>-0x1;}function combineOptions(_0x4cdf34){var _0x5958db={};for(var _0x58c94b in fileOptions){if(fileOptions[_0xb7fc('0xf')](_0x58c94b)){_0x5958db[_0x58c94b]=fileOptions[_0x58c94b];}}if(_0x4cdf34){for(var _0x2593f5 in _0x4cdf34){if(_0x4cdf34[_0xb7fc('0xf')](_0x2593f5)){_0x5958db[_0x2593f5]=_0x4cdf34[_0x2593f5];}}}return _0x5958db;}exports['encryptFile']=function(_0x244c51,_0x212e4b,_0x22f123,_0xa757d5){return new BPromise(function(_0x33a42c,_0x36a1da){_0xa757d5=combineOptions(_0xa757d5);var _0x475f61=new Buffer(_0x22f123);var _0x87b276=fs[_0xb7fc('0x10')](_0x244c51);var _0x3bd6c3=fs['createWriteStream'](_0x212e4b);var _0x51979e=crypto[_0xb7fc('0x11')](_0xa757d5[_0xb7fc('0x9')],_0x475f61);_0x87b276['on']('data',function(_0x53b5f2){var _0x136f4e=new Buffer(_0x51979e[_0xb7fc('0x12')](_0x53b5f2),_0xb7fc('0x13'));_0x3bd6c3[_0xb7fc('0x14')](_0x136f4e);});_0x87b276['on'](_0xb7fc('0x15'),function(){try{var _0x18b921=new Buffer(_0x51979e['final'](_0xb7fc('0x13')),'binary');_0x3bd6c3[_0xb7fc('0x14')](_0x18b921);_0x3bd6c3[_0xb7fc('0x15')]();_0x3bd6c3['on'](_0xb7fc('0x16'),function(){return _0x33a42c(_0x212e4b);});}catch(_0x31eb8f){fs[_0xb7fc('0x17')](_0x212e4b);return _0x36a1da(_0x31eb8f);}});});};exports[_0xb7fc('0x18')]=function(_0x3561a5,_0x543acb,_0x4e0a92,_0x5cb4c6){return new BPromise(function(_0x531b72,_0x4f882a){_0x5cb4c6=combineOptions(_0x5cb4c6);var _0x573875=new Buffer(_0x4e0a92);var _0xa4424=fs[_0xb7fc('0x10')](_0x3561a5);var _0x517cbb=fs[_0xb7fc('0x19')](_0x543acb);var _0x3a0ef6=crypto[_0xb7fc('0x1a')](_0x5cb4c6[_0xb7fc('0x9')],_0x573875);_0xa4424['on'](_0xb7fc('0x1b'),function(_0x3b8e95){var _0x365353=new Buffer(_0x3a0ef6[_0xb7fc('0x12')](_0x3b8e95),_0xb7fc('0x13'));_0x517cbb[_0xb7fc('0x14')](_0x365353);});_0xa4424['on'](_0xb7fc('0x15'),function(){try{var _0x2f8729=new Buffer(_0x3a0ef6[_0xb7fc('0x1c')](_0xb7fc('0x13')),'binary');_0x517cbb[_0xb7fc('0x14')](_0x2f8729);_0x517cbb[_0xb7fc('0x15')]();_0x517cbb['on'](_0xb7fc('0x16'),function(){return _0x531b72(_0x543acb);});}catch(_0x4f647d){fs[_0xb7fc('0x17')](_0x543acb);return _0x4f882a(_0x4f647d);}});});};exports[_0xb7fc('0x1d')]=function(_0x28a68f,_0x31f7a5,_0x7795ff){var _0x197d73=_0x7795ff||stringOptions[_0xb7fc('0x9')];var _0xf8e162=_0x31f7a5||stringOptions[_0xb7fc('0x1e')];var _0x3ac1ce=crypto[_0xb7fc('0x11')](_0x197d73,_0xf8e162);var _0x4e955c=_0x3ac1ce['update'](_0x28a68f,_0xb7fc('0x1f'),_0xb7fc('0x20'));_0x4e955c+=_0x3ac1ce[_0xb7fc('0x1c')](_0xb7fc('0x20'));return _0x4e955c;};exports[_0xb7fc('0x21')]=function(_0x2bd2b1,_0x4a4aa8,_0x4bfc72){var _0x494bc9=_0x4bfc72||stringOptions['algorithm'];var _0x57f796=_0x4a4aa8||stringOptions[_0xb7fc('0x1e')];var _0x51915c=crypto['createDecipher'](_0x494bc9,_0x57f796);var _0x5e1ba9=_0x51915c[_0xb7fc('0x12')](_0x2bd2b1,_0xb7fc('0x20'),_0xb7fc('0x1f'));_0x5e1ba9+=_0x51915c['final'](_0xb7fc('0x1f'));return _0x5e1ba9;};