From d7d6effdda6c00dffe783d9d080595a89567c0c8 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Tue, 2 Jul 2024 10:38:02 -0700 Subject: [PATCH 1/2] Add route and controller --- Server/controllers/authController.js | 19 +++++++++++++++++++ Server/db/MongoDB.js | 10 ++++++++++ Server/routes/authRoute.js | 2 ++ 3 files changed, 31 insertions(+) diff --git a/Server/controllers/authController.js b/Server/controllers/authController.js index 16eb6eb00..be39851ab 100644 --- a/Server/controllers/authController.js +++ b/Server/controllers/authController.js @@ -151,6 +151,24 @@ const userEditController = async (req, res, next) => { } }; +/** + * Checks to see if an admin account exists + * @async + * @param {Express.Request} req + * @param {Express.Response} res + * @returns {Promise} + */ + +const checkAdminController = async (req, res) => { + try { + await req.db.checkAdmin(req, res); + } catch (error) { + error.service = SERVICE_NAME; + next(error); + return; + } +}; + /** * Returns a recovery token * @async @@ -238,6 +256,7 @@ module.exports = { registerController, loginController, userEditController, + checkAdminController, recoveryRequestController, validateRecoveryTokenController, resetPasswordController, diff --git a/Server/db/MongoDB.js b/Server/db/MongoDB.js index ef53863ee..0b7aa0c87 100644 --- a/Server/db/MongoDB.js +++ b/Server/db/MongoDB.js @@ -163,6 +163,15 @@ const resetPassword = async (req, res) => { } }; +const checkAdmin = async (req, res) => { + try { + const admin = await UserModel.findOne({ role: "admin" }); + console.log(admin); + } catch (error) { + throw error; + } +}; + //**************************************** // Monitors //**************************************** @@ -502,6 +511,7 @@ module.exports = { requestRecoveryToken, validateRecoveryToken, resetPassword, + checkAdmin, getAllMonitors, getMonitorById, getMonitorsByUserId, diff --git a/Server/routes/authRoute.js b/Server/routes/authRoute.js index 1049659fa..492f0d534 100644 --- a/Server/routes/authRoute.js +++ b/Server/routes/authRoute.js @@ -8,12 +8,14 @@ const { recoveryRequestController, validateRecoveryTokenController, resetPasswordController, + checkAdminController, } = require("../controllers/authController"); //Auth routes router.post("/register", registerController); router.post("/login", loginController); router.post("/user/:userId", verifyJWT, userEditController); +router.get("/users/admin", checkAdminController); //Recovery routes router.post("/recovery/request", recoveryRequestController); From ec632812022503ca132a184c6b2773d58afa87b4 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Tue, 2 Jul 2024 10:45:38 -0700 Subject: [PATCH 2/2] Return admin account status on check --- Server/controllers/authController.js | 7 ++++++- Server/db/MongoDB.js | 5 ++++- Server/utils/messages.js | 1 + Server/validation/joi.js | 2 ++ 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Server/controllers/authController.js b/Server/controllers/authController.js index be39851ab..bbf676e8a 100644 --- a/Server/controllers/authController.js +++ b/Server/controllers/authController.js @@ -161,7 +161,12 @@ const userEditController = async (req, res, next) => { const checkAdminController = async (req, res) => { try { - await req.db.checkAdmin(req, res); + const adminExists = await req.db.checkAdmin(req, res); + return res.status(200).json({ + success: true, + msg: successMessages.AUTH_ADMIN_EXISTS, + data: adminExists, + }); } catch (error) { error.service = SERVICE_NAME; next(error); diff --git a/Server/db/MongoDB.js b/Server/db/MongoDB.js index 0b7aa0c87..a789966d9 100644 --- a/Server/db/MongoDB.js +++ b/Server/db/MongoDB.js @@ -166,7 +166,10 @@ const resetPassword = async (req, res) => { const checkAdmin = async (req, res) => { try { const admin = await UserModel.findOne({ role: "admin" }); - console.log(admin); + if (admin !== null) { + return true; + } + return false; } catch (error) { throw error; } diff --git a/Server/utils/messages.js b/Server/utils/messages.js index cb435757c..9ed03fdb6 100644 --- a/Server/utils/messages.js +++ b/Server/utils/messages.js @@ -56,6 +56,7 @@ const successMessages = { AUTH_CREATE_RECOVERY_TOKEN: "Recovery token created successfully", AUTH_VERIFY_RECOVERY_TOKEN: "Recovery token verified successfully", AUTH_RESET_PASSWORD: "Password reset successfully", + AUTH_ADMIN_CHECK: "Admin check completed successfully", // Check Controller CHECK_CREATE: "Check created successfully", diff --git a/Server/validation/joi.js b/Server/validation/joi.js index 4316939b4..64865a6c2 100644 --- a/Server/validation/joi.js +++ b/Server/validation/joi.js @@ -14,6 +14,7 @@ const registerValidation = joi.object({ lastname: joi.string().required(), email: joi.string().email().required(), password: joi.string().min(8).required(), + role: joi.string().required(), }); const editUserParamValidation = joi.object({ @@ -24,6 +25,7 @@ const editUserBodyValidation = joi.object({ firstname: joi.string(), lastname: joi.string(), profilePicUrl: joi.string(), + role: joi.string(), }); const recoveryValidation = joi.object({