-var _0x886d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x61\x73\x79\x6E\x63","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x4D\x61\x69\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x49\x6E","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x69\x6E\x64\x65\x78","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x6E\x61\x6D\x65","\x61\x64\x64\x72\x65\x73\x73","\x70\x65\x72\x5F\x70\x61\x67\x65","\x71\x75\x65\x72\x79","\x70\x61\x67\x65","\x6F\x72\x64\x65\x72","\x25\x73\x20\x25\x73","\x73\x6F\x72\x74\x5F\x62\x79","\x73\x6F\x72\x74\x5F\x6F\x72\x64\x65\x72","\x41\x53\x43","\x66\x6F\x72\x6D\x61\x74","\x24\x6F\x72","\x77\x68\x65\x72\x65","\x25","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x24","\x24\x6C\x69\x6B\x65","\x66\x6F\x72\x49\x6E","\x63\x61\x74\x63\x68","\x63\x6F\x75\x6E\x74","\x63\x65\x69\x6C","\x6F\x66\x66\x73\x65\x74","\x25\x73\x3A\x2F\x2F\x25\x73\x25\x73\x3F\x70\x61\x67\x65\x3D\x25\x64","\x70\x72\x6F\x74\x6F\x63\x6F\x6C","\x68\x6F\x73\x74","\x68\x65\x61\x64\x65\x72\x73","\x62\x61\x73\x65\x55\x72\x6C","\x72\x6F\x77\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\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\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x69\x6E\x63\x6F\x6D\x69\x6E\x67","\x62\x6F\x64\x79","\x6F\x75\x74\x67\x6F\x69\x6E\x67","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x73\x6F\x72\x74\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x64\x65\x73\x74\x72\x6F\x79","\x6C\x6F\x67","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x6C\x65\x6E\x67\x74\x68","\x66\x69\x6E\x64","\x70\x72\x69\x6F\x72\x69\x74\x79","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x66\x69\x6E\x64\x41\x6C\x6C","\x77\x61\x74\x65\x72\x66\x61\x6C\x6C","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79"];_0x886d[0];var _=require(_0x886d[1]);var util=require(_0x886d[2]);var async=require(_0x886d[3]);var sequelize=require(_0x886d[5])[_0x886d[4]];var MailAccount=require(_0x886d[5])[_0x886d[6]];var MailApplication=require(_0x886d[5])[_0x886d[7]];var MailServerIn=require(_0x886d[5])[_0x886d[8]];var MailServerOut=require(_0x886d[5])[_0x886d[9]];exports[_0x886d[10]]=function(_0xa047x9,_0xa047xa){var _0xa047xb=[_0x886d[11],_0x886d[12],_0x886d[13]];var _0xa047xc=_0xa047x9[_0x886d[15]][_0x886d[14]]?parseInt(_0xa047x9[_0x886d[15]][_0x886d[14]],10):100;var _0xa047xd=_0xa047x9[_0x886d[15]][_0x886d[16]]?parseInt(_0xa047x9[_0x886d[15]][_0x886d[16]],10):0;var _0xa047xe={where:{},limit:_0xa047xc,offset:_0xa047xd*_0xa047xc,include:[{all:true}]};_[_0x886d[30]](_0xa047x9[_0x886d[15]],function(_0xa047xf,_0xa047x10){switch(_0xa047x10){case _0x886d[14]:;case _0x886d[16]:break ;;case _0x886d[19]:_0xa047xe[_0x886d[17]]=util[_0x886d[22]](_0x886d[18],_0xa047x9[_0x886d[15]][_0x886d[19]],_0xa047x9[_0x886d[15]][_0x886d[20]]||_0x886d[21])||null;break ;;case _0x886d[20]:break ;;case _0x886d[28]:_0xa047xe[_0x886d[24]][_0x886d[23]]=[];_0xa047xb[_0x886d[27]](function(_0xa047x11){var _0xa047x12={};_0xa047x12[_0xa047x11]={$like:_0x886d[25]+_0xa047xf+_0x886d[25]};_0xa047xe[_0x886d[24]][_0x886d[23]][_0x886d[26]](_0xa047x12);});break ;;default:_0xa047xe[_0x886d[24]][_0xa047x10]={$like:{}};_0xa047xe[_0x886d[24]][_0xa047x10][_0x886d[29]]=_0x886d[25]+_0xa047xf+_0x886d[25];;}});MailAccount[_0x886d[44]](_0xa047xe)[_0x886d[43]](function(_0xa047x14){var _0xa047x15=Math[_0x886d[33]](_0xa047x14[_0x886d[32]]/_0xa047xc);var _0xa047x16=_0xa047x15>(_0xa047xe[_0x886d[34]]+1)?util[_0x886d[22]](_0x886d[35],_0xa047x9[_0x886d[36]],_0xa047x9[_0x886d[38]][_0x886d[37]],_0xa047x9[_0x886d[39]],_0xa047xd+1):null;var _0xa047x17=_0xa047xd>0?util[_0x886d[22]](_0x886d[35],_0xa047x9[_0x886d[36]],_0xa047x9[_0x886d[38]][_0x886d[37]],_0xa047x9[_0x886d[39]],_0xa047xd-1):null;_0xa047xa[_0x886d[42]](200)[_0x886d[41]]({count:_0xa047x14[_0x886d[32]],rows:_0xa047x14[_0x886d[40]],next_page:_0xa047x16,previous_page:_0xa047x17,total_pages:_0xa047x15});})[_0x886d[31]](function(_0xa047x13){return handleError(_0xa047xa,_0xa047x13)});};exports[_0x886d[45]]=function(_0xa047x9,_0xa047xa,_0xa047x18){MailAccount[_0x886d[49]](_0xa047x9[_0x886d[48]][_0x886d[47]],{include:[{all:true}]})[_0x886d[43]](function(_0xa047x19){if(!_0xa047x19){return _0xa047xa[_0x886d[46]](404)};return _0xa047xa[_0x886d[41]](_0xa047x19);})[_0x886d[31]](function(_0xa047x13){return _0xa047x18(_0xa047x13)})};exports[_0x886d[50]]=function(_0xa047x9,_0xa047xa,_0xa047x18){return sequelize[_0x886d[55]](function(_0xa047x1a){return MailAccount[_0x886d[50]]({name:_0xa047x9[_0x886d[53]][_0x886d[12]],address:_0xa047x9[_0x886d[53]][_0x886d[13]],description:_0xa047x9[_0x886d[53]][_0x886d[11]]},{transaction:_0xa047x1a})[_0x886d[43]](function(_0xa047x19){_0xa047x9[_0x886d[53]][_0x886d[52]][_0x886d[51]]=_0xa047x19[_0x886d[47]];return MailServerIn[_0x886d[50]](_0xa047x9[_0x886d[53]][_0x886d[52]],{transaction:_0xa047x1a})[_0x886d[43]](function(_0xa047x1b){_0xa047x9[_0x886d[53]][_0x886d[54]][_0x886d[51]]=_0xa047x19[_0x886d[47]];return MailServerOut[_0x886d[50]](_0xa047x9[_0x886d[53]][_0x886d[54]],{transaction:_0xa047x1a});});})})[_0x886d[43]](function(_0xa047x14){return _0xa047xa[_0x886d[42]](201)[_0x886d[41]](_0xa047x14)})[_0x886d[31]](function(_0xa047x13){return _0xa047x18(_0xa047x13)})};exports[_0x886d[56]]=function(_0xa047x9,_0xa047xa){if(_0xa047x9[_0x886d[53]][_0x886d[47]]){delete _0xa047x9[_0x886d[53]][_0x886d[47]]};MailAccount[_0x886d[49]](_0xa047x9[_0x886d[48]][_0x886d[47]])[_0x886d[43]](function(_0xa047x19){if(!_0xa047x19){return _0xa047xa[_0x886d[46]](404)};var _0xa047x1c=_[_0x886d[57]](_0xa047x19,_0xa047x9[_0x886d[53]]);_0xa047x1c[_0x886d[58]]()[_0x886d[43]](function(){return _0xa047xa[_0x886d[42]](200)[_0x886d[41]](_0xa047x19)})[_0x886d[31]](function(_0xa047x13){return handleError(_0xa047xa,_0xa047x13)});})[_0x886d[31]](function(_0xa047x13){return handleError(_0xa047xa,_0xa047x13)});};exports[_0x886d[59]]=function(_0xa047x9,_0xa047xa,_0xa047x18){MailApplication[_0x886d[68]]({where:{id:_0xa047x9[_0x886d[53]][_0x886d[62]]}})[_0x886d[43]](function(_0xa047x1d){var _0xa047x1e=_0xa047x1d;async[_0x886d[69]]([function(_0xa047x1f){MailApplication[_0x886d[60]]({where:{id:_0xa047x9[_0x886d[53]][_0x886d[62]]}})[_0x886d[43]](function(){console[_0x886d[61]](_0x886d[60]);_0xa047x1f();})[_0x886d[31]](function(_0xa047x13){_0xa047x1f(_0xa047x13)})},function(_0xa047x1f){var _0xa047x20=[];for(var _0xa047x21=0;_0xa047x21<_0xa047x9[_0x886d[53]][_0x886d[62]][_0x886d[63]];_0xa047x21++){var _0xa047x22=_[_0x886d[64]](_0xa047x1e,{"\x69\x64":_0xa047x9[_0x886d[53]][_0x886d[62]][_0xa047x21]});if(_0xa047x22){_0xa047x22[_0x886d[65]]=_0xa047x21+1;_0xa047x20[_0x886d[26]](_0xa047x22[_0x886d[66]]);};};MailApplication[_0x886d[67]](_0xa047x20)[_0x886d[43]](function(){console[_0x886d[61]](_0x886d[67]);_0xa047x1f();})[_0x886d[31]](function(_0xa047x13){_0xa047x1f(_0xa047x13)});},function(_0xa047x1f){MailApplication[_0x886d[68]]({where:{id:_0xa047x9[_0x886d[53]][_0x886d[62]]},order:_0x886d[65],include:[{all:true}]})[_0x886d[43]](function(_0xa047x1d){console[_0x886d[61]](_0xa047x1d);_0xa047x1f(null,_0xa047x1d);})[_0x886d[31]](function(_0xa047x13){_0xa047x1f(_0xa047x13)})}],function(_0xa047x13,_0xa047x14){if(_0xa047x13){return handleError(_0xa047xa,_0xa047x13)}else {return _0xa047xa[_0x886d[42]](201)[_0x886d[41]](_0xa047x14)}});})[_0x886d[31]](function(_0xa047x13){return handleError(_0xa047xa,_0xa047x13)})};exports[_0x886d[60]]=function(_0xa047x9,_0xa047xa,_0xa047x18){MailAccount[_0x886d[49]](_0xa047x9[_0x886d[48]][_0x886d[47]])[_0x886d[43]](function(_0xa047x19){if(!_0xa047x19){return _0xa047xa[_0x886d[46]](404)};_0xa047x19[_0x886d[60]]()[_0x886d[43]](function(){return _0xa047xa[_0x886d[46]](204)})[_0x886d[31]](function(_0xa047x13){return _0xa047x18(_0xa047x13)});})[_0x886d[31]](function(_0xa047x13){return _0xa047x18(_0xa047x13)})};exports[_0x886d[70]]=function(_0xa047x9,_0xa047xa){MailAccount[_0x886d[60]]({where:{id:_0xa047x9[_0x886d[15]][_0x886d[47]]},individualHooks:true})[_0x886d[43]](function(){return _0xa047xa[_0x886d[46]](204)})[_0x886d[31]](function(_0xa047x13){return handleError(_0xa047xa,_0xa047x13)})};function handleError(_0xa047xa,_0xa047x13){return _0xa047xa[_0x886d[42]](500)[_0x886d[41]](_0xa047x13)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+var async = require('async');
+
+// IMAP MODULES
+// var Imap = require("mail-listener2");
+// SMTP MODULES
+// var nodemailer = require('nodemailer');
+// var smtpTransport = require('nodemailer-smtp-transport');
+
+var sequelize = require('../../models').sequelize;
+var MailAccount = require('../../models').MailAccount;
+var MailApplication = require('../../models').MailApplication;
+var MailServerIn = require('../../models').MailServerIn;
+var MailServerOut = require('../../models').MailServerOut;
+
+// Get list of mailAccounts
+exports.index = function(req, res) {
+
+ var attributes = ['description', 'name', 'address'];
+ var per_page = req.query.per_page ? parseInt(req.query.per_page, 10) : 100;
+ var page = req.query.page ? parseInt(req.query.page, 10) : 0;
+
+ var query = {
+ where: {},
+ limit: per_page,
+ offset: page * per_page,
+ include: [{
+ all: true
+ }]
+ };
+
+ _.forIn(req.query, function(value, key) {
+ switch (key) {
+ case 'per_page':
+ case 'page':
+ break;
+ case 'sort_by':
+ query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null;
+ break;
+ case 'sort_order':
+ break;
+ case '$':
+ query.where.$or = [];
+ attributes.forEach(function(attribute) {
+ var tmp = {};
+ tmp[attribute] = {
+ $like: '%' + value + '%'
+ };
+
+ query.where.$or.push(tmp);
+ });
+ break;
+ default:
+ query.where[key] = {
+ $like: {}
+ };
+ query.where[key].$like = '%' + value + '%';
+ }
+ });
+
+ MailAccount
+ .findAndCountAll(query)
+ .then(function(result) {
+ var total_pages = Math.ceil(result.count / per_page);
+ var next_page = total_pages > (query.offset + 1) ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page + 1) : null;
+ var previous_page = page > 0 ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page - 1) : null;
+
+ res.status(200).send({
+ count: result.count,
+ rows: result.rows,
+ next_page: next_page,
+ previous_page: previous_page,
+ total_pages: total_pages
+ });
+
+ })
+ .catch(function(err) {
+ return handleError(res, err);
+ });
+};
+
+// Get a single mailAccount
+exports.show = function(req, res, next) {
+ MailAccount
+ .findById(req.params.id, {
+ include: [{
+ all: true
+ }]
+ })
+ .then(function(mailAccount) {
+ if (!mailAccount) {
+ return res.sendStatus(404);
+ }
+ return res.send(mailAccount);
+ })
+ .catch(function(err) {
+ return next(err);
+ });
+};
+
+// Creates a new mailAccount in the DB.
+exports.create = function(req, res, next) {
+
+ return sequelize.transaction(function(t) {
+
+ // chain all your queries here. make sure you return them.
+ return MailAccount
+ .create({
+ name: req.body.name,
+ address: req.body.address,
+ description: req.body.description
+ }, {
+ transaction: t
+ }).then(function(mailAccount) {
+ // MAIL ACCOUNT ID SETUP
+ req.body.incoming.MailAccountId = mailAccount.id;
+ return MailServerIn
+ .create(req.body.incoming, {
+ transaction: t
+ })
+ .then(function(mailServerIn) {
+ // MAIL ACCOUNT ID SETUP
+ req.body.outgoing.MailAccountId = mailAccount.id;
+ return MailServerOut
+ .create(req.body.outgoing, {
+ transaction: t
+ })
+ });
+ });
+ }).then(function(result) {
+ return res.status(201).send(result);
+ }).catch(function(err) {
+ return next(err);
+ });
+};
+
+// Updates an existing mailAccount in the DB.
+exports.update = function(req, res) {
+ if (req.body.id) {
+ delete req.body.id;
+ }
+ MailAccount
+ .findById(req.params.id)
+ .then(function(mailAccount) {
+ if (!mailAccount) {
+ return res.sendStatus(404);
+ }
+ var updated = _.merge(mailAccount, req.body);
+ updated
+ .save()
+ .then(function() {
+ return res.status(200).send(mailAccount);
+ })
+ .catch(function(err) {
+ return handleError(res, err);
+ });
+ })
+ .catch(function(err) {
+ return handleError(res, err);
+ });
+};
+
+// Sort Mail Applications
+exports.sortApplications = function(req, res, next) {
+
+ MailApplication
+ .findAll({
+ where: {
+ id: req.body.applications
+ }
+ })
+ .then(function(mailApplications) {
+ var tmpMailApplications = mailApplications;
+
+ async.waterfall([
+ function(callback) {
+ MailApplication
+ .destroy({
+ where: {
+ id: req.body.applications
+ }
+ }).then(function() {
+ console.log('destroy');
+ callback();
+ })
+ .catch(function(err) {
+ callback(err);
+ });
+ },
+ function(callback) {
+ // arg1 now equals 'one' and arg2 now equals 'two'
+ var sortedApplications = [];
+ for (var i = 0; i < req.body.applications.length; i++) {
+ var tmpMailApplication = _.find(tmpMailApplications, {
+ 'id': req.body.applications[i]
+ });
+ if (tmpMailApplication) {
+ tmpMailApplication.priority = i + 1;
+ sortedApplications.push(tmpMailApplication.dataValues);
+ }
+ }
+
+ MailApplication
+ .bulkCreate(sortedApplications)
+ .then(function() {
+ console.log('bulkCreate');
+ callback();
+ })
+ .catch(function(err) {
+ callback(err);
+ });
+ },
+ function(callback) {
+ // arg1 now equals 'three'
+ MailApplication
+ .findAll({
+ where: {
+ id: req.body.applications
+ },
+ order: 'priority',
+ include: [{
+ all: true
+ }]
+ })
+ .then(function(mailApplications) {
+ console.log(mailApplications);
+ callback(null, mailApplications);
+ })
+ .catch(function(err) {
+ callback(err);
+ });
+ }
+ ], function(err, result) {
+ // result now equals 'done'
+ if (err) {
+ return handleError(res, err);
+ } else {
+ return res.status(201).send(result);
+ }
+ });
+
+ })
+ .catch(function(err) {
+ return handleError(res, err);
+ });
+};
+
+// Deletes a mailAccount from the DB.
+exports.destroy = function(req, res, next) {
+ MailAccount
+ .findById(req.params.id)
+ .then(function(mailAccount) {
+ if (!mailAccount) {
+ return res.sendStatus(404);
+ }
+ mailAccount.destroy()
+ .then(function() {
+ return res.sendStatus(204);
+ })
+ .catch(function(err) {
+ return next(err);
+ });
+ })
+ .catch(function(err) {
+ return next(err);
+ });
+};
+
+// Deletes a agent from the DB.
+exports.bulkDestroy = function(req, res) {
+ MailAccount
+ .destroy({
+ where: {
+ id: req.query.id
+ },
+ individualHooks: true
+ })
+ .then(function() {
+ return res.sendStatus(204);
+ })
+ .catch(function(err) {
+ return handleError(res, err);
+ });
+};
+
+function handleError(res, err) {
+ return res.status(500).send(err);
+}