Merge pull request #406 from bluewave-labs/feat/invite-email

Issue invite token and send invitation email on invite request, resolves #393
This commit is contained in:
Alexander Holliday authored and GitHub committed 2024-07-22 09:49:45 -07:00
commit 064e75f862
4 files changed
+32 -3

No files matched your search

+15 -2
View File
@@ -213,10 +213,23 @@ const inviteController = async (req, res, next) => {
try {
// Only admins can invite
const token = getTokenFromHeaders(req.headers);
const { role } = jwt.decode(token);
const { role, firstname } = jwt.decode(token);
await inviteRoleValidation.validateAsync({ roles: role });
await inviteBodyValidation.validateAsync(req.body);
return res.status(200).json({ success: true, msg: "Invite sent" });
const inviteToken = await req.db.requestInviteToken(req, res);
req.emailService.buildAndSendEmail(
"employeeActivationTemplate",
{
name: firstname,
link: `${process.env.CLIENT_HOST}/register/${inviteToken.token}`,
},
req.body.email,
"Welcome to Uptime Monitor"
);
return res
.status(200)
.json({ success: true, msg: "Invite sent", data: inviteToken });
} catch (error) {
error.service = SERVICE_NAME;
next(error);
+16
View File
@@ -4,6 +4,7 @@ const UserModel = require("../models/user");
const Check = require("../models/Check");
const Alert = require("../models/Alert");
const RecoveryToken = require("../models/RecoveryToken");
const InviteToken = require("../models/InviteToken");
const crypto = require("crypto");
const DUPLICATE_KEY_CODE = 11000; // MongoDB error code for duplicate key
const { errorMessages, successMessages } = require("../utils/messages");
@@ -158,6 +159,20 @@ const deleteUser = async (req, res) => {
}
};
const requestInviteToken = async (req, res) => {
try {
await InviteToken.deleteMany({ email: req.body.email });
let inviteToken = new InviteToken({
email: req.body.email,
token: crypto.randomBytes(32).toString("hex"),
});
await inviteToken.save();
return inviteToken;
} catch (error) {
throw error;
}
};
/**
* Request a recovery token
* @async
@@ -614,6 +629,7 @@ module.exports = {
getUserByEmail,
updateUser,
deleteUser,
requestInviteToken,
requestRecoveryToken,
validateRecoveryToken,
resetPassword,
+1
View File
@@ -1,3 +1,4 @@
<!-- name, link -->
<mjml>
<mj-head>
<mj-font name="Roboto" href="https://fonts.googleapis.com/css?family=Roboto:300,500"></mj-font>
-1
View File
@@ -5,7 +5,6 @@ const joi = require("joi");
//****************************************
const roleValidatior = (role) => (value, helpers) => {
console.log(role);
if (!value.includes(role)) {
throw new joi.ValidationError(`You do not have ${role} authorization`);
}