-var _0x477d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x66\x73","\x70\x61\x74\x68","\x75\x70\x6C\x6F\x61\x64\x2D\x66\x69\x6C\x65","\x6E\x6F\x64\x65\x2D\x75\x75\x69\x64","\x68\x74\x6D\x6C\x2D\x70\x64\x66","\x73\x70\x69\x6E\x64\x72\x69\x66\x74","\x66\x6F\x72\x6D\x69\x64\x61\x62\x6C\x65","\x65\x78\x65\x63","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x61\x78\x52\x6F\x6F\x6D","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74","\x43\x6F\x6E\x74\x61\x63\x74","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x63\x72\x65\x61\x74\x65\x64\x41\x74\x20\x44\x45\x53\x43","\x46\x72\x6F\x6D","\x54\x6F","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x4F\x6E\x65","\x63\x72\x65\x61\x74\x65","\x75\x70\x6C\x6F\x61\x64\x44\x69\x72","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72\x2F\x66\x69\x6C\x65\x73\x2F\x66\x61\x78\x2F\x6F\x75\x74\x62\x6F\x75\x6E\x64\x2F\x6F\x72\x69\x67\x69\x6E\x61\x6C","\x6A\x6F\x69\x6E","\x6B\x65\x65\x70\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73","\x6D\x75\x6C\x74\x69\x70\x6C\x65\x73","\x6F\x6E\x6C\x79\x54\x65\x78\x74","\x62\x6F\x64\x79","\x68\x74\x6D\x6C","\x76\x34","\x2E\x70\x64\x66","\x46\x61\x78\x3A\x20\x48\x54\x4D\x4C\x20\x43\x6F\x6E\x76\x65\x72\x74\x65\x64","\x6C\x6F\x67","\x74\x6F\x46\x69\x6C\x65","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x66\x69\x6C\x65","\x63\x72\x65\x61\x74\x65\x57\x72\x69\x74\x65\x53\x74\x72\x65\x61\x6D","\x70\x69\x70\x65","\x70\x64\x66\x53\x74\x72\x65\x61\x6D","\x46\x61\x78\x3A\x20\x48\x54\x4D\x4C\x20\x6A\x6F\x69\x6E\x65\x64\x20\x77\x69\x74\x68\x20\x50\x44\x46\x20\x75\x70\x6C\x6F\x61\x64\x65\x64","\x65\x72\x72\x6F\x72","\x46\x61\x78\x3A\x20\x50\x44\x46\x20\x52\x65\x6E\x61\x6D\x65","\x72\x65\x6E\x61\x6D\x65","\x70\x61\x72\x73\x65","\x73\x65\x72\x76\x65\x72","\x66\x69\x6C\x65\x73","\x66\x61\x78","\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x6F\x72\x69\x67\x69\x6E\x61\x6C","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64","\x2E\x74\x69\x66","\x67\x73","\x20\x2D\x71\x20\x2D\x64\x4E\x4F\x50\x41\x55\x53\x45\x20\x2D\x64\x42\x41\x54\x43\x48\x20\x2D\x73\x44\x45\x56\x49\x43\x45\x3D\x74\x69\x66\x66\x67\x34\x20","\x2D\x73\x50\x41\x50\x45\x52\x53\x49\x5A\x45\x3D\x6C\x65\x74\x74\x65\x72\x20\x2D\x73\x4F\x75\x74\x70\x75\x74\x46\x69\x6C\x65\x3D","\x20","\x53\x49\x50","\x74\x6F\x4E\x75\x6D","\x70\x68\x6F\x6E\x65","\x66\x61\x78\x68\x65\x61\x64\x65\x72","\x6C\x6F\x63\x61\x6C\x69\x64","\x6D\x61\x78\x72\x61\x74\x65","\x6D\x69\x6E\x72\x61\x74\x65","\x65\x63\x6D","\x54\x72\x75\x6E\x6B\x49\x64","\x46\x69\x6C\x65\x20\x6E\x6F\x74\x20\x65\x78\x69\x73\x74\x73","\x46\x61\x78\x3A\x20\x50\x44\x46\x20\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x20\x74\x6F\x20\x54\x49\x46\x46","\x72\x6F\x6F\x6D\x49\x64","\x73\x65\x74\x46\x72\x6F\x6D","\x73\x70\x72\x65\x61\x64","\x66\x72\x6F\x6D","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x73\x65\x74\x54\x6F","\x74\x6F","\x4E\x4F\x54\x20\x53\x45\x4E\x54","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x4F\x50\x45\x4E","\x61\x63\x63\x6F\x75\x6E\x74\x49\x64","\x75\x73\x65\x72\x49\x64","\x63\x68\x6D\x6F\x64","\x65\x78\x69\x73\x74\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x66\x69\x6E\x64","\x67\x65\x74\x43\x6F\x6E\x74\x65\x6E\x74\x46\x72\x6F\x6D\x4D\x65\x73\x73\x61\x67\x65","\x66\x69\x6C\x65\x6E\x61\x6D\x65\x50\x44\x46","\x52\x45\x43\x45\x49\x56\x45\x44","\x69\x6E\x62\x6F\x75\x6E\x64","\x73\x65\x6E\x64\x46\x69\x6C\x65","\x64\x69\x72\x65\x63\x74\x6F\x72\x79","\x53\x45\x4E\x54","\x46\x41\x49\x4C\x45\x44"];_0x477d[0];var _=require(_0x477d[1]);var fs=require(_0x477d[2]);var path=require(_0x477d[3]);var uploadFile=require(_0x477d[4]);var uuidLib=require(_0x477d[5]);var pdf=require(_0x477d[6]);var spindrift=require(_0x477d[7]);var formidable=require(_0x477d[8]);var exec=require(_0x477d[10])[_0x477d[9]];var config=require(_0x477d[11]);var FaxMessage=require(_0x477d[13])[_0x477d[12]];var FaxRoom=require(_0x477d[13])[_0x477d[14]];var FaxAccount=require(_0x477d[13])[_0x477d[15]];var Contact=require(_0x477d[13])[_0x477d[16]];exports[_0x477d[17]]=function(_0x2875xf,_0x2875x10){FaxMessage[_0x477d[26]]({where:_0x2875xf[_0x477d[22]],order:_0x477d[23],include:[{model:Contact,as:_0x477d[24]},{model:Contact,as:_0x477d[25]},{model:FaxRoom,include:[{model:FaxAccount}]}]})[_0x477d[21]](function(_0x2875x12){return _0x2875x10[_0x477d[20]](200)[_0x477d[19]](_0x2875x12)})[_0x477d[18]](function(_0x2875x11){return handleError(_0x2875x10,_0x2875x11)})};exports[_0x477d[27]]=function(_0x2875xf,_0x2875x10){FaxMessage[_0x477d[31]]({where:{id:_0x2875xf[_0x477d[30]][_0x477d[29]]},include:[{model:Contact,as:_0x477d[24]},{model:Contact,as:_0x477d[25]}]})[_0x477d[21]](function(_0x2875x13){if(!_0x2875x13){return _0x2875x10[_0x477d[28]](404)};return _0x2875x10[_0x477d[19]](_0x2875x13);})[_0x477d[18]](function(_0x2875x11){return handleError(_0x2875x10,_0x2875x11)})};exports[_0x477d[32]]=function(_0x2875xf,_0x2875x10,_0x2875x14){var _0x2875x15= new formidable.IncomingForm();_0x2875x15[_0x477d[33]]=path[_0x477d[36]](config[_0x477d[34]],_0x477d[35]);_0x2875x15[_0x477d[37]]=true;_0x2875x15[_0x477d[38]]=false;if(_0x2875xf[_0x477d[40]][_0x477d[39]]){if(_0x2875xf[_0x477d[40]][_0x477d[41]]){var _0x2875x16=uuidLib[_0x477d[42]]();var _0x2875x17=path[_0x477d[36]](config[_0x477d[34]],_0x477d[35],_0x2875x16+_0x477d[43]);pdf[_0x477d[32]](_0x2875xf[_0x477d[40]][_0x477d[41]],{"\x74\x69\x6D\x65\x6F\x75\x74":30000})[_0x477d[46]](_0x2875x17,function(_0x2875x11,_0x2875x18){console[_0x477d[45]](_0x477d[44]);convertPdfAndSendFax(_0x2875xf,_0x2875x10,_0x2875x16,_0x2875xf[_0x477d[40]]);});}}else {_0x2875x15[_0x477d[56]](_0x2875xf,function(_0x2875x11,_0x2875x19,_0x2875x1a){if(_0x2875x11){return handleError(_0x2875x10,_0x2875x11)};if(_0x2875x19[_0x477d[41]]){var _0x2875x16=uuidLib[_0x477d[42]]();var _0x2875x17=path[_0x477d[36]](config[_0x477d[34]],_0x477d[35],_0x2875x16+_0x477d[43]);pdf[_0x477d[32]](_0x2875x19[_0x477d[41]],{"\x74\x69\x6D\x65\x6F\x75\x74":30000})[_0x477d[46]](_0x2875x17,function(_0x2875x11,_0x2875x18){console[_0x477d[45]](_0x477d[44]);var _0x2875x1b=spindrift(_0x2875x18[_0x477d[47]]);var _0x2875x1c=spindrift(_0x2875x1a[_0x477d[48]][_0x477d[3]]);var _0x2875x16=uuidLib[_0x477d[42]]();spindrift[_0x477d[36]](_0x2875x1b,_0x2875x1c)[_0x477d[51]]()[_0x477d[50]](fs[_0x477d[49]](path[_0x477d[36]](config[_0x477d[34]],_0x477d[35],_0x2875x16+_0x477d[43])));console[_0x477d[45]](_0x477d[52]);convertPdfAndSendFax(_0x2875xf,_0x2875x10,_0x2875x16,_0x2875x19);});}else {var _0x2875x16=uuidLib[_0x477d[42]]();var _0x2875x17=path[_0x477d[36]](config[_0x477d[34]],_0x477d[35],_0x2875x16+_0x477d[43]);fs[_0x477d[55]](_0x2875x1a[_0x477d[48]][_0x477d[3]],_0x2875x17,function(_0x2875x11){if(_0x2875x11){console[_0x477d[53]](_0x2875x11);return handleError(_0x2875x10,_0x2875xf);};console[_0x477d[45]](_0x477d[54]);convertPdfAndSendFax(_0x2875xf,_0x2875x10,_0x2875x16,_0x2875x19);});};})};};function convertPdfAndSendFax(_0x2875xf,_0x2875x10,_0x2875x1e,_0x2875x19){var _0x2875x1f=path[_0x477d[36]](config[_0x477d[34]],_0x477d[57],_0x477d[58],_0x477d[59],_0x477d[60],_0x477d[61],_0x2875x1e+_0x477d[43]);var _0x2875x20=path[_0x477d[36]](config[_0x477d[34]],_0x477d[57],_0x477d[58],_0x477d[59],_0x477d[60],_0x477d[62],_0x2875x1e+_0x477d[63]);var _0x2875x21=_0x477d[64]+_0x477d[65]+_0x477d[66]+_0x2875x20+_0x477d[67]+_0x2875x1f;var _0x2875x22=uuidLib[_0x477d[42]]();FaxAccount[_0x477d[93]](_0x2875x19[_0x477d[89]])[_0x477d[21]](function(_0x2875x23){if(_0x2875x23){var _0x2875x24={technology:_0x477d[68],to:_0x2875x19[_0x477d[69]],from:_0x2875x23[_0x477d[70]],fax_file:_0x2875x20,fax_header:_0x2875x23[_0x477d[71]],fax_localid:_0x2875x23[_0x477d[72]],maxrate:_0x2875x23[_0x477d[73]],minrate:_0x2875x23[_0x477d[74]],ecm:_0x2875x23[_0x477d[75]],uuid:_0x2875x22,trunk:{id:_0x2875x23[_0x477d[76]]}};fs[_0x477d[92]](_0x2875x1f,function(_0x2875x25){if(!_0x2875x25){handleError(_0x2875x10, new Error(_0x477d[77]))}else {exec(_0x2875x21,function(_0x2875x11){if(_0x2875x11){console[_0x477d[53]](_0x2875x11);handleError(_0x2875x10,_0x2875x11);}else {console[_0x477d[45]](_0x477d[78]);fs[_0x477d[91]](_0x2875x20,511,function(_0x2875x11){if(_0x2875x19[_0x477d[79]]){FaxRoom[_0x477d[83]]({where:{id:_0x2875x19[_0x477d[79]]},defaults:{}})[_0x477d[81]](function(_0x2875x26,_0x2875x27){FaxMessage[_0x477d[32]]({status:_0x477d[86],read:true,filenamePDF:_0x2875x1e+_0x477d[43],filename:_0x2875x1e+_0x477d[63],body:JSON[_0x477d[87]](_0x2875x24),uuid:_0x2875x22,FaxRoomId:_0x2875x26[_0x477d[29]]})[_0x477d[21]](function(_0x2875x28){Contact[_0x477d[83]]({where:{phone:_0x2875x24[_0x477d[82]]},defaults:{phone:_0x2875x24[_0x477d[82]],fullname:_0x2875x24[_0x477d[82]]}})[_0x477d[81]](function(_0x2875x29,_0x2875x27){_0x2875x28[_0x477d[80]](_0x2875x29)});Contact[_0x477d[83]]({where:{phone:_0x2875x24[_0x477d[85]]},defaults:{phone:_0x2875x24[_0x477d[85]],fullname:_0x2875x24[_0x477d[85]]}})[_0x477d[81]](function(_0x2875x29,_0x2875x27){_0x2875x28[_0x477d[84]](_0x2875x29)});return _0x2875x10[_0x477d[20]](200)[_0x477d[19]](_0x2875x28);})[_0x477d[18]](function(_0x2875x11){handleError(_0x2875x10,_0x2875x11)})})}else {FaxRoom[_0x477d[32]]({status:_0x477d[88],from:_0x2875x19[_0x477d[69]],FaxAccountId:_0x2875x19[_0x477d[89]],UserId:_0x2875x19[_0x477d[90]]})[_0x477d[21]](function(_0x2875x26){FaxMessage[_0x477d[32]]({status:_0x477d[86],read:true,filenamePDF:_0x2875x1e+_0x477d[43],filename:_0x2875x1e+_0x477d[63],body:JSON[_0x477d[87]](_0x2875x24),uuid:_0x2875x22,FaxRoomId:_0x2875x26[_0x477d[29]]})[_0x477d[21]](function(_0x2875x28){Contact[_0x477d[83]]({where:{phone:_0x2875x24[_0x477d[82]]},defaults:{phone:_0x2875x24[_0x477d[82]],fullname:_0x2875x24[_0x477d[82]]}})[_0x477d[81]](function(_0x2875x29,_0x2875x27){_0x2875x28[_0x477d[80]](_0x2875x29)});Contact[_0x477d[83]]({where:{phone:_0x2875x24[_0x477d[85]]},defaults:{phone:_0x2875x24[_0x477d[85]],fullname:_0x2875x24[_0x477d[85]]}})[_0x477d[81]](function(_0x2875x29,_0x2875x27){_0x2875x28[_0x477d[84]](_0x2875x29)});return _0x2875x10[_0x477d[20]](200)[_0x477d[19]](_0x2875x28);})[_0x477d[18]](function(_0x2875x11){handleError(_0x2875x10,_0x2875x11)})})[_0x477d[18]](function(_0x2875x11){handleError(_0x2875x10,_0x2875x11)})}});}})}});}});}exports[_0x477d[94]]=function(_0x2875xf,_0x2875x10){if(_0x2875xf[_0x477d[40]][_0x477d[29]]){delete _0x2875xf[_0x477d[40]][_0x477d[29]]};FaxMessage[_0x477d[31]]({where:{id:_0x2875xf[_0x477d[30]][_0x477d[29]]},include:[{model:Contact,as:_0x477d[24]},{model:Contact,as:_0x477d[25]}]})[_0x477d[21]](function(_0x2875x13){if(!_0x2875x13){return _0x2875x10[_0x477d[28]](404)};var _0x2875x2a=_[_0x477d[95]](_0x2875x13,_0x2875xf[_0x477d[40]]);_0x2875x2a[_0x477d[96]]()[_0x477d[21]](function(){return _0x2875x10[_0x477d[20]](200)[_0x477d[19]](_0x2875x13)})[_0x477d[18]](function(_0x2875x11){return handleError(_0x2875x10,_0x2875x11)});})[_0x477d[18]](function(_0x2875x11){return handleError(_0x2875x10,_0x2875x11)});};exports[_0x477d[97]]=function(_0x2875xf,_0x2875x10){FaxMessage[_0x477d[98]]({where:{id:_0x2875xf[_0x477d[30]][_0x477d[29]]}})[_0x477d[21]](function(_0x2875x13){if(!_0x2875x13){return _0x2875x10[_0x477d[28]](404)};_0x2875x13[_0x477d[97]]()[_0x477d[21]](function(){return _0x2875x10[_0x477d[28]](204)})[_0x477d[18]](function(_0x2875x11){return handleError(_0x2875x10,_0x2875x11)});})[_0x477d[18]](function(_0x2875x11){return handleError(_0x2875x10,_0x2875x11)})};exports[_0x477d[99]]=function(_0x2875xf,_0x2875x10){FaxMessage[_0x477d[93]](_0x2875xf[_0x477d[30]][_0x477d[29]])[_0x477d[21]](function(_0x2875x13){if(!_0x2875x13){return _0x2875x10[_0x477d[28]](404)};if(_0x2875x13[_0x477d[100]]){if(_0x2875x13[_0x477d[20]]===_0x477d[101]){var _0x2875x2b=path[_0x477d[36]](config[_0x477d[34]],_0x477d[57],_0x477d[58],_0x477d[59],_0x477d[102],_0x2875x13[_0x477d[100]]);fs[_0x477d[92]](_0x2875x2b,function(_0x2875x25){if(_0x2875x25){return _0x2875x10[_0x477d[103]](_0x2875x2b)}else {return _0x2875x10[_0x477d[28]](404)}});}else {if(_0x2875x13[_0x477d[20]]===_0x477d[86]||_0x2875x13[_0x477d[104]]===_0x477d[105]||_0x2875x13[_0x477d[20]]===_0x477d[106]){var _0x2875x2b=path[_0x477d[36]](config[_0x477d[34]],_0x477d[57],_0x477d[58],_0x477d[59],_0x477d[60],_0x477d[61],_0x2875x13[_0x477d[100]]);fs[_0x477d[92]](_0x2875x2b,function(_0x2875x25){if(_0x2875x25){return _0x2875x10[_0x477d[103]](_0x2875x2b)}else {return _0x2875x10[_0x477d[28]](404)}});}}}else {_0x2875x10[_0x477d[28]](404)};})[_0x477d[18]](function(_0x2875x11){return handleError(_0x2875x10,_0x2875x11)})};function handleError(_0x2875x10,_0x2875x11){return _0x2875x10[_0x477d[20]](500)[_0x477d[19]](_0x2875x11)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var fs = require('fs');
+var path = require('path');
+var uploadFile = require('upload-file');
+var uuidLib = require('node-uuid');
+var pdf = require('html-pdf');
+var spindrift = require('spindrift');
+var formidable = require('formidable');
+var exec = require('child_process').exec;
+var config = require('../../config/environment');
+
+var FaxMessage = require('../../models').FaxMessage;
+var FaxRoom = require('../../models').FaxRoom;
+var FaxAccount = require('../../models').FaxAccount;
+var Contact = require('../../models').Contact;
+
+// Get list of fax_messages
+exports.index = function(req, res) {
+ FaxMessage
+ .findAll({
+ where: req.query,
+ order: 'createdAt DESC',
+ include: [{
+ model: Contact,
+ as: 'From'
+ }, {
+ model: Contact,
+ as: 'To'
+ }, {
+ model: FaxRoom,
+ include: [{
+ model: FaxAccount
+ }]
+ }]
+ })
+ .then(function(fax_messages) {
+ return res.status(200).send(fax_messages);
+ })
+ .catch(function(err) {
+ return handleError(res, err);
+ });
+};
+
+// Get a single fax_message
+exports.show = function(req, res) {
+ FaxMessage
+ .findOne({
+ where: {
+ id: req.params.id
+ },
+ include: [{
+ model: Contact,
+ as: 'From'
+ }, {
+ model: Contact,
+ as: 'To'
+ }]
+ })
+ .then(function(fax_message) {
+ if (!fax_message) {
+ return res.sendStatus(404);
+ }
+ return res.send(fax_message);
+ })
+ .catch(function(err) {
+ return handleError(res, err);
+ });
+};
+
+// Creates a new fax_message in the DB.
+exports.create = function(req, res, next) {
+ // FaxMessage
+ // .create(req.body)
+ // .then(function(fax_message) {
+ // return res.status(201).send(fax_message);
+ // })
+ // .catch(function(err) {
+ // return handleError(res, err);
+ // });
+
+ var form = new formidable.IncomingForm();
+ // form.encoding = 'utf-8';
+ form.uploadDir = path.join(config.root, 'server/files/fax/outbound/original');
+ form.keepExtensions = true;
+ form.multiples = false;
+
+ if (req.body.onlyText) {
+ //There is not file, only text
+ // console.log(req.body);
+ if (req.body.html) {
+ //There is the html message -> convert
+ var uuid = uuidLib.v4()
+ var dest = path.join(config.root, 'server/files/fax/outbound/original', uuid + '.pdf');
+ pdf.create(req.body.html, {
+ "timeout": 30000
+ }).toFile(dest, function(err, result) {
+ console.log('Fax: HTML Converted');
+ convertPdfAndSendFax(req, res, uuid, req.body);
+ });
+ }
+ } else {
+ form.parse(req, function(err, fields, files) {
+ if (err) {
+ return handleError(res, err);
+ }
+
+ if (fields.html) {
+ //There is HTML with PDF
+ var uuid = uuidLib.v4();
+ var dest = path.join(config.root, 'server/files/fax/outbound/original', uuid + '.pdf');
+ pdf.create(fields.html, {
+ "timeout": 30000
+ }).toFile(dest, function(err, result) {
+ console.log('Fax: HTML Converted');
+ var pdfHTML = spindrift(result.filename);
+ var pdfUploaded = spindrift(files.file.path);
+ var uuid = uuidLib.v4();
+ spindrift.join(pdfHTML, pdfUploaded).pdfStream().pipe(fs.createWriteStream(path.join(config.root, 'server/files/fax/outbound/original', uuid + '.pdf')));
+ console.log('Fax: HTML joined with PDF uploaded');
+ convertPdfAndSendFax(req, res, uuid, fields);
+ });
+ } else {
+ //There is only PDF
+ var uuid = uuidLib.v4();
+ var dest = path.join(config.root, 'server/files/fax/outbound/original', uuid + '.pdf');
+ fs.rename(files.file.path, dest, function(err) {
+ if (err) {
+ console.error(err);
+ return handleError(res, req);
+ // return next(err);
+ }
+ console.log('Fax: PDF Rename');
+ convertPdfAndSendFax(req, res, uuid, fields);
+ });
+ }
+
+ });
+ }
+};
+
+function convertPdfAndSendFax(req, res, filenameInput, fields) {
+ var inputPath = path.join(config.root, 'server', 'files', 'fax', 'outbound', 'original', filenameInput + '.pdf');
+ var resultPath = path.join(config.root, 'server', 'files', 'fax', 'outbound', 'converted', filenameInput + '.tif');
+ var command = 'gs' + ' -q -dNOPAUSE -dBATCH -sDEVICE=tiffg4 ' + '-sPAPERSIZE=letter -sOutputFile=' + resultPath + ' ' + inputPath;
+ // console.log(inputPath, resultPath, command);
+
+ var uuidFax = uuidLib.v4();
+ FaxAccount
+ .findById(fields.accountId)
+ .then(function(faxAccount) {
+ // console.log('FaxAccount', faxAccount);
+
+ if (faxAccount) {
+ var faxBody = {
+ technology: 'SIP',
+ to: fields.toNum,
+ from: faxAccount.phone,
+ fax_file: resultPath,
+ fax_header: faxAccount.faxheader,
+ fax_localid: faxAccount.localid,
+ maxrate: faxAccount.maxrate,
+ minrate: faxAccount.minrate,
+ ecm: faxAccount.ecm,
+ uuid: uuidFax,
+ trunk: {
+ id: faxAccount.TrunkId
+ }
+ };
+
+ fs.exists(inputPath, function(exists) {
+ if (!exists) {
+ // console.log('File not exist');
+ handleError(res, new Error('File not exists'));
+ } else {
+ exec(command, function(err) {
+ if (err) {
+ console.error(err);
+ handleError(res, err);
+ } else {
+ console.log('Fax: PDF converted to TIFF');
+ fs.chmod(resultPath, 511, function(err) {
+ if (fields.roomId) {
+ // Room already exists -> create new message and associate
+ FaxRoom
+ .findOrCreate({
+ where: {
+ id: fields.roomId
+ },
+ defaults: {}
+ })
+ .spread(function(faxRoom, created) {
+ // TODO Verify if we have to manage also the created
+ FaxMessage
+ .create({
+ status: 'NOT SENT',
+ read: true,
+ filenamePDF: filenameInput + '.pdf',
+ filename: filenameInput + '.tif',
+ body: JSON.stringify(faxBody),
+ uuid: uuidFax,
+ FaxRoomId: faxRoom.id
+ })
+ .then(function(faxMessage) {
+ // Fax message created, now association
+ Contact
+ .findOrCreate({
+ where: {
+ phone: faxBody.from
+ },
+ defaults: {
+ phone: faxBody.from,
+ fullname: faxBody.from
+ }
+ })
+ .spread(function(contact, created) {
+ // console.log('Set relationship with from', created);
+ faxMessage.setFrom(contact);
+ });
+
+ Contact
+ .findOrCreate({
+ where: {
+ phone: faxBody.to
+ },
+ defaults: {
+ phone: faxBody.to,
+ fullname: faxBody.to
+ }
+ })
+ .spread(function(contact, created) {
+ // console.log('Set relationship with to', created);
+ faxMessage.setTo(contact);
+ });
+
+ return res.status(200).send(faxMessage);
+ })
+ .catch(function(err) {
+ handleError(res, err);
+ // console.error(err);
+ // next(err);
+ });
+ });
+ } else {
+ // Room not exists -> create room, message and associate
+ FaxRoom
+ .create({
+ status: 'OPEN',
+ from: fields.toNum,
+ FaxAccountId: fields.accountId,
+ UserId: fields.userId
+ })
+ .then(function(faxRoom) {
+ // Room created, now message
+ FaxMessage
+ .create({
+ status: 'NOT SENT',
+ read: true,
+ filenamePDF: filenameInput + '.pdf',
+ filename: filenameInput + '.tif',
+ body: JSON.stringify(faxBody),
+ uuid: uuidFax,
+ FaxRoomId: faxRoom.id
+ })
+ .then(function(faxMessage) {
+ // Fax message created, now association
+
+ Contact
+ .findOrCreate({
+ where: {
+ phone: faxBody.from
+ },
+ defaults: {
+ phone: faxBody.from,
+ fullname: faxBody.from
+ }
+ })
+ .spread(function(contact, created) {
+ faxMessage.setFrom(contact);
+ });
+
+ Contact
+ .findOrCreate({
+ where: {
+ phone: faxBody.to
+ },
+ defaults: {
+ phone: faxBody.to,
+ fullname: faxBody.to
+ }
+ })
+ .spread(function(contact, created) {
+ faxMessage.setTo(contact);
+ });
+
+ return res.status(200).send(
+ faxMessage);
+ })
+ .catch(function(err) {
+ handleError(res, err);
+ });
+ })
+ .catch(function(err) {
+ handleError(res, err);
+ });
+ }
+ });
+ }
+ });
+ }
+ });
+ }
+ });
+}
+
+// Updates an existing fax_message in the DB.
+exports.update = function(req, res) {
+ if (req.body.id) {
+ delete req.body.id;
+ }
+ FaxMessage
+ .findOne({
+ where: {
+ id: req.params.id
+ },
+ include: [{
+ model: Contact,
+ as: 'From'
+ }, {
+ model: Contact,
+ as: 'To'
+ }]
+ })
+ .then(function(fax_message) {
+ if (!fax_message) {
+ return res.sendStatus(404);
+ }
+ var updated = _.merge(fax_message, req.body);
+ updated.save()
+ .then(function() {
+ return res.status(200).send(fax_message);
+ })
+ .catch(function(err) {
+ return handleError(res, err);
+ });
+ })
+ .catch(function(err) {
+ return handleError(res, err);
+ });
+};
+
+// Deletes a fax_message from the DB.
+exports.destroy = function(req, res) {
+ FaxMessage
+ .find({
+ where: {
+ id: req.params.id
+ }
+ })
+ .then(function(fax_message) {
+ if (!fax_message) {
+ return res.sendStatus(404);
+ }
+ fax_message.destroy()
+ .then(function() {
+ return res.sendStatus(204);
+ })
+ .catch(function(err) {
+ return handleError(res, err);
+ });
+ })
+ .catch(function(err) {
+ return handleError(res, err);
+ });
+};
+
+exports.getContentFromMessage = function(req, res) {
+
+ FaxMessage
+ .findById(req.params.id)
+ .then(function(fax_message) {
+
+ // console.log(fax_message);
+
+ if (!fax_message) {
+ return res.sendStatus(404);
+ }
+
+ if (fax_message.filenamePDF) {
+
+ if (fax_message.status === 'RECEIVED') {
+ var pdfPath = path.join(config.root, 'server', 'files', 'fax', 'inbound', fax_message.filenamePDF);
+ fs.exists(pdfPath, function(exists) {
+ if (exists)
+ return res.sendFile(pdfPath);
+ else
+ return res.sendStatus(404);
+ });
+ } else if (fax_message.status === 'NOT SENT' || fax_message.directory ===
+ 'SENT' || fax_message.status === 'FAILED') {
+ var pdfPath = path.join(config.root, 'server', 'files', 'fax', 'outbound', 'original', fax_message.filenamePDF);
+ fs.exists(pdfPath, function(exists) {
+ if (exists)
+ return res.sendFile(pdfPath);
+ else
+ return res.sendStatus(404);
+ });
+ }
+ } else {
+ res.sendStatus(404);
+ }
+
+ })
+ .catch(function(err) {
+ return handleError(res, err);
+ });
+};
+
+function handleError(res, err) {
+ return res.status(500).send(err);
+}