From 3ee390500beb3495ca25fe67a357e2ae38475569 Mon Sep 17 00:00:00 2001 From: Bobby Date: Sat, 25 Jun 2022 18:27:00 +0530 Subject: setup dynamic subdomains and organize error pages --- package-lock.json | 13 ++++++++++++- package.json | 3 ++- routes/account.routes.js | 12 ++++++------ routes/auth.routes.js | 6 +++--- routes/basic.routes.js | 6 +++--- routes/index.js | 6 ++++++ routes/profile.routes.js | 7 +++++++ server.js | 7 ++++++- views/error.ejs | 26 -------------------------- views/errors/page_error.ejs | 26 ++++++++++++++++++++++++++ 10 files changed, 71 insertions(+), 41 deletions(-) create mode 100644 routes/profile.routes.js delete mode 100644 views/error.ejs create mode 100644 views/errors/page_error.ejs diff --git a/package-lock.json b/package-lock.json index 41bf5f09..30279544 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,8 @@ "node-cron": "^3.0.1", "node-fetch": "^3.2.5", "nodemailer": "^6.7.5", - "uuid": "^8.3.2" + "uuid": "^8.3.2", + "wildcard-subdomains": "^1.1.0" }, "devDependencies": { "nodemon": "^2.0.16" @@ -2375,6 +2376,11 @@ "node": ">=8" } }, + "node_modules/wildcard-subdomains": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/wildcard-subdomains/-/wildcard-subdomains-1.1.0.tgz", + "integrity": "sha512-eeP601gG7lYvZCN9WudwvjIsV2ARQ/ryHz21QruJeZeSLU+ndbNVZD6qoPtnf+DObjfIJOlINiY21R6ffdMDtA==" + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -4188,6 +4194,11 @@ "string-width": "^4.0.0" } }, + "wildcard-subdomains": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/wildcard-subdomains/-/wildcard-subdomains-1.1.0.tgz", + "integrity": "sha512-eeP601gG7lYvZCN9WudwvjIsV2ARQ/ryHz21QruJeZeSLU+ndbNVZD6qoPtnf+DObjfIJOlINiY21R6ffdMDtA==" + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/package.json b/package.json index 73edc846..d9a9bf9b 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,8 @@ "node-cron": "^3.0.1", "node-fetch": "^3.2.5", "nodemailer": "^6.7.5", - "uuid": "^8.3.2" + "uuid": "^8.3.2", + "wildcard-subdomains": "^1.1.0" }, "devDependencies": { "nodemon": "^2.0.16" diff --git a/routes/account.routes.js b/routes/account.routes.js index 5e2b97d9..967a093c 100644 --- a/routes/account.routes.js +++ b/routes/account.routes.js @@ -21,7 +21,7 @@ router.get("/", (req, res) => { const sql = "SELECT * FROM Profiles WHERE username = ?"; connection.query(sql, [username], (err, results, fields) => { if (err) { - res.status(500).render("error", { + renderRoute(req, res, "errors/page_error", "Error", false, { error: err, }); } else { @@ -58,7 +58,7 @@ router.post("/sendVerificationEmail", (req, res) => { process.env.AUTHORIZATION_STRING, (err, decoded) => { if (err) { - renderRoute(req, res, "error", "Error", false, { + renderRoute(req, res, "errors/page_error", "Error", false, { error: err, }); } else { @@ -76,7 +76,7 @@ router.post("/sendVerificationEmail", (req, res) => { const sql = "SELECT * FROM Profiles WHERE username = ?"; connection.query(sql, [username], (err, results, fields) => { if (err) { - renderRoute(req, res, "error", "Error", false, { + renderRoute(req, res, "errors/page_error", "Error", false, { error: err.message, }); } else { @@ -142,7 +142,7 @@ router.post("/sendVerificationEmail", (req, res) => { }); } } else { - res.status(500).render("error", { + renderRoute(req, res, "errors/page_error", "Error", false, { error: "User not found", }); } @@ -161,7 +161,7 @@ router.post("/updateAccount", (req, res) => { process.env.AUTHORIZATION_STRING, (err, decoded) => { if (err) { - renderRoute(req, res, "error", "Error", false); + renderRoute(req, res, "errors/page_error", "Error", false); } else { const username = decoded.username; const firstname = req.body.firstname; @@ -174,7 +174,7 @@ router.post("/updateAccount", (req, res) => { const connection = mysql.createPool(connectionString); connection.getConnection((err, connection) => { if (err) { - renderRoute(req, res, "error", "Error", false, { + renderRoute(req, res, "errors/page_error", "Error", false, { error: err.message, }); } else { diff --git a/routes/auth.routes.js b/routes/auth.routes.js index 3c11b6a6..2b218752 100644 --- a/routes/auth.routes.js +++ b/routes/auth.routes.js @@ -22,7 +22,7 @@ router.post("/login", (req, res) => { const sql = "SELECT * FROM Users WHERE username = ?"; connection.query(sql, [username], (err, results, fields) => { if (err) { - renderRoute(req, res, "error", "Error", false, { + renderRoute(req, res, "errors/page_error", "Error", false, { error: err.message, }); } else { @@ -72,14 +72,14 @@ router.post("/changePassword", (req, res) => { const connection = mysql.createPool(connectionURL); connection.getConnection((err, connection) => { if (err) { - renderRoute(req, res, "error", "Error", false, { + renderRoute(req, res, "errors/page_error", "Error", false, { error: err.message, }); } else { const sql = "SELECT * FROM Users WHERE username = ?"; connection.query(sql, [username], (err, results, fields) => { if (err) { - renderRoute(req, res, "error", "Error", false, { + renderRoute(req, res, "errors/page_error", "Error", false, { error: err.message, }); } else { diff --git a/routes/basic.routes.js b/routes/basic.routes.js index baacb605..24e071f8 100644 --- a/routes/basic.routes.js +++ b/routes/basic.routes.js @@ -20,11 +20,11 @@ router.get("/verifyEmail", (req, res) => { jwt.verify(token, validationString, (err, decoded) => { if (err) { if (err.expiredAt) { - renderRoute(req, res, "error", "Token Expired Error", false, { + renderRoute(req, res, "errors/page_error", "Token Expired Error", false, { error: `Your token has expired at ${err.expiredAt}. Please request an email verification again from the account page.`, }); } else { - renderRoute(req, res, "error", "Token Error", false, { + renderRoute(req, res, "errors/page_error", "Token Error", false, { error: err, }); } @@ -36,7 +36,7 @@ router.get("/verifyEmail", (req, res) => { const sql = "UPDATE Profiles SET email = ? WHERE username = ?"; connection.query(sql, [email, username], (err, results, fields) => { if (err) { - renderRoute(req, res, "error", "Error", false, { + renderRoute(req, res, "errors/page_error", "Error", false, { error: err, }); } else { diff --git a/routes/index.js b/routes/index.js index 61f17a7c..24885c77 100644 --- a/routes/index.js +++ b/routes/index.js @@ -3,10 +3,16 @@ const home = require('./basic.routes'); const auth = require('./auth.routes'); const account = require('./account.routes'); const api = require('./api'); +const profile = require('./profile.routes'); +const { renderRoute } = require('../functions/render'); router.use('/', home); router.use('/auth', auth); router.use('/api', api); router.use('/account', account); +router.use('/profile', profile); +router.get('*', (req, res) => { + renderRoute(req, res, "404", "Page Not Found"); +}); module.exports = router; diff --git a/routes/profile.routes.js b/routes/profile.routes.js new file mode 100644 index 00000000..6159bcf1 --- /dev/null +++ b/routes/profile.routes.js @@ -0,0 +1,7 @@ +const router = require("express").Router(); + +router.get('/:username', (req, res) => { + res.send(`Hello ${req.params.username}`); +}); + +module.exports = router; diff --git a/server.js b/server.js index dfc25a91..d0166128 100644 --- a/server.js +++ b/server.js @@ -7,8 +7,8 @@ const mysql = require("mysql2"); const app = express(); const port = process.env.PORT || 3000; const connectionURL = process.env.DATABASE_URL; -const validationString = process.env.AUTHORIZATION_STRING; const cron = require("node-cron"); +const subdomains = require('wildcard-subdomains'); require("dotenv").config(); @@ -25,6 +25,11 @@ app.use( ); app.use(flash()); +app.use(subdomains({ + namespace: 'profile', + whitelist: ['www'], +})) + // Set Template Engine app.set("view engine", "ejs"); diff --git a/views/error.ejs b/views/error.ejs deleted file mode 100644 index 16a9f991..00000000 --- a/views/error.ejs +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - That Computer Scientist - <%= title %> - - - - -
-
-

Whoops! Encountered an error!

-

<%= error %>

-

Please click here to go back to the home page.

-
-
- - <%- include('partials/footer.ejs') %> - - diff --git a/views/errors/page_error.ejs b/views/errors/page_error.ejs new file mode 100644 index 00000000..baa97f98 --- /dev/null +++ b/views/errors/page_error.ejs @@ -0,0 +1,26 @@ + + + + + + + + That Computer Scientist - <%= title %> + + + + +
+
+

Whoops! Encountered an error!

+

<%= error %>

+

Please click here to go back to the home page.

+
+
+ + <%- include('../partials/footer.ejs') %> + + -- cgit v1.2.3