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"; 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." }); } 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(), ["\\Deleted"]) .then(() => { deleteMessage(messageId) .then((result) => { // todo check if room is empty res.status(statusCode.OK).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 }); }); } }