From cadbc2187dcf9679689d4886dbb058fc30810dcc Mon Sep 17 00:00:00 2001 From: SowinskiBraeden Date: Wed, 7 May 2025 13:01:24 -0700 Subject: [PATCH] fix/middleware preventing 404 redirect --- app.js | 12 +++++++++--- src/auth/middleware.js | 12 +++++++++++- src/views/notFound.ejs | 24 ++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 src/views/notFound.ejs diff --git a/app.js b/app.js index ff0b9c5..0928bee 100644 --- a/app.js +++ b/app.js @@ -84,23 +84,29 @@ app.post('/api/location', async (req,res) => { res.json(data); }); +// 404 handler - keep the actual notFound route please +app.get('/notFound', (req, res) => { + res.render('notFound'); + return res.status(status.NotFound); +}); + // Initialize database and start app initDatabase().then(() => { console.log("Successfully connected to MongoDB"); // 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, users, plans, assets)); // 404 handler app.get('/*splat', (req, res) => { - res.send('404 Not Found'); + res.render('notFound'); return res.status(status.NotFound); }); - + // Start app app.listen(port, () => { console.log(`Server listening on port ${port}`); diff --git a/src/auth/middleware.js b/src/auth/middleware.js index fc8c730..bf1ed0a 100644 --- a/src/auth/middleware.js +++ b/src/auth/middleware.js @@ -1,12 +1,22 @@ const status = require("../util/statuses"); const session = require("express-session"); +// Get all user routes names +let userRouter = require("../router/user")((req, res, next) => next(), null, null, null); +userRouter.stack.shift(); +const userRoutes = userRouter.stack.map((layer) => layer.route.path.split("/")[1]); + /** * @param {MongoClient.collection} users db collection * @returns {async function} middleware handler function - */ +*/ const createMiddleware = (users) => { return async (req, res, next) => { + // Redirect not found pages to 404 page + if (!userRoutes.includes(req.url.substring(1))) { + return res.status(status.NotFound).redirect("/notFound"); + } + if (!req.session.authenticated || !req.session.email) { req.session.errMessage = "Please login to view that resource"; res.redirect("/login"); diff --git a/src/views/notFound.ejs b/src/views/notFound.ejs new file mode 100644 index 0000000..2e783bc --- /dev/null +++ b/src/views/notFound.ejs @@ -0,0 +1,24 @@ +<%- include("./partials/fileHeader") %> +<%- include("./partials/headerStart") %> + +
+
+
+

404 - Not found

+

It appears you stumbled accross a misleading page.

+ +
+
+
+ +<%- include("./partials/footer") %>