134 lines
4.9 KiB
TypeScript
134 lines
4.9 KiB
TypeScript
import statusCode from "../utils/statusCodes";
|
|
import { Response } from "express";
|
|
import { getMessageUid, getUserOfMailbox } from "../db/utils/mail";
|
|
import emailManager from "../mails/EmailManager";
|
|
import { deleteMessage } from "../db/message/updateMessage-db";
|
|
import logger from "../system/Logger";
|
|
import { deleteRoom, getRoomNbMessage, getRoomOnMessageId } from "../db/Room-db";
|
|
|
|
export default class Message {
|
|
static async addFlag(body, res: Response) {
|
|
const { mailboxId, messageId, flag } = body;
|
|
const uid = (await getMessageUid(messageId))[0]?.uid;
|
|
if (!uid) {
|
|
res.status(statusCode.NOT_FOUND).send({ error: "Message uid not found." });
|
|
}
|
|
|
|
const user = (await getUserOfMailbox(mailboxId))[0]?.user;
|
|
if (!user) {
|
|
res.status(statusCode.NOT_FOUND).send({ error: "Not account for this mailbox." });
|
|
}
|
|
emailManager
|
|
.getImap(user)
|
|
.getMailbox(mailboxId)
|
|
.addFlag(uid.toString(), [flag])
|
|
.then(() => {
|
|
res.status(statusCode.OK).send();
|
|
})
|
|
.catch((err) => {
|
|
console.log(err);
|
|
res.status(statusCode.METHOD_FAILURE).send({ error: err });
|
|
});
|
|
}
|
|
|
|
static async removeFlag(body, res: Response) {
|
|
const { mailboxId, messageId, flag } = body;
|
|
const uid = (await getMessageUid(messageId))[0]?.uid;
|
|
if (!uid) {
|
|
res.status(statusCode.NOT_FOUND).send({ error: "Message uid not found." });
|
|
}
|
|
|
|
const user = (await getUserOfMailbox(mailboxId))[0]?.user;
|
|
if (!user) {
|
|
res.status(statusCode.NOT_FOUND).send({ error: "Not account for this mailbox." });
|
|
}
|
|
emailManager
|
|
.getImap(user)
|
|
.getMailbox(mailboxId)
|
|
.removeFlag(uid.toString(), [flag])
|
|
.then(() => {
|
|
res.status(statusCode.OK).send();
|
|
})
|
|
.catch((err) => {
|
|
console.log(err);
|
|
res.status(statusCode.METHOD_FAILURE).send({ error: err });
|
|
});
|
|
}
|
|
|
|
static deleteRemoteOnly = async (body, res: Response) => {
|
|
const { mailboxId, messageId } = body;
|
|
const uid = (await getMessageUid(messageId))[0]?.uid;
|
|
if (!uid) {
|
|
res.status(statusCode.NOT_FOUND).send({ error: "Message uid not found." });
|
|
}
|
|
|
|
const user = (await getUserOfMailbox(mailboxId))[0]?.user;
|
|
if (!user) {
|
|
res.status(statusCode.NOT_FOUND).send({ error: "Not account for this mailbox." });
|
|
}
|
|
const mailbox = emailManager.getImap(user).getMailbox(mailboxId);
|
|
|
|
// add flag for deletion
|
|
mailbox
|
|
.addFlag(uid.toString(), ["\\Deleted"])
|
|
.then(() => {
|
|
// move message to trash
|
|
mailbox.moveToTrash(uid.toString(), (err) => {
|
|
if (err) {
|
|
logger.err(err);
|
|
res.status(statusCode.METHOD_FAILURE).send({ error: err });
|
|
} else {
|
|
res.status(statusCode.OK).send();
|
|
}
|
|
});
|
|
})
|
|
.catch((err) => {
|
|
logger.log(err);
|
|
res.status(statusCode.METHOD_FAILURE).send({ error: err });
|
|
});
|
|
};
|
|
|
|
static async deleteEverywhere(body, res: Response) {
|
|
const { mailboxId, messageId } = body;
|
|
const uid = (await getMessageUid(messageId))[0]?.uid;
|
|
if (!uid) {
|
|
res.status(statusCode.NOT_FOUND).send({ error: "Message uid not found." });
|
|
return;
|
|
}
|
|
|
|
const user = (await getUserOfMailbox(mailboxId))[0]?.user;
|
|
if (!user) {
|
|
res.status(statusCode.NOT_FOUND).send({ error: "Not account for this mailbox." });
|
|
return;
|
|
}
|
|
|
|
const roomId = (await getRoomOnMessageId(messageId))[0]?.room_id;
|
|
|
|
emailManager
|
|
.getImap(user)
|
|
.getMailbox(mailboxId)
|
|
.removeFlag(uid.toString(), ["\\Deleted"])
|
|
.then(async () => {
|
|
try {
|
|
await deleteMessage(messageId);
|
|
if (roomId) {
|
|
const nbMessage = (await getRoomNbMessage(roomId))[0].nbMessage;
|
|
if (nbMessage > 0) {
|
|
res.status(statusCode.OK).send();
|
|
} else {
|
|
await deleteRoom(roomId);
|
|
res.status(statusCode.OK).json({ deleteRoom: true }).send();
|
|
}
|
|
}
|
|
} catch (err) {
|
|
res.status(statusCode.METHOD_FAILURE).send({ error: err });
|
|
console.log(err);
|
|
}
|
|
})
|
|
.catch((err) => {
|
|
console.log(err);
|
|
res.status(statusCode.METHOD_FAILURE).send({ error: err });
|
|
});
|
|
}
|
|
}
|