This commit is contained in:
Andris Reinman 2019-03-26 14:34:55 +02:00
parent 26f75ff081
commit 3d95b1355b
6 changed files with 24 additions and 27 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
define({ "name": "wildduck", "version": "1.0.0", "description": "WildDuck API docs", "title": "WildDuck API", "url": "https://api.wildduck.email", "sampleUrl": false, "defaultVersion": "0.0.0", "apidoc": "0.3.0", "generator": { "name": "apidoc", "time": "2019-03-26T12:14:03.120Z", "url": "http://apidocjs.com", "version": "0.17.7" } });
define({ "name": "wildduck", "version": "1.0.0", "description": "WildDuck API docs", "title": "WildDuck API", "url": "https://api.wildduck.email", "sampleUrl": false, "defaultVersion": "0.0.0", "apidoc": "0.3.0", "generator": { "name": "apidoc", "time": "2019-03-26T12:34:49.315Z", "url": "http://apidocjs.com", "version": "0.17.7" } });

View file

@ -1 +1 @@
{ "name": "wildduck", "version": "1.0.0", "description": "WildDuck API docs", "title": "WildDuck API", "url": "https://api.wildduck.email", "sampleUrl": false, "defaultVersion": "0.0.0", "apidoc": "0.3.0", "generator": { "name": "apidoc", "time": "2019-03-26T12:14:03.120Z", "url": "http://apidocjs.com", "version": "0.17.7" } }
{ "name": "wildduck", "version": "1.0.0", "description": "WildDuck API docs", "title": "WildDuck API", "url": "https://api.wildduck.email", "sampleUrl": false, "defaultVersion": "0.0.0", "apidoc": "0.3.0", "generator": { "name": "apidoc", "time": "2019-03-26T12:34:49.315Z", "url": "http://apidocjs.com", "version": "0.17.7" } }

View file

@ -1067,6 +1067,11 @@ module.exports = (db, server, messageHandler, userHandler, storageHandler) => {
* @apiSuccess {Object} contentType.params An object with Content-Type params as key-value pairs
* @apiSuccess {String} metaData JSON formatted custom metadata object set for this message
* @apiSuccess {Object} reference Referenced message info
* @apiSuccess {Object[]} [files] List of files added to this message as attachments. Applies to Drafts, normal messages do not have this property. Needed to prevent uploading the same attachment every time a draft is updated
* @apiSuccess {String} files.id File ID
* @apiSuccess {String} files.filename Filename of the attached file
* @apiSuccess {String} files.contentType MIME type
* @apiSuccess {Number} files.size MIME type
*
* @apiError error Description of the error
*
@ -1384,6 +1389,10 @@ module.exports = (db, server, messageHandler, userHandler, storageHandler) => {
metaData: messageData.meta.custom || '{}'
};
if (messageData.meta.files && messageData.meta.files.length) {
response.files = messageData.meta.files;
}
if (messageData.verificationResults) {
response.verificationResults = messageData.verificationResults;
}
@ -1943,7 +1952,7 @@ module.exports = (db, server, messageHandler, userHandler, storageHandler) => {
* @apiParam {Object[]} [headers] Custom headers for the message. If reference message is set then In-Reply-To and References headers are set automaticall y
* @apiParam {String} headers.key Header key ('X-Mailer')
* @apiParam {String} headers.value Header value ('My Awesome Mailing Service')
* @apiParam {String[]} [files] Attachments as storage file IDs. These attachments are also listed to message metaData.attachedFiles array
* @apiParam {String[]} [files] Attachments as storage file IDs. NB! When retrieving message info then an array of objects is returned. When uploading a message then an array of IDs is used.
* @apiParam {Object[]} [attachments] Attachments for the message
* @apiParam {String} attachments.content Base64 encoded attachment content
* @apiParam {String} [attachments.filename] Attachment filename
@ -2202,10 +2211,9 @@ module.exports = (db, server, messageHandler, userHandler, storageHandler) => {
return next();
}
let metaData;
if (result.value.metaData) {
try {
metaData = JSON.parse(result.value.metaData);
let metaData = JSON.parse(result.value.metaData);
if (!metaData || typeof metaData !== 'object') {
throw new Error('Not an object');
}
@ -2229,6 +2237,7 @@ module.exports = (db, server, messageHandler, userHandler, storageHandler) => {
let mailbox = new ObjectID(result.value.mailbox);
let raw = result.value.raw;
let date = result.value.date || new Date();
let files = [];
let mailboxData;
try {
@ -2299,14 +2308,8 @@ module.exports = (db, server, messageHandler, userHandler, storageHandler) => {
try {
let fileData = await storageHandler.get(userData._id, new ObjectID(file));
if (fileData) {
if (!metaData) {
metaData = {};
}
if (!metaData.attachedFiles) {
metaData.attachedFiles = [];
}
extraAttachments.push(fileData);
metaData.attachedFiles.push({
files.push({
id: fileData.id.toString(),
filename: fileData.filename,
contentType: fileData.contentType,
@ -2399,7 +2402,7 @@ module.exports = (db, server, messageHandler, userHandler, storageHandler) => {
origin: result.value.ip || '127.0.0.1',
transtype: 'UPLOAD',
time: date,
custom: (metaData ? JSON.stringify(metaData) : result.value.metaData) || '',
custom: result.value.metaData || '',
reference: referencedMessage
? {
action: result.value.reference.action,
@ -2407,7 +2410,8 @@ module.exports = (db, server, messageHandler, userHandler, storageHandler) => {
id: result.value.reference.id
}
: false,
envelope
envelope,
files
},
session: result.value.session,
date,
@ -2696,7 +2700,7 @@ module.exports = (db, server, messageHandler, userHandler, storageHandler) => {
* @apiParam {String} user ID of the User
* @apiParam {String} mailbox ID of the Mailbox
* @apiParam {Number} message Message ID
* @apiParam {Boolean} deleteFiles If true then deletes attachment files listed in metaData.attachedFiles array
* @apiParam {Boolean} deleteFiles If true then deletes attachment files listed in metaData.files array
*
* @apiSuccess {Boolean} success Indicates successful response
* @apiSuccess {String} queueId Message ID in outbound queue
@ -2834,13 +2838,6 @@ module.exports = (db, server, messageHandler, userHandler, storageHandler) => {
return next();
}
let metaData;
try {
metaData = messageData.meta.custom ? JSON.parse(messageData.meta.custom) : false;
} catch (err) {
// ignore
}
let envelope = messageData.meta.envelope;
if (!envelope) {
// fetch envelope data from message headers
@ -2936,8 +2933,8 @@ module.exports = (db, server, messageHandler, userHandler, storageHandler) => {
}
}
if (deleteFiles && metaData && metaData.attachedFiles) {
for (let fileData of metaData.attachedFiles) {
if (deleteFiles && messageData.meta.files && messageData.meta.files.length) {
for (let fileData of messageData.meta.files) {
try {
await storageHandler.delete(userData._id, new ObjectID(fileData.id));
} catch (err) {

View file

@ -1,6 +1,6 @@
{
"name": "wildduck",
"version": "1.16.0",
"version": "1.16.1",
"description": "IMAP/POP3 server built with Node.js and MongoDB",
"main": "server.js",
"scripts": {