mirror of
https://github.com/nodemailer/wildduck.git
synced 2025-03-03 03:13:17 +08:00
v1.11.1
This commit is contained in:
parent
5d58504a09
commit
40f3b5fa06
3 changed files with 90 additions and 11 deletions
|
@ -162,13 +162,17 @@ module.exports = (server, messageHandler) => (mailbox, update, session, callback
|
|||
time: new Date()
|
||||
});
|
||||
|
||||
db.database.collection('messages').insertOne(message, { w: 'majority' }, err => {
|
||||
db.database.collection('messages').insertOne(message, { w: 'majority' }, (err, r) => {
|
||||
if (err) {
|
||||
return cursor.close(() => {
|
||||
updateQuota(() => callback(err));
|
||||
});
|
||||
}
|
||||
|
||||
if (!r || !r.insertedCount) {
|
||||
return processNext();
|
||||
}
|
||||
|
||||
copiedMessages++;
|
||||
copiedStorage += Number(message.size) || 0;
|
||||
|
||||
|
|
|
@ -264,7 +264,7 @@ class MessageHandler {
|
|||
.filter(html => html);
|
||||
}
|
||||
|
||||
this.users.collection('users').updateOne(
|
||||
this.users.collection('users').findOneAndUpdate(
|
||||
{
|
||||
_id: mailboxData.user
|
||||
},
|
||||
|
@ -273,13 +273,29 @@ class MessageHandler {
|
|||
storageUsed: size
|
||||
}
|
||||
},
|
||||
err => {
|
||||
{
|
||||
returnOriginal: false,
|
||||
projection: {
|
||||
storageUsed: true
|
||||
}
|
||||
},
|
||||
(err, r) => {
|
||||
if (err) {
|
||||
return cleanup(err);
|
||||
}
|
||||
|
||||
if (r && r.value) {
|
||||
this.loggelf({
|
||||
short_message: '[QUOTA CHANGE]',
|
||||
_user: mailboxData.user,
|
||||
_inc: size,
|
||||
_storageUsed: r.value.storageUsed,
|
||||
_session: options.session && options.session.id
|
||||
});
|
||||
}
|
||||
|
||||
let rollback = err => {
|
||||
this.users.collection('users').updateOne(
|
||||
this.users.collection('users').findOneAndUpdate(
|
||||
{
|
||||
_id: mailboxData.user
|
||||
},
|
||||
|
@ -288,7 +304,28 @@ class MessageHandler {
|
|||
storageUsed: -size
|
||||
}
|
||||
},
|
||||
() => {
|
||||
{
|
||||
returnOriginal: false,
|
||||
projection: {
|
||||
storageUsed: true
|
||||
}
|
||||
},
|
||||
(...args) => {
|
||||
let r = args && args[1];
|
||||
|
||||
if (r && r.value) {
|
||||
this.loggelf({
|
||||
short_message: '[QUOTA CHANGE]',
|
||||
_user: mailboxData.user,
|
||||
_inc: -size,
|
||||
_storageUsed: r.value.storageUsed,
|
||||
_session: options.session && options.session.id,
|
||||
_rollback: 'yes',
|
||||
_error: err.message,
|
||||
_code: err.code
|
||||
});
|
||||
}
|
||||
|
||||
cleanup(err);
|
||||
}
|
||||
);
|
||||
|
@ -346,11 +383,17 @@ class MessageHandler {
|
|||
|
||||
messageData.thread = thread;
|
||||
|
||||
this.database.collection('messages').insertOne(messageData, { w: 'majority' }, err => {
|
||||
this.database.collection('messages').insertOne(messageData, { w: 'majority' }, (err, r) => {
|
||||
if (err) {
|
||||
return rollback(err);
|
||||
}
|
||||
|
||||
if (!r || !r.insertedCount) {
|
||||
let err = new Error('Failed to store message');
|
||||
err.code = 'StoreError';
|
||||
return rollback(err);
|
||||
}
|
||||
|
||||
let logTime = messageData.meta.time || new Date();
|
||||
if (typeof logTime === 'number') {
|
||||
logTime = new Date(logTime);
|
||||
|
@ -400,10 +443,10 @@ class MessageHandler {
|
|||
});
|
||||
}
|
||||
|
||||
updateQuota(user, inc, callback) {
|
||||
updateQuota(user, inc, options, callback) {
|
||||
inc = inc || {};
|
||||
|
||||
this.users.collection('users').updateOne(
|
||||
this.users.collection('users').findOneAndUpdate(
|
||||
{
|
||||
_id: user
|
||||
},
|
||||
|
@ -412,7 +455,26 @@ class MessageHandler {
|
|||
storageUsed: Number(inc.storageUsed) || 0
|
||||
}
|
||||
},
|
||||
callback
|
||||
{
|
||||
returnOriginal: false,
|
||||
projection: {
|
||||
storageUsed: true
|
||||
}
|
||||
},
|
||||
(...args) => {
|
||||
let r = args && args[1];
|
||||
|
||||
if (r && r.value) {
|
||||
this.loggelf({
|
||||
short_message: '[QUOTA CHANGE]',
|
||||
_user: user,
|
||||
_inc: inc.storageUsed,
|
||||
_storageUsed: r.value.storageUsed,
|
||||
_session: options.session && options.session.id
|
||||
});
|
||||
}
|
||||
callback(...args);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -476,6 +538,7 @@ class MessageHandler {
|
|||
{
|
||||
storageUsed: -messageData.size
|
||||
},
|
||||
options,
|
||||
() => {
|
||||
if (!mailboxData) {
|
||||
// deleted an orphan message
|
||||
|
@ -769,6 +832,12 @@ class MessageHandler {
|
|||
return cursor.close(() => done(err));
|
||||
}
|
||||
|
||||
if (!r || !r.insertedCount) {
|
||||
let err = new Error('Failed to store message');
|
||||
err.code = 'StoreError';
|
||||
return cursor.close(() => done(err));
|
||||
}
|
||||
|
||||
let insertId = r.insertedId;
|
||||
|
||||
// delete old message
|
||||
|
@ -932,6 +1001,12 @@ class MessageHandler {
|
|||
return callback(err);
|
||||
}
|
||||
|
||||
if (!r || !r.insertedCount) {
|
||||
let err = new Error('Failed to store message');
|
||||
err.code = 'StoreError';
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
let insertId = r.insertedId;
|
||||
|
||||
let entry = {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "wildduck",
|
||||
"version": "1.11.0",
|
||||
"version": "1.11.1",
|
||||
"description": "IMAP/POP3 server built with Node.js and MongoDB",
|
||||
"main": "server.js",
|
||||
"scripts": {
|
||||
|
@ -16,7 +16,7 @@
|
|||
"author": "Andris Reinman",
|
||||
"license": "EUPL-1.1+",
|
||||
"devDependencies": {
|
||||
"ajv": "6.5.5",
|
||||
"ajv": "6.6.1",
|
||||
"apidoc": "0.17.7",
|
||||
"browserbox": "0.9.1",
|
||||
"chai": "4.2.0",
|
||||
|
|
Loading…
Reference in a new issue