3 var _ = require('lodash');
4 var util = require('util');
5 var async = require('async');
8 var Imap = require("mail-listener2");
10 var nodemailer = require('nodemailer');
11 var smtpTransport = require('nodemailer-smtp-transport');
13 var sequelize = require('../../models').sequelize;
14 var MailAccount = require('../../models').MailAccount;
15 var MailApplication = require('../../models').MailApplication;
16 var MailServerIn = require('../../models').MailServerIn;
17 var MailServerOut = require('../../models').MailServerOut;
19 // Get list of mailAccounts
20 exports.index = function(req, res) {
22 var attributes = ['description', 'name', 'address'];
23 var per_page = req.query.per_page ? parseInt(req.query.per_page, 10) : 100;
24 var page = req.query.page ? parseInt(req.query.page, 10) : 0;
29 offset: page * per_page,
35 _.forIn(req.query, function(value, key) {
41 query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null;
47 attributes.forEach(function(attribute) {
50 $like: '%' + value + '%'
53 query.where.$or.push(tmp);
60 query.where[key].$like = '%' + value + '%';
65 .findAndCountAll(query)
66 .then(function(result) {
67 var total_pages = Math.ceil(result.count / per_page);
68 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;
69 var previous_page = page > 0 ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page - 1) : null;
71 res.status(200).send({
75 previous_page: previous_page,
76 total_pages: total_pages
80 .catch(function(err) {
81 return handleError(res, err);
85 // Get a single mailAccount
86 exports.show = function(req, res, next) {
88 .findById(req.params.id, {
93 .then(function(mailAccount) {
95 return res.sendStatus(404);
97 return res.send(mailAccount);
99 .catch(function(err) {
104 // Creates a new mailAccount in the DB.
105 exports.create = function(req, res, next) {
107 return sequelize.transaction(function(t) {
109 // chain all your queries here. make sure you return them.
113 address: req.body.address,
114 description: req.body.description
117 }).then(function(mailAccount) {
118 // MAIL ACCOUNT ID SETUP
119 req.body.incoming.MailAccountId = mailAccount.id;
121 .create(req.body.incoming, {
124 .then(function(mailServerIn) {
125 // MAIL ACCOUNT ID SETUP
126 req.body.outgoing.MailAccountId = mailAccount.id;
128 .create(req.body.outgoing, {
133 }).then(function(result) {
134 return res.status(201).send(result);
135 }).catch(function(err) {
140 // Updates an existing mailAccount in the DB.
141 exports.update = function(req, res) {
146 .findById(req.params.id)
147 .then(function(mailAccount) {
149 return res.sendStatus(404);
151 var updated = _.merge(mailAccount, req.body);
155 return res.status(200).send(mailAccount);
157 .catch(function(err) {
158 return handleError(res, err);
161 .catch(function(err) {
162 return handleError(res, err);
166 // Sort Mail Applications
167 exports.sortApplications = function(req, res, next) {
172 id: req.body.applications
175 .then(function(mailApplications) {
176 var tmpMailApplications = mailApplications;
183 id: req.body.applications
186 console.log('destroy');
189 .catch(function(err) {
194 // arg1 now equals 'one' and arg2 now equals 'two'
195 var sortedApplications = [];
196 for (var i = 0; i < req.body.applications.length; i++) {
197 var tmpMailApplication = _.find(tmpMailApplications, {
198 'id': req.body.applications[i]
200 if (tmpMailApplication) {
201 tmpMailApplication.priority = i + 1;
202 sortedApplications.push(tmpMailApplication.dataValues);
207 .bulkCreate(sortedApplications)
209 console.log('bulkCreate');
212 .catch(function(err) {
217 // arg1 now equals 'three'
221 id: req.body.applications
228 .then(function(mailApplications) {
229 console.log(mailApplications);
230 callback(null, mailApplications);
232 .catch(function(err) {
236 ], function(err, result) {
237 // result now equals 'done'
239 return handleError(res, err);
241 return res.status(201).send(result);
245 // return sequelize.transaction(function(t) {
246 // return MailApplication
249 // id: req.body.applications
253 // }).then(function() {
255 // var sortedApplications = [];
257 // for (var i = 0; i < req.body.applications.length; i++) {
259 // var tmpMailApplication = _.find(tmpMailApplications, {
260 // 'id': req.body.applications[i]
263 // if (tmpMailApplication) {
264 // tmpMailApplication.priority = i + 1;
265 // sortedApplications.push(tmpMailApplication.dataValues);
269 // return MailApplication
270 // .bulkCreate(sortedApplications, {
272 // }).then(function(data) {
276 // }).then(function(result) {
277 // return res.status(200).send(result);
278 // }).catch(function(err) {
282 .catch(function(err) {
283 return handleError(res, err);
287 // Deletes a mailAccount from the DB.
288 exports.destroy = function(req, res, next) {
290 .findById(req.params.id)
291 .then(function(mailAccount) {
293 return res.sendStatus(404);
295 mailAccount.destroy()
297 return res.sendStatus(204);
299 .catch(function(err) {
303 .catch(function(err) {
308 // Deletes a agent from the DB.
309 exports.bulkDestroy = function(req, res) {
315 individualHooks: true
318 return res.sendStatus(204);
320 .catch(function(err) {
321 return handleError(res, err);
325 function handleError(res, err) {
326 return res.status(500).send(err);