diff --git a/Server/controllers/authController.js b/Server/controllers/authController.js index 63e00c186..53fc9c384 100644 --- a/Server/controllers/authController.js +++ b/Server/controllers/authController.js @@ -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); diff --git a/Server/db/MongoDB.js b/Server/db/MongoDB.js index 8f498258d..a59822f98 100644 --- a/Server/db/MongoDB.js +++ b/Server/db/MongoDB.js @@ -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, diff --git a/Server/templates/employeeActivation.mjml b/Server/templates/employeeActivation.mjml index 7fcaebfc2..9d3dc773a 100644 --- a/Server/templates/employeeActivation.mjml +++ b/Server/templates/employeeActivation.mjml @@ -1,3 +1,4 @@ + diff --git a/Server/validation/joi.js b/Server/validation/joi.js index 6be3deea5..a0c5857cb 100644 --- a/Server/validation/joi.js +++ b/Server/validation/joi.js @@ -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`); }