From ac161950eba51049f0a3cc03788eecd7d50cf3d7 Mon Sep 17 00:00:00 2001 From: M M Date: Wed, 17 Jul 2024 14:21:25 -0700 Subject: [PATCH 1/7] Added validation to speedcheck route. --- Server/routes/pageSpeedCheckRoute.js | 74 ++++++++++++++++++++-------- 1 file changed, 53 insertions(+), 21 deletions(-) diff --git a/Server/routes/pageSpeedCheckRoute.js b/Server/routes/pageSpeedCheckRoute.js index 72f20d1ad..e62c45439 100644 --- a/Server/routes/pageSpeedCheckRoute.js +++ b/Server/routes/pageSpeedCheckRoute.js @@ -1,54 +1,86 @@ const router = require("express").Router(); +const Joi = require("joi"); const { verifyOwnership } = require("../middleware/verifyOwnership"); const Monitor = require("../models/Monitor"); -const { - getPageSpeedChecks, - createPageSpeedCheck, - deletePageSpeedCheck, -} = require("../controllers/pageSpeedCheckController"); +const { createPageSpeedCheck, getPageSpeedChecks, deletePageSpeedCheck } = require("../controllers/pageSpeedCheckController"); +const { getMonitorByIdValidation } = require("../validation/joi"); /** - * @route POST /:monitorId + * @route POST /pagespeed/:monitorId * @description Create a new PageSpeedCheck for a monitor * @access Private * @param {string} monitorId - The ID of the monitor * @middleware verifyOwnership - Ensures the user owns the monitor */ - router.post( - "/:monitorId", - verifyOwnership(Monitor, "monitorId"), - createPageSpeedCheck + "/pagespeed/:monitorId", + verifyOwnership(Monitor, "monitorId"), + async (req, res, next) => { + try { + // Validate monitorId parameter + const { error } = getMonitorByIdValidation.validate(req.params); + if (error) { + return res.status(400).json({ error: error.details[0].message }); + } + + next(); + } catch (error) { + next(error); + } + }, + createPageSpeedCheck ); - /** - * @route GET /:monitorId + * @route GET /pagespeed/:monitorId * @description Get all PageSpeedChecks for a monitor * @access Private * @param {string} monitorId - The ID of the monitor * @middleware verifyOwnership - Ensures the user owns the monitor */ - router.get( - "/:monitorId", - verifyOwnership(Monitor, "monitorId"), - getPageSpeedChecks + "/pagespeed/:monitorId", + verifyOwnership(Monitor, "monitorId"), + async (req, res, next) => { + try { + // Validate monitorId parameter + const { error } = getMonitorByIdValidation.validate(req.params); + if (error) { + return res.status(400).json({ error: error.details[0].message }); + } + + next(); + } catch (error) { + next(error); + } + }, + getPageSpeedChecks ); /** - * @route POST /delete/:monitorId + * @route DELETE /pagespeed/:monitorId * @description Delete all PageSpeedChecks for a monitor * @access Private * @param {string} monitorId - The ID of the monitor * @middleware verifyOwnership - Ensures the user owns the monitor */ - router.delete( - "/:monitorId", + "/pagespeed/:monitorId", verifyOwnership(Monitor, "monitorId"), - deletePageSpeedCheck + async (req, res, next) => { + try { + // Validate monitorId parameter + const { error } = getMonitorByIdValidation.validate(req.params); + if (error) { + return res.status(400).json({ error: error.details[0].message }); + } + + next(); + } catch (error) { + next(error); + } + }, + deletePageSpeedCheck ); - module.exports = router; From 4e659072f2887d20b3aa9df5d91d34fa10c9d5b4 Mon Sep 17 00:00:00 2001 From: M M Date: Wed, 17 Jul 2024 15:00:06 -0700 Subject: [PATCH 2/7] Fixed pagespeedcheck route. --- .../controllers/pageSpeedCheckController.js | 20 +++++++- Server/routes/pageSpeedCheckRoute.js | 48 ++----------------- 2 files changed, 23 insertions(+), 45 deletions(-) diff --git a/Server/controllers/pageSpeedCheckController.js b/Server/controllers/pageSpeedCheckController.js index 29cc10f95..c561ff02e 100644 --- a/Server/controllers/pageSpeedCheckController.js +++ b/Server/controllers/pageSpeedCheckController.js @@ -1,6 +1,7 @@ const PageSpeedCheck = require("../models/PageSpeedCheck"); const { successMessages } = require("../utils/messages"); const SERVICE_NAME = "pagespeed"; +const { getMonitorByIdValidation } = require("../validation/joi"); /** * Gets all PageSpeedChecks for a monitor @@ -12,9 +13,14 @@ const SERVICE_NAME = "pagespeed"; */ const getPageSpeedChecks = async (req, res, next) => { try { + // Validate monitorId parameter + const { error } = getMonitorByIdValidation.validate(req.params); + if (error) { + return res.status(400).json({ error: error.details[0].message }); + } + return res.status(200).json({ msg: "Hit getPageSpeedChecks" }); } catch (error) { - error.service = SERVICE_NAME; next(error); } }; @@ -29,6 +35,12 @@ const getPageSpeedChecks = async (req, res, next) => { */ const createPageSpeedCheck = async (req, res, next) => { try { + // Validate monitorId parameter + const { error } = getMonitorByIdValidation.validate(req.params); + if (error) { + return res.status(400).json({ error: error.details[0].message }); + } + return res.status(200).json({ msg: "Hit createPageSpeedCheck" }); } catch (error) { error.service = SERVICE_NAME; @@ -46,6 +58,12 @@ const createPageSpeedCheck = async (req, res, next) => { */ const deletePageSpeedCheck = async (req, res, next) => { try { + // Validate monitorId parameter + const { error } = getMonitorByIdValidation.validate(req.params); + if (error) { + return res.status(400).json({ error: error.details[0].message }); + } + return res.status(200).json({ msg: "Hit deletePageSpeedCheck" }); } catch (error) { error.service = SERVICE_NAME; diff --git a/Server/routes/pageSpeedCheckRoute.js b/Server/routes/pageSpeedCheckRoute.js index e62c45439..803012d95 100644 --- a/Server/routes/pageSpeedCheckRoute.js +++ b/Server/routes/pageSpeedCheckRoute.js @@ -1,9 +1,8 @@ const router = require("express").Router(); -const Joi = require("joi"); const { verifyOwnership } = require("../middleware/verifyOwnership"); const Monitor = require("../models/Monitor"); const { createPageSpeedCheck, getPageSpeedChecks, deletePageSpeedCheck } = require("../controllers/pageSpeedCheckController"); -const { getMonitorByIdValidation } = require("../validation/joi"); + /** * @route POST /pagespeed/:monitorId @@ -15,20 +14,7 @@ const { getMonitorByIdValidation } = require("../validation/joi"); router.post( "/pagespeed/:monitorId", verifyOwnership(Monitor, "monitorId"), - async (req, res, next) => { - try { - // Validate monitorId parameter - const { error } = getMonitorByIdValidation.validate(req.params); - if (error) { - return res.status(400).json({ error: error.details[0].message }); - } - - next(); - } catch (error) { - next(error); - } - }, - createPageSpeedCheck + createPageSpeedCheck ); /** @@ -41,20 +27,7 @@ router.post( router.get( "/pagespeed/:monitorId", verifyOwnership(Monitor, "monitorId"), - async (req, res, next) => { - try { - // Validate monitorId parameter - const { error } = getMonitorByIdValidation.validate(req.params); - if (error) { - return res.status(400).json({ error: error.details[0].message }); - } - - next(); - } catch (error) { - next(error); - } - }, - getPageSpeedChecks + getPageSpeedChecks ); /** @@ -67,20 +40,7 @@ router.get( router.delete( "/pagespeed/:monitorId", verifyOwnership(Monitor, "monitorId"), - async (req, res, next) => { - try { - // Validate monitorId parameter - const { error } = getMonitorByIdValidation.validate(req.params); - if (error) { - return res.status(400).json({ error: error.details[0].message }); - } - - next(); - } catch (error) { - next(error); - } - }, - deletePageSpeedCheck + deletePageSpeedCheck ); module.exports = router; From 7d179042c2c75089b831c0ea6b2c5336f95f0b9e Mon Sep 17 00:00:00 2001 From: M M Date: Wed, 17 Jul 2024 15:09:46 -0700 Subject: [PATCH 3/7] Defined a new validation schema in the joi. --- Server/validation/joi.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Server/validation/joi.js b/Server/validation/joi.js index 8144a7fb4..936a5e499 100644 --- a/Server/validation/joi.js +++ b/Server/validation/joi.js @@ -145,6 +145,13 @@ const deleteChecksParamValidation = joi.object({ monitorId: joi.string().required(), }); +//**************************************** +// PageSpeedCheckValidation +//**************************************** +const pageSpeedCheckValidation = joi.object({ + monitorId: joi.string().required(), +}); + module.exports = { loginValidation, registerValidation, @@ -169,4 +176,5 @@ module.exports = { getChecksParamValidation, deleteChecksParamValidation, deleteUserParamValidation, + pageSpeedCheckValidation, }; From 683006ae8471105576eec9ddf34ac7e297044460 Mon Sep 17 00:00:00 2001 From: M M Date: Wed, 17 Jul 2024 15:11:58 -0700 Subject: [PATCH 4/7] Used proper name for validation schema in speed check controller. --- Server/controllers/pageSpeedCheckController.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Server/controllers/pageSpeedCheckController.js b/Server/controllers/pageSpeedCheckController.js index c561ff02e..58638ce38 100644 --- a/Server/controllers/pageSpeedCheckController.js +++ b/Server/controllers/pageSpeedCheckController.js @@ -1,7 +1,7 @@ const PageSpeedCheck = require("../models/PageSpeedCheck"); const { successMessages } = require("../utils/messages"); const SERVICE_NAME = "pagespeed"; -const { getMonitorByIdValidation } = require("../validation/joi"); +const { pageSpeedCheckValidation } = require("../validation/joi"); /** * Gets all PageSpeedChecks for a monitor @@ -14,7 +14,7 @@ const { getMonitorByIdValidation } = require("../validation/joi"); const getPageSpeedChecks = async (req, res, next) => { try { // Validate monitorId parameter - const { error } = getMonitorByIdValidation.validate(req.params); + const { error } = pageSpeedCheckValidation.validate(req.params); if (error) { return res.status(400).json({ error: error.details[0].message }); } @@ -36,7 +36,7 @@ const getPageSpeedChecks = async (req, res, next) => { const createPageSpeedCheck = async (req, res, next) => { try { // Validate monitorId parameter - const { error } = getMonitorByIdValidation.validate(req.params); + const { error } = pageSpeedCheckValidation.validate(req.params); if (error) { return res.status(400).json({ error: error.details[0].message }); } @@ -59,7 +59,7 @@ const createPageSpeedCheck = async (req, res, next) => { const deletePageSpeedCheck = async (req, res, next) => { try { // Validate monitorId parameter - const { error } = getMonitorByIdValidation.validate(req.params); + const { error } = pageSpeedCheckValidation.validate(req.params); if (error) { return res.status(400).json({ error: error.details[0].message }); } From fc09aee0945ea8414bd81694edf24987cca7485e Mon Sep 17 00:00:00 2001 From: M M Date: Wed, 17 Jul 2024 15:12:51 -0700 Subject: [PATCH 5/7] Used validateAsync instead of validate. --- Server/controllers/pageSpeedCheckController.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Server/controllers/pageSpeedCheckController.js b/Server/controllers/pageSpeedCheckController.js index 58638ce38..68303e8d9 100644 --- a/Server/controllers/pageSpeedCheckController.js +++ b/Server/controllers/pageSpeedCheckController.js @@ -14,7 +14,7 @@ const { pageSpeedCheckValidation } = require("../validation/joi"); const getPageSpeedChecks = async (req, res, next) => { try { // Validate monitorId parameter - const { error } = pageSpeedCheckValidation.validate(req.params); + const { error } = pageSpeedCheckValidation.validateAsync(req.params); if (error) { return res.status(400).json({ error: error.details[0].message }); } @@ -36,7 +36,7 @@ const getPageSpeedChecks = async (req, res, next) => { const createPageSpeedCheck = async (req, res, next) => { try { // Validate monitorId parameter - const { error } = pageSpeedCheckValidation.validate(req.params); + const { error } = pageSpeedCheckValidation.validateAsync(req.params); if (error) { return res.status(400).json({ error: error.details[0].message }); } @@ -59,7 +59,7 @@ const createPageSpeedCheck = async (req, res, next) => { const deletePageSpeedCheck = async (req, res, next) => { try { // Validate monitorId parameter - const { error } = pageSpeedCheckValidation.validate(req.params); + const { error } = pageSpeedCheckValidation.validateAsync(req.params); if (error) { return res.status(400).json({ error: error.details[0].message }); } From 20456fe1213582a4c046ad85da04828bcd992793 Mon Sep 17 00:00:00 2001 From: M M Date: Wed, 17 Jul 2024 15:19:27 -0700 Subject: [PATCH 6/7] Changed names for joi. --- Server/validation/joi.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Server/validation/joi.js b/Server/validation/joi.js index 936a5e499..b559479e9 100644 --- a/Server/validation/joi.js +++ b/Server/validation/joi.js @@ -148,7 +148,15 @@ const deleteChecksParamValidation = joi.object({ //**************************************** // PageSpeedCheckValidation //**************************************** -const pageSpeedCheckValidation = joi.object({ +const getPageSpeedCheckParamValidation = joi.object({ + monitorId: joi.string().required(), +}); + +const createPageSpeedCheckParamValidation = joi.object({ + monitorId: joi.string().required(), +}); + +const deletePageSpeedCheckParamValidation = joi.object({ monitorId: joi.string().required(), }); @@ -176,5 +184,7 @@ module.exports = { getChecksParamValidation, deleteChecksParamValidation, deleteUserParamValidation, - pageSpeedCheckValidation, + getPageSpeedCheckParamValidation, + createPageSpeedCheckParamValidation, + deletePageSpeedCheckParamValidation, }; From 7f27fa2507874aca4c4e762e973c328dccf4d72a Mon Sep 17 00:00:00 2001 From: M M Date: Wed, 17 Jul 2024 15:23:06 -0700 Subject: [PATCH 7/7] Updated controller with proper names. --- .../controllers/pageSpeedCheckController.js | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/Server/controllers/pageSpeedCheckController.js b/Server/controllers/pageSpeedCheckController.js index 68303e8d9..8da1b39d2 100644 --- a/Server/controllers/pageSpeedCheckController.js +++ b/Server/controllers/pageSpeedCheckController.js @@ -1,7 +1,11 @@ const PageSpeedCheck = require("../models/PageSpeedCheck"); const { successMessages } = require("../utils/messages"); const SERVICE_NAME = "pagespeed"; -const { pageSpeedCheckValidation } = require("../validation/joi"); +const { + getPageSpeedCheckParamValidation, + createPageSpeedCheckParamValidation, + deletePageSpeedCheckParamValidation, +} = require("../validation/joi"); /** * Gets all PageSpeedChecks for a monitor @@ -14,13 +18,13 @@ const { pageSpeedCheckValidation } = require("../validation/joi"); const getPageSpeedChecks = async (req, res, next) => { try { // Validate monitorId parameter - const { error } = pageSpeedCheckValidation.validateAsync(req.params); - if (error) { - return res.status(400).json({ error: error.details[0].message }); - } + await getPageSpeedCheckParamValidation.validateAsync(req.params); return res.status(200).json({ msg: "Hit getPageSpeedChecks" }); } catch (error) { + if (error.isJoi) { + return res.status(400).json({ error: error.details[0].message }); + } next(error); } }; @@ -36,13 +40,13 @@ const getPageSpeedChecks = async (req, res, next) => { const createPageSpeedCheck = async (req, res, next) => { try { // Validate monitorId parameter - const { error } = pageSpeedCheckValidation.validateAsync(req.params); - if (error) { - return res.status(400).json({ error: error.details[0].message }); - } + await createPageSpeedCheckParamValidation.validateAsync(req.params); return res.status(200).json({ msg: "Hit createPageSpeedCheck" }); } catch (error) { + if (error.isJoi) { + return res.status(400).json({ error: error.details[0].message }); + } error.service = SERVICE_NAME; next(error); } @@ -59,13 +63,13 @@ const createPageSpeedCheck = async (req, res, next) => { const deletePageSpeedCheck = async (req, res, next) => { try { // Validate monitorId parameter - const { error } = pageSpeedCheckValidation.validateAsync(req.params); - if (error) { - return res.status(400).json({ error: error.details[0].message }); - } + await deletePageSpeedCheckParamValidation.validateAsync(req.params); return res.status(200).json({ msg: "Hit deletePageSpeedCheck" }); } catch (error) { + if (error.isJoi) { + return res.status(400).json({ error: error.details[0].message }); + } error.service = SERVICE_NAME; next(error); }