From 0eda4ceb77c38a477577f3f721a0a4ffb90d809d Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Mon, 10 Jun 2024 16:07:52 -0700 Subject: [PATCH] Added route for validating recovery token --- Server/controllers/authController.js | 21 +++++++++++++++++++-- Server/db/MongoDB.js | 15 +++++++++++++++ Server/routes/authRoute.js | 2 ++ 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/Server/controllers/authController.js b/Server/controllers/authController.js index dae68771f..52e7b4bdc 100644 --- a/Server/controllers/authController.js +++ b/Server/controllers/authController.js @@ -153,10 +153,9 @@ const userEditController = async (req, res, next) => { }; const recoveryRequestController = async (req, res, next) => { - const email = req.body.email; try { + const email = req.body.email; const user = await req.db.getUserByEmail(req, res); - // TODO Email token to user if (user) { const recoveryToken = await req.db.requestRecoveryToken(req, res); console.log(recoveryToken); @@ -166,6 +165,23 @@ const recoveryRequestController = async (req, res, next) => { data: recoveryToken.token, }); } + // TODO Email token to user + } catch (error) { + error.service = SERVICE_NAME; + next(error); + return; + } +}; + +const validateRecoveryTokenController = async (req, res, next) => { + try { + const candidateToken = req.body.recoveryToken; + const recoveryToken = await req.db.validateRecoveryToken(req, res); + return res.status(200).json({ + success: true, + msg: "Token is valid", + data: recoveryToken, + }); } catch (error) { error.service = SERVICE_NAME; next(error); @@ -177,4 +193,5 @@ module.exports = { loginController, userEditController, recoveryRequestController, + validateRecoveryTokenController, }; diff --git a/Server/db/MongoDB.js b/Server/db/MongoDB.js index 54e6e2c0a..781d4309a 100644 --- a/Server/db/MongoDB.js +++ b/Server/db/MongoDB.js @@ -112,6 +112,20 @@ const requestRecoveryToken = async (req, res) => { } }; +const validateRecoveryToken = async (req, res) => { + try { + const candidateToken = req.body.recoveryToken; + const recoveryToken = await RecoveyToken.findOne({ token: candidateToken }); + if (recoveryToken !== null) { + return recoveryToken; + } else { + throw new Error("Token not found"); + } + } catch (error) { + throw error; + } +}; + //**************************************** // Monitors //**************************************** @@ -420,6 +434,7 @@ module.exports = { getUserByEmail, updateUser, requestRecoveryToken, + validateRecoveryToken, getAllMonitors, getMonitorById, getMonitorsByUserId, diff --git a/Server/routes/authRoute.js b/Server/routes/authRoute.js index 41772c49b..f300edfa9 100644 --- a/Server/routes/authRoute.js +++ b/Server/routes/authRoute.js @@ -6,6 +6,7 @@ const { loginController, userEditController, recoveryRequestController, + validateRecoveryTokenController, } = require("../controllers/authController"); router.post("/register", registerController); @@ -15,5 +16,6 @@ router.post("/user/:userId", verifyJWT, userEditController); //Recovery routes router.post("/recovery/request", recoveryRequestController); +router.post("/recovery/validate", validateRecoveryTokenController); module.exports = router;