mirror of
https://github.com/nodemailer/wildduck.git
synced 2025-09-15 01:24:56 +08:00
updated api
This commit is contained in:
parent
7c7a8a84e8
commit
6044abdeba
2 changed files with 59 additions and 33 deletions
|
@ -16,11 +16,11 @@ module.exports = (db, server, messageHandler) => {
|
|||
const schema = Joi.object().keys({
|
||||
user: Joi.string().hex().lowercase().length(24).required(),
|
||||
mailbox: Joi.string().hex().lowercase().length(24).required(),
|
||||
limit: Joi.number().default(20).min(1).max(250),
|
||||
order: Joi.any().allow(['asc', 'desc']).default('desc'),
|
||||
next: Joi.string().alphanum().max(100),
|
||||
prev: Joi.string().alphanum().max(100),
|
||||
page: Joi.number().default(1)
|
||||
limit: Joi.number().empty('').default(20).min(1).max(250),
|
||||
order: Joi.any().empty('').allow(['asc', 'desc']).default('desc'),
|
||||
next: Joi.string().empty('').alphanum().max(100),
|
||||
previous: Joi.string().empty('').alphanum().max(100),
|
||||
page: Joi.number().empty('').default(1)
|
||||
});
|
||||
|
||||
req.query.user = req.params.user;
|
||||
|
@ -44,7 +44,7 @@ module.exports = (db, server, messageHandler) => {
|
|||
let limit = result.value.limit;
|
||||
let page = result.value.page;
|
||||
let pageNext = result.value.next;
|
||||
let pagePrev = result.value.prev;
|
||||
let pagePrevious = result.value.previous;
|
||||
let sortAscending = result.value.order === 'asc';
|
||||
|
||||
db.database.collection('mailboxes').findOne({
|
||||
|
@ -106,8 +106,8 @@ module.exports = (db, server, messageHandler) => {
|
|||
|
||||
if (pageNext) {
|
||||
opts.next = pageNext;
|
||||
} else if (pagePrev) {
|
||||
opts.prev = pagePrev;
|
||||
} else if (pagePrevious) {
|
||||
opts.previous = pagePrevious;
|
||||
}
|
||||
|
||||
MongoPaging.find(db.users.collection('messages'), opts, (err, result) => {
|
||||
|
@ -142,7 +142,9 @@ module.exports = (db, server, messageHandler) => {
|
|||
total,
|
||||
page,
|
||||
prev: prevUrl,
|
||||
previousCursor: result.hasPrevious ? result.previous : false,
|
||||
next: nextUrl,
|
||||
nextCursor: result.hasNext ? result.next : false,
|
||||
specialUse: mailboxData.specialUse,
|
||||
results: (result.results || []).map(messageData => {
|
||||
let parsedHeader = (messageData.mimeTree && messageData.mimeTree.parsedHeader) || {};
|
||||
|
@ -351,13 +353,18 @@ module.exports = (db, server, messageHandler) => {
|
|||
user: Joi.string().hex().lowercase().length(24).required(),
|
||||
mailbox: Joi.string().hex().lowercase().length(24).required(),
|
||||
message: Joi.number().min(1).required(),
|
||||
replaceCidLinks: Joi.boolean().truthy(['Y', 'true', 'yes', 1]).default(false)
|
||||
replaceCidLinks: Joi.boolean().truthy(['Y', 'true', 'yes', 1]).default(false),
|
||||
markAsSeen: Joi.boolean().truthy(['Y', 'true', 'yes', 1]).default(false)
|
||||
});
|
||||
|
||||
if (req.query.replaceCidLinks) {
|
||||
req.params.replaceCidLinks = req.query.replaceCidLinks;
|
||||
}
|
||||
|
||||
if (req.query.markAsSeen) {
|
||||
req.params.markAsSeen = req.query.markAsSeen;
|
||||
}
|
||||
|
||||
const result = Joi.validate(req.params, schema, {
|
||||
abortEarly: false,
|
||||
convert: true
|
||||
|
@ -474,30 +481,49 @@ module.exports = (db, server, messageHandler) => {
|
|||
);
|
||||
}
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
id: message,
|
||||
from: from[0],
|
||||
replyTo,
|
||||
to,
|
||||
cc,
|
||||
subject: messageData.subject,
|
||||
messageId: messageData.msgid,
|
||||
date: messageData.hdate.toISOString(),
|
||||
list,
|
||||
expires,
|
||||
seen: !messageData.unseen,
|
||||
deleted: !messageData.undeleted,
|
||||
flagged: messageData.flagged,
|
||||
draft: messageData.draft,
|
||||
html: messageData.html,
|
||||
attachments: (messageData.attachments || []).map(attachment => {
|
||||
attachment.url = server.router.render('attachment', { user, mailbox, message, attachment: attachment.id });
|
||||
return attachment;
|
||||
}),
|
||||
raw: server.router.render('attachment', { user, mailbox, message })
|
||||
let ensureSeen = done => {
|
||||
if (!result.value.markAsSeen || !messageData.unseen) {
|
||||
return done();
|
||||
}
|
||||
// we need to mark this message as seen
|
||||
return messageHandler.update(user, mailbox, message, { seen: true }, err => {
|
||||
if (err) {
|
||||
res.json({
|
||||
error: err.message
|
||||
});
|
||||
return next();
|
||||
}
|
||||
messageData.unseen = false;
|
||||
done();
|
||||
});
|
||||
};
|
||||
|
||||
ensureSeen(() => {
|
||||
res.json({
|
||||
success: true,
|
||||
id: message,
|
||||
from: from[0],
|
||||
replyTo,
|
||||
to,
|
||||
cc,
|
||||
subject: messageData.subject,
|
||||
messageId: messageData.msgid,
|
||||
date: messageData.hdate.toISOString(),
|
||||
list,
|
||||
expires,
|
||||
seen: !messageData.unseen,
|
||||
deleted: !messageData.undeleted,
|
||||
flagged: messageData.flagged,
|
||||
draft: messageData.draft,
|
||||
html: messageData.html,
|
||||
attachments: (messageData.attachments || []).map(attachment => {
|
||||
attachment.url = server.router.render('attachment', { user, mailbox, message, attachment: attachment.id });
|
||||
return attachment;
|
||||
}),
|
||||
raw: server.router.render('raw', { user, mailbox, message })
|
||||
});
|
||||
return next();
|
||||
});
|
||||
return next();
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -1141,7 +1141,7 @@ class MessageHandler {
|
|||
uid: messageData.uid,
|
||||
flags: messageData.flags,
|
||||
message: messageData._id,
|
||||
unseenChange: !!changes.unseen
|
||||
unseenChange: !!changes.seen
|
||||
});
|
||||
|
||||
if (notifyEntries.length >= consts.BULK_BATCH_SIZE) {
|
||||
|
|
Loading…
Add table
Reference in a new issue