Built motion from commit 5e31ea4.|0.0.32
[motion.git] / server / api / mail_account / mail_account.controller.js
index db950f2..32461ae 100644 (file)
@@ -1 +1,291 @@
-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);
+}