From bb6e2eba2c2afeca213684aa4a00c13a42815041 Mon Sep 17 00:00:00 2001 From: SowinskiBraeden Date: Mon, 5 May 2025 17:33:27 -0700 Subject: [PATCH] fix/user routing --- app.js | 37 ++++++++++++++++++++----------------- src/auth/authentication.js | 12 ++++++------ src/auth/middleware.js | 15 +++++++++++---- src/database/connection.js | 3 ++- src/router/user.js | 2 ++ 5 files changed, 41 insertions(+), 28 deletions(-) diff --git a/app.js b/app.js index f95b832..f85c186 100644 --- a/app.js +++ b/app.js @@ -37,17 +37,6 @@ async function initDatabase() { users = await getCollection(db, "users"); } -initDatabase().then(() => { - // Import authentication handler - app.use(require("./src/auth/authentication")(users)); - - // Import middleware - const middleware = require("./src/auth/middleware")(users); - - // Apply middleware to protected user routes - app.use(require("./src/router/user")(middleware)); -}); - /*** ROUTINGS ***/ app.get('/', (req, res) => { @@ -80,11 +69,25 @@ app.get('/aboutUs', (req, res) => { return res.status(status.Ok); }); -app.get('/*splat', (req, res) => { - res.send('404 Not Found'); - return res.status(status.NotFound); -}); +// Initialize database and start app +initDatabase().then(() => { + console.log("Successfully connected to MongoDB"); -app.listen(port, () => { - console.log(`Server listening on port ${port}`); + // Import authentication handler + app.use(require("./src/auth/authentication")(users)); + + // Import middleware & apply to user routes + const middleware = require("./src/auth/middleware")(users); + app.use(require("./src/router/user")(middleware)); + + // 404 handler + app.get('/*splat', (req, res) => { + res.send('404 Not Found'); + return res.status(status.NotFound); + }); + + // Start app + app.listen(port, () => { + console.log(`Server listening on port ${port}`); + }); }); diff --git a/src/auth/authentication.js b/src/auth/authentication.js index 2a2e9ed..410a154 100644 --- a/src/auth/authentication.js +++ b/src/auth/authentication.js @@ -5,6 +5,12 @@ const salt = 12; module.exports = (users) => { const router = require("express").Router(); + + router.get("/logout", (req, res) => { + req.session.destroy(); + // res.status(status.Unauthorized); + return res.redirect('/login'); + }); router.post("/login", async (req, res) => { const credentialSchema = joi.object({ @@ -86,11 +92,5 @@ module.exports = (users) => { }); }); - router.get("/logout", (req, res) => { - req.session.destroy(); - // res.status(status.Unauthorized); - return res.redirect('/login'); - }); - return router; } diff --git a/src/auth/middleware.js b/src/auth/middleware.js index 071a8a2..cfdb559 100644 --- a/src/auth/middleware.js +++ b/src/auth/middleware.js @@ -1,6 +1,11 @@ const status = require("../util/statuses"); -module.exports = (users) => { +/** + * createMiddleware returns a middleware function for express. + * @param {MongoClient.collection} users + * @return {async function} + */ +const createMiddleware = (users) => { return async (req, res, next) => { if (!req.session.authenticated || !req.session.email) { req.session.errMessage = "Please login to view that resource"; @@ -9,7 +14,7 @@ module.exports = (users) => { } let user = await users.findOne({ "email": req.session.email }).then((user) => user); - + if (!user) { req.session.errMessage = "User not found"; res.redirect("/login"); @@ -18,5 +23,7 @@ module.exports = (users) => { req.user = user; next(); - } -}; + }; +} + +module.exports = createMiddleware; diff --git a/src/database/connection.js b/src/database/connection.js index a25d6ac..0f52263 100644 --- a/src/database/connection.js +++ b/src/database/connection.js @@ -3,7 +3,8 @@ const MongoClient = require("mongodb").MongoClient; /** * connectMongo returns a database connection to MongoDB * @param {string} mongoURI - * @param {string} databaseName + * @param {string} databaseName + * @return {MongoClient} */ const connectMongo = async (mongoURI, databaseName) => { const database = await MongoClient.connect(mongoURI, { connectTimeoutMS: 1000 }); diff --git a/src/router/user.js b/src/router/user.js index 5570874..51c685e 100644 --- a/src/router/user.js +++ b/src/router/user.js @@ -1,3 +1,5 @@ +const status = require("../util/statuses"); + module.exports = (middleware) => { const router = require("express").Router();