Add invite endpoint, add validation to invit endpoint

This commit is contained in:
Alex Holliday
2024-07-19 13:05:38 -07:00
parent 52ac2792c0
commit 428e018aff
4 changed files with 55 additions and 1875 deletions

1883
Client/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -25,7 +25,6 @@
"dayjs": "1.11.11",
"joi": "17.13.1",
"jwt-decode": "^4.0.0",
"mjml-react": "^2.0.8",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-redux": "9.1.2",

View File

@@ -8,6 +8,8 @@ const {
recoveryTokenValidation,
newPasswordValidation,
deleteUserParamValidation,
inviteRoleValidation,
inviteBodyValidation,
} = require("../validation/joi");
const logger = require("../utils/logger");
require("dotenv").config();
@@ -214,8 +216,19 @@ const userEditController = async (req, res, next) => {
}
};
const inviteController = async (req, res) => {
return res.status(200).json({ success: true, msg: "Invite sent" });
const inviteController = async (req, res, next) => {
try {
// Only admins can invite
const token = getTokenFromHeaders(req.headers);
const { role } = jwt.decode(token);
await inviteRoleValidation.validateAsync({ roles: role });
await inviteBodyValidation.validateAsync(req.body);
return res.status(200).json({ success: true, msg: "Invite sent" });
} catch (error) {
error.service = SERVICE_NAME;
next(error);
return;
}
};
/**

View File

@@ -1,5 +1,17 @@
const joi = require("joi");
//****************************************
// Custom Validators
//****************************************
const roleValidatior = (role) => (value, helpers) => {
console.log(role);
if (!value.includes(role)) {
throw new joi.ValidationError(`You do not have ${role} authorization`);
}
return value;
};
//****************************************
// Auth
//****************************************
@@ -87,6 +99,20 @@ const deleteUserParamValidation = joi.object({
email: joi.string().email().required(),
});
const inviteRoleValidation = joi.object({
roles: joi.custom(roleValidatior("admin")).required(),
});
const inviteBodyValidation = joi.object({
email: joi.string().trim().email().required().messages({
"string.empty": "Email is required",
"string.email": "Must be a valid email address",
}),
role: joi.string().required().messages({
"string.empty": "Role is required",
}),
});
//****************************************
// Monitors
//****************************************
@@ -195,11 +221,14 @@ const deletePageSpeedCheckParamValidation = joi.object({
});
module.exports = {
roleValidatior,
loginValidation,
registerValidation,
recoveryValidation,
recoveryTokenValidation,
newPasswordValidation,
inviteRoleValidation,
inviteBodyValidation,
getMonitorByIdValidation,
getMonitorsByUserIdValidation,
monitorValidation,