93 lines
3.3 KiB
TypeScript
93 lines
3.3 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";
|
|
|
|
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) => {
|
|
body.flag = "\\Deleted";
|
|
await this.addFlag(body, res);
|
|
};
|
|
|
|
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 });
|
|
});
|
|
}
|
|
}
|