99 lines
3.6 KiB
TypeScript
99 lines
3.6 KiB
TypeScript
import statusCode from "../utils/statusCodes";
|
|
import { Response } from "express";
|
|
import { RoomType } from "../mails/message/saveMessage";
|
|
import { getRoomType } from "../db/message/saveMessage-db";
|
|
import { getLastMsgData, getRoomOwner } from "../db/Room-db";
|
|
import emailManager from "../mails/EmailManager";
|
|
import MailBuilder from "../mails/utils/mailBuilder";
|
|
import { getAddresses } from "../db/utils/mail";
|
|
import { getMembers, getMessages, getRooms } from "../db/api-db";
|
|
import logger from "../system/Logger";
|
|
|
|
function rmUserFromAddrs(addresses: { email: string }[], user: string) {
|
|
let index = addresses.findIndex((a) => a.email == user);
|
|
if (index != -1) {
|
|
addresses.splice(index, 1);
|
|
}
|
|
}
|
|
export default class Room {
|
|
// todo change name of reponse
|
|
static async response(body, res: Response) {
|
|
const { user, roomId, text, html } = body;
|
|
const roomType = (await getRoomType(roomId))[0].room_type;
|
|
|
|
if (roomType === RoomType.DM) {
|
|
const ownerEmail = (await getRoomOwner(roomId))[0].email;
|
|
|
|
const mailBuilder = new MailBuilder();
|
|
mailBuilder.from(user).to(ownerEmail).text(text).html(html);
|
|
|
|
emailManager.getSmtp(user).sendMail(mailBuilder.message);
|
|
res.status(statusCode.OK).send();
|
|
} else if (roomType === RoomType.GROUP || roomType === RoomType.THREAD) {
|
|
const lastMsgData = (await getLastMsgData(roomId))[0];
|
|
console.log(lastMsgData);
|
|
|
|
const mailBuilder = new MailBuilder();
|
|
mailBuilder.inReplySubject(lastMsgData.subject).inReplyTo(lastMsgData.messageID).text(text).html(html);
|
|
|
|
const from = await getAddresses(lastMsgData.fromA);
|
|
let to = lastMsgData.toA ? await getAddresses(lastMsgData.toA) : [];
|
|
let cc = lastMsgData.ccA ? await getAddresses(lastMsgData.ccA) : [];
|
|
|
|
// remove us from recipients
|
|
rmUserFromAddrs(to, user);
|
|
rmUserFromAddrs(from, user);
|
|
|
|
// add sender of previous as recipient if it is not us
|
|
if (from.findIndex((a) => a.email == user) == -1) {
|
|
to = to.concat(from);
|
|
}
|
|
|
|
mailBuilder
|
|
.from(user)
|
|
.to(to.map((a) => a.email))
|
|
.cc(cc.map((a) => a.email));
|
|
|
|
emailManager.getSmtp(user).sendMail(mailBuilder.message);
|
|
res.status(statusCode.OK).send();
|
|
} else {
|
|
res.status(statusCode.FORBIDDEN).send({ error: "Cannot add a new message in a room or a channel." });
|
|
}
|
|
}
|
|
|
|
static async getAll(body, res: Response) {
|
|
const { mailboxId, offset, limit } = body;
|
|
getRooms(mailboxId)
|
|
.then((rooms) => {
|
|
res.status(statusCode.OK).json(rooms);
|
|
})
|
|
.catch((err) => {
|
|
logger.err(err);
|
|
res.status(statusCode.INTERNAL_SERVER_ERROR);
|
|
});
|
|
}
|
|
|
|
static async getMessages(body, res: Response) {
|
|
const { roomId } = body;
|
|
getMessages(roomId)
|
|
.then((messages) => {
|
|
res.status(statusCode.OK).json(messages);
|
|
})
|
|
.catch((err) => {
|
|
logger.err(err);
|
|
res.status(statusCode.INTERNAL_SERVER_ERROR);
|
|
});
|
|
}
|
|
|
|
static async getMembers(body, res) {
|
|
const { roomId } = body;
|
|
getMembers(roomId).then((addresses) => {
|
|
res.status(statusCode.OK).json(addresses);
|
|
}).catch((err) => {
|
|
logger.err(err)
|
|
res.status(statusCode.INTERNAL_SERVER_ERROR);
|
|
});
|
|
}
|
|
|
|
}
|