fix deletion back

This commit is contained in:
grimhilt
2023-05-08 00:35:18 +02:00
parent b2b0949353
commit 53c79aebc4
5 changed files with 38 additions and 42 deletions

View File

@@ -1,7 +1,5 @@
import statusCode from "../utils/statusCodes";
import { Response } from "express";
import { getMessageUid, getUserOfMailbox } from "../db/utils/mail";
import emailManager from "../mails/EmailManager";
import logger from "../system/Logger";
import Message from "../mails/message/Message";
import Room from "../mails/room/Room";
@@ -36,76 +34,71 @@ export default class MessageAbl {
}
static async addFlag(body, res: Response) {
await MessageAbl.changeFlag(body, res, false);
await this.changeFlag(body, res, false);
}
static async removeFlag(body, res: Response) {
await MessageAbl.changeFlag(body, res, true);
await this.changeFlag(body, res, true);
}
static deleteRemoteOnly = async (body, res: Response) => {
const { mailboxId, messageId } = body;
const message = new Message().setMessageId(messageId);
static async deleteRemoteUtil(message: Message, mailboxId: number, res, isFull: boolean): Promise<boolean> {
try {
await message.useUid();
} catch (error) {
logger.err(error);
res.status(statusCode.NOT_FOUND).send({ error: "Message uid not found." });
return;
return false;
}
try {
await message.useMailbox(mailboxId);
} catch (error) {
res.status(statusCode.NOT_FOUND).send({ error: "Not account for this mailbox." });
return;
return false;
}
try {
await message.mailbox.addFlag(message.uid.toString(), ["\\Deleted"]);
await message.mailbox.moveToTrash(message.uid.toString(), (err) => {
throw err;
if (err) {
logger.err(err);
}
// throw err;
});
} catch (err) {
logger.log(err);
res.status(statusCode.METHOD_FAILURE).send({ error: err });
return;
return false;
}
res.status(statusCode.OK).send();
if (isFull) {
res.status(statusCode.OK).send();
}
return true;
}
static deleteRemoteOnly = async (body, res: Response) => {
const { mailboxId, messageId } = body;
const message = new Message().setMessageId(messageId);
await this.deleteRemoteUtil(message, mailboxId, res, true);
};
static deleteEverywhere = async (body, res: Response) => {
const { mailboxId, messageId } = body;
const message = new Message().setMessageId(messageId);
await message.useFlags();
try {
await message.useUid();
} catch (error) {
logger.err(error);
res.status(statusCode.NOT_FOUND).send({ error: "Message uid not found." });
await message.useFlags();
} catch (err) {
res.status(statusCode.METHOD_FAILURE).send({ error: err });
logger.err(err);
return;
}
// if message not deleted remotly, delete it
if (!message.isDeleted) {
try {
await message.useMailbox(mailboxId);
} catch (error) {
res.status(statusCode.NOT_FOUND).send({ error: "Not account for this mailbox." });
return;
}
try {
await message.mailbox.addFlag(message.uid.toString(), ["\\Deleted"]);
await message.mailbox.moveToTrash(message.uid.toString(), (err) => {
throw err;
});
} catch (err) {
logger.log(err);
res.status(statusCode.METHOD_FAILURE).send({ error: err });
const success = await this.deleteRemoteUtil(message, mailboxId, res, false);
if (!success) {
return;
}
}