erizo-fr/erizo-mail-server

View on GitHub
lib/controllers/messageController.js

Summary

Maintainability
A
3 hrs
Test Coverage
'use strict';
var MODULE_NAME = 'MessageController';

var logger = require('log4js').getLogger(MODULE_NAME);
var imapManager = require('../managers/imapManager');
var smtpManager = require('../managers/smtpManager');
var messageService = require('../services/messageService');
var imapHelper = require('../imapHelper');



module.exports.postMessage = function * () {
    //Create the message object
    let message = {
        'from': this.request.body.from,
        'to': this.request.body.to,
        'cc': this.request.body.cc,
        'bcc': this.request.body.bcc,
        'replyTo': this.request.body.replyTo || this.request.body.from,
        'inReplyTo': this.request.body.inReplyTo,
        'references': this.request.body.references,
        'subject': this.request.body.subject,
        'text': this.request.body.text,
        'html': this.request.body.html,
        'attachments': this.request.body.attachments,
    };

    let smtpConnection = smtpManager.getConnection(this.session.username, this.session.password);
    let imapConnection = yield imapManager.getKeepAliveConnectionT(this.session.username, this.session.password);
    let result = yield messageService.sendMessage(smtpConnection, imapConnection, message);

    this.body = result.messageId || '';
    this.status = 200;
};



module.exports.getMessages = function * () {
    let options = {
        bodies: this.query.bodies,
        markSeen: this.query.markSeen,
        struct: this.query.fetchStruct,
        envelope: this.query.fetchEnvelope,
        size: this.query.fetchSize,
    };
    let imapConnection = yield imapManager.getKeepAliveConnectionT(this.session.username, this.session.password);
    let result;
    if (this.query.ids) {
        result = yield messageService.getMessagesByIds(imapConnection, this.params.box, this.query.ids, options);
    } else {
        result = yield messageService.getMessagesBySeqs(imapConnection, this.params.box, this.query.seqs, options);
    }


    this.body = result;
    this.status = 200;
};



module.exports.getMessage = function * () {
    let options = {
        bodies: this.query.bodies,
        markSeen: this.query.markSeen,
        struct: this.query.fetchStruct,
        envelope: this.query.fetchEnvelope,
        size: this.query.fetchSize,
    };

    let imapConnection = yield imapManager.getKeepAliveConnectionT(this.session.username, this.session.password);
    let result = yield messageService.getMessagesByIds(imapConnection, this.params.box, this.params.id, options);

    //Test the result object
    if (!Array.isArray(result)) {
        throw new Error('Bad result format');
    }
    if (result.length === 0) {
        this.body = 'Message not found';
        this.status = 404;
        return;
    } else if (result.length > 1) {
        throw new Error('Invalid server state');
    }

    let message = result[0];
    this.body = message;
    this.status = 200;
};




module.exports.deleteMessage = function * () {
    //Test the message existance
    let imapConnection = yield imapManager.getKeepAliveConnectionT(this.session.username, this.session.password);
    let result = yield messageService.getMessagesByIds(imapConnection, this.params.box, this.params.id);
    if(result.length === 0) {
        this.body = 'Message not found';
        this.status = 404;
        return;
    }
    
    //Delete the message
    if (this.query.realDelete === true) {
        yield messageService.deleteMessage(imapConnection, this.params.box, this.params.id);
    } else {
        yield messageService.moveToTrash(imapConnection, this.params.box, this.params.id);
    }

    this.status = 200;
};