mirror of
https://github.com/bluewave-labs/Checkmate.git
synced 2026-01-10 19:59:39 -06:00
102 lines
2.9 KiB
JavaScript
102 lines
2.9 KiB
JavaScript
const {
|
|
inviteRoleValidation,
|
|
inviteBodyValidation,
|
|
inviteVerifciationBodyValidation,
|
|
} = require("../validation/joi");
|
|
const logger = require("../utils/logger");
|
|
require("dotenv").config();
|
|
const { errorMessages, successMessages } = require("../utils/messages");
|
|
var jwt = require("jsonwebtoken");
|
|
const SERVICE_NAME = "inviteController";
|
|
|
|
const getTokenFromHeaders = (headers) => {
|
|
const authorizationHeader = headers.authorization;
|
|
if (!authorizationHeader) throw new Error("No auth headers");
|
|
|
|
const parts = authorizationHeader.split(" ");
|
|
if (parts.length !== 2 || parts[0] !== "Bearer")
|
|
throw new Error("Invalid auth headers");
|
|
|
|
return parts[1];
|
|
};
|
|
|
|
const inviteController = async (req, res, next) => {
|
|
try {
|
|
// Only admins can invite
|
|
const token = getTokenFromHeaders(req.headers);
|
|
const { role, firstname, teamId } = jwt.decode(token);
|
|
req.body.teamId = teamId;
|
|
try {
|
|
await inviteRoleValidation.validateAsync({ roles: role });
|
|
await inviteBodyValidation.validateAsync(req.body);
|
|
} catch (error) {
|
|
error.status = 422;
|
|
error.service = SERVICE_NAME;
|
|
error.message =
|
|
error.details?.[0]?.message || error.message || "Validation Error";
|
|
next(error);
|
|
return;
|
|
}
|
|
|
|
const inviteToken = await req.db.requestInviteToken({ ...req.body });
|
|
const { clientHost } = req.settingsService.getSettings();
|
|
req.emailService
|
|
.buildAndSendEmail(
|
|
"employeeActivationTemplate",
|
|
{
|
|
name: firstname,
|
|
link: `${clientHost}/register/${inviteToken.token}`,
|
|
},
|
|
req.body.email,
|
|
"Welcome to Uptime Monitor"
|
|
)
|
|
.catch((error) => {
|
|
logger.error("Error sending invite email", {
|
|
service: SERVICE_NAME,
|
|
error: error.message,
|
|
});
|
|
});
|
|
|
|
return res
|
|
.status(200)
|
|
.json({ success: true, msg: "Invite sent", data: inviteToken });
|
|
} catch (error) {
|
|
error.service === undefined ? (error.service = SERVICE_NAME) : null;
|
|
error.method === undefined ? (error.method = "inviteController") : null;
|
|
next(error);
|
|
return;
|
|
}
|
|
};
|
|
|
|
const inviteVerifyController = async (req, res, next) => {
|
|
try {
|
|
await inviteVerifciationBodyValidation.validateAsync(req.body);
|
|
} catch (error) {
|
|
error.status = 422;
|
|
error.service = SERVICE_NAME;
|
|
error.message =
|
|
error.details?.[0]?.message || error.message || "Validation Error";
|
|
next(error);
|
|
return;
|
|
}
|
|
|
|
try {
|
|
const invite = await req.db.getInviteToken(req.body.token);
|
|
res
|
|
.status(200)
|
|
.json({ status: "success", msg: "Invite verified", data: invite });
|
|
} catch (error) {
|
|
error.service === undefined ? (error.service = SERVICE_NAME) : null;
|
|
error.method === undefined
|
|
? (error.method = "inviteVerifyController")
|
|
: null;
|
|
next(error);
|
|
return;
|
|
}
|
|
};
|
|
|
|
module.exports = {
|
|
inviteController,
|
|
inviteVerifyController,
|
|
};
|