From c136b20112f1f6bfb71209cdfafadb1d59c05794 Mon Sep 17 00:00:00 2001 From: William Mantly Date: Tue, 23 Jan 2024 19:00:57 -0500 Subject: [PATCH] round2 --- consumerWebsite/app.js | 19 ++- consumerWebsite/database/model/apiKeyModel.js | 2 - consumerWebsite/database/model/apiLogModel.js | 4 +- .../database/model/locationModel.js | 59 +------- .../database/model/sensorDataModel.js | 4 +- consumerWebsite/database/model/sensorModel.js | 4 +- consumerWebsite/database/model/userModel.js | 2 + consumerWebsite/functions/location.js | 55 ++++++++ consumerWebsite/functions/logger.js | 23 ++++ consumerWebsite/functions/sensor.js | 75 ++++++++++ .../functions/sensorData.js | 130 +----------------- consumerWebsite/functions/validateData.js | 30 +++- .../middleware/apiLogger.js | 3 +- .../index.js => consumerWebsite/mqttApp.js | 6 +- consumerWebsite/routes/api_routes.js | 15 +- .../routes/location.js | 2 +- .../routes/seedLocationAndSensor.js | 6 +- .../routes/seedSensorData.js | 8 +- .../routes/seed_route.js | 2 +- .../routes/sensor.js | 2 +- .../routes/sensorData.js | 6 +- consumerWebsite/views/401.ejs | 2 +- consumerWebsite/views/404.ejs | 2 +- consumerWebsite/views/bot.ejs | 8 +- consumerWebsite/views/logintop.ejs | 2 +- consumerWebsite/views/top.ejs | 12 +- webserver/bin/www | 109 --------------- webserver/database/model/apiKeyModel.js | 65 --------- webserver/database/model/userModel.js | 94 ------------- webserver/database/mySQL.js | 35 ----- webserver/functions/Database.js | 59 -------- webserver/functions/bcrypt.js | 38 ----- webserver/functions/getAPIKey.js | 17 --- webserver/functions/validateData.js | 51 ------- webserver/middleware/apiKey.js | 65 --------- webserver/modules/express.js | 91 ------------ webserver/routes/apiLog.js | 77 ----------- webserver/routes/api_route.js | 37 ----- 38 files changed, 257 insertions(+), 964 deletions(-) create mode 100644 consumerWebsite/functions/location.js create mode 100644 consumerWebsite/functions/logger.js create mode 100644 consumerWebsite/functions/sensor.js rename webserver/functions/APIDatabase.js => consumerWebsite/functions/sensorData.js (88%) rename {webserver => consumerWebsite}/middleware/apiLogger.js (93%) rename webserver/index.js => consumerWebsite/mqttApp.js (90%) rename webserver/routes/Location.js => consumerWebsite/routes/location.js (97%) rename webserver/routes/SeedLocationAndSensor.js => consumerWebsite/routes/seedLocationAndSensor.js (87%) rename webserver/routes/SeedsensorData.js => consumerWebsite/routes/seedSensorData.js (93%) rename {webserver => consumerWebsite}/routes/seed_route.js (61%) rename webserver/routes/Sensor.js => consumerWebsite/routes/sensor.js (97%) rename webserver/routes/SensorData.js => consumerWebsite/routes/sensorData.js (91%) delete mode 100644 webserver/bin/www delete mode 100644 webserver/database/model/apiKeyModel.js delete mode 100644 webserver/database/model/userModel.js delete mode 100644 webserver/database/mySQL.js delete mode 100644 webserver/functions/Database.js delete mode 100644 webserver/functions/bcrypt.js delete mode 100644 webserver/functions/getAPIKey.js delete mode 100644 webserver/functions/validateData.js delete mode 100644 webserver/middleware/apiKey.js delete mode 100644 webserver/modules/express.js delete mode 100644 webserver/routes/apiLog.js delete mode 100644 webserver/routes/api_route.js diff --git a/consumerWebsite/app.js b/consumerWebsite/app.js index 5690498..82ca5a0 100644 --- a/consumerWebsite/app.js +++ b/consumerWebsite/app.js @@ -1,4 +1,5 @@ const express = require("express"); +const { rateLimit } = require("express-rate-limit"); const path = require("path"); const app = express(); const port = 3000; @@ -8,6 +9,20 @@ const ejs = require("ejs"); app.use(express.json()); app.set("json spaces", 2); +//express-rate-limit stolen from docs +const limiter = rateLimit({ + windowMs: 15 * 60 * 1000, // 15 minutes + limit: 600, // Limit each IP to 100 requests per `window` (here, per 15 minutes). + standardHeaders: 'draft-7', // draft-6: `RateLimit-*` headers; draft-7: combined `RateLimit` header + legacyHeaders: false, // Disable the `X-RateLimit-*` headers. +}); + +// Apply the rate limiting middleware to all requests. +app.use(limiter); + +//disable x-powered-by header for security reasons +app.disable("x-powered-by"); + // Set up the templating engine to build HTML for the front end. app.set("views", path.join(__dirname, "./views")); app.set("view engine", "ejs"); @@ -15,11 +30,9 @@ app.set("view engine", "ejs"); // Have express server static content( images, CSS, browser JS) from the public app.use(express.static(path.join(__dirname, "./public"))); -//middleware logic ( called by next() ) -const auth = require("./middleware/authChecker"); - //route logic +app.use("/api/seed/v0" ,require("./routes/seed_route.js")); app.use("/api/v0", require("./routes/api_routes")); //render logic diff --git a/consumerWebsite/database/model/apiKeyModel.js b/consumerWebsite/database/model/apiKeyModel.js index 03358af..915b68f 100644 --- a/consumerWebsite/database/model/apiKeyModel.js +++ b/consumerWebsite/database/model/apiKeyModel.js @@ -2,8 +2,6 @@ const { Sequelize, DataTypes, Op } = require("sequelize"); const { sequelize } = require("../mySql"); const { userModel } = require("./userModel"); -const { generateUUID } = require("../../functions/generateUUID.js"); -const { hash, compareHash } = require("../../functions/bcrypt.js"); //sequelize.sync(); const apikeyModel = sequelize.define( diff --git a/consumerWebsite/database/model/apiLogModel.js b/consumerWebsite/database/model/apiLogModel.js index a2f4013..160db21 100644 --- a/consumerWebsite/database/model/apiLogModel.js +++ b/consumerWebsite/database/model/apiLogModel.js @@ -1,6 +1,6 @@ "use strict"; const { Sequelize, DataTypes } = require("sequelize"); -const { sequelize } = require("../mySQL"); +const { sequelize } = require("../mySql"); //sequelize.sync(); const api_log_Model = sequelize.define( @@ -68,4 +68,6 @@ const api_log_Model = sequelize.define( } ); +api_log_Model.sync() + module.exports = { api_log_Model }; diff --git a/consumerWebsite/database/model/locationModel.js b/consumerWebsite/database/model/locationModel.js index 57a3ed3..83ce88d 100644 --- a/consumerWebsite/database/model/locationModel.js +++ b/consumerWebsite/database/model/locationModel.js @@ -1,6 +1,6 @@ "use strict"; const { Sequelize, DataTypes } = require("sequelize"); -const { sequelize } = require("../mySQL"); +const { sequelize } = require("../mySql"); const { isAlphaNumericwithSpaces } = require('../../functions/validateData') //sequelize.sync(); @@ -72,59 +72,6 @@ const locationModel = sequelize.define( } ); -async function getLocation() { - const location = await locationModel.findAll(); - return location; -} +locationModel.sync(); -async function addLocation(name, added_by, description) { - const location = await locationModel.create({ - name: name, - added_by: added_by, - description: description, - }); -} - -async function updateLocation(id, name, added_by, description) { - const location = await locationModel.update( - { - name: name, - added_by: added_by, - description: description, - }, - { - where: { - id: id, - }, - } - ); -} - -async function deleteLocation(id) { - //delete by id - const location = await locationModel.destroy({ - where: { - id: id, - }, - }); -} - -async function getLocationById(id) { - const location = await locationModel.findAll({ - where: { - id: id, - }, - }); - return location; -} - - - -module.exports = { - locationModel, - getLocation, - addLocation, - updateLocation, - deleteLocation, - getLocationById, -}; +module.exports = { locationModel }; diff --git a/consumerWebsite/database/model/sensorDataModel.js b/consumerWebsite/database/model/sensorDataModel.js index 0f0c5be..0c508ad 100644 --- a/consumerWebsite/database/model/sensorDataModel.js +++ b/consumerWebsite/database/model/sensorDataModel.js @@ -1,6 +1,6 @@ "use strict"; const { Sequelize, DataTypes } = require("sequelize"); -const { sequelize } = require("../mySQL"); +const { sequelize } = require("../mySql"); const { locationModel } = require("./locationModel"); const { sensorModel } = require("./sensorModel"); const { isJson } = require('../../functions/validateData'); @@ -74,4 +74,6 @@ const sensorDataModel = sequelize.define( } ); +sensorDataModel.sync() + module.exports = { sensorDataModel }; diff --git a/consumerWebsite/database/model/sensorModel.js b/consumerWebsite/database/model/sensorModel.js index 769c0dc..f2d0da0 100644 --- a/consumerWebsite/database/model/sensorModel.js +++ b/consumerWebsite/database/model/sensorModel.js @@ -1,6 +1,6 @@ "use strict"; const { Sequelize, DataTypes } = require("sequelize"); -const { sequelize } = require("../mySQL"); +const { sequelize } = require("../mySql"); const { locationModel } = require("./locationModel"); const { isAlphaNumericwithSpaces, @@ -107,4 +107,6 @@ const sensorModel = sequelize.define( } ); +sensorModel.sync() + module.exports = { sensorModel }; diff --git a/consumerWebsite/database/model/userModel.js b/consumerWebsite/database/model/userModel.js index bc39fe8..f48af64 100644 --- a/consumerWebsite/database/model/userModel.js +++ b/consumerWebsite/database/model/userModel.js @@ -112,4 +112,6 @@ const userModel = sequelize.define( } ); +userModel.sync() + module.exports = { userModel }; diff --git a/consumerWebsite/functions/location.js b/consumerWebsite/functions/location.js new file mode 100644 index 0000000..4dabf26 --- /dev/null +++ b/consumerWebsite/functions/location.js @@ -0,0 +1,55 @@ +const {locationModel} = require("../database/model/locationModel"); + +async function getLocation() { + const location = await locationModel.findAll(); + return location; +} + +async function addLocation(name, added_by, description) { + const location = await locationModel.create({ + name: name, + added_by: added_by, + description: description, + }); +} + +async function updateLocation(id, name, added_by, description) { + const location = await locationModel.update( + { + name: name, + added_by: added_by, + description: description, + }, + { + where: { + id: id, + }, + } + ); +} + +async function deleteLocation(id) { + //delete by id + const location = await locationModel.destroy({ + where: { + id: id, + }, + }); +} + +async function getLocationById(id) { + const location = await locationModel.findAll({ + where: { + id: id, + }, + }); + return location; +} + +module.exports = { + getLocation, + addLocation, + updateLocation, + deleteLocation, + getLocationById, +}; diff --git a/consumerWebsite/functions/logger.js b/consumerWebsite/functions/logger.js new file mode 100644 index 0000000..fe54890 --- /dev/null +++ b/consumerWebsite/functions/logger.js @@ -0,0 +1,23 @@ +const { api_log_Model } = require("../database/model/apiLogModel.js"); + + +async function insertLogData(log) { + try { + api_log_Model.create({ + ip: log.ip, + time: log.time, + method: log.method, + host: log.host, + statusCode: log.statusCode, + Responsesize: log.Responsesize, + referrer: log.referrer, + userAgent: log.userAgent, + }); + } catch (error) { + console.error(error); + } +} + +module.exports = { + insertLogData, +}; diff --git a/consumerWebsite/functions/sensor.js b/consumerWebsite/functions/sensor.js new file mode 100644 index 0000000..4badc59 --- /dev/null +++ b/consumerWebsite/functions/sensor.js @@ -0,0 +1,75 @@ +const {sensorModel} = require("../database/model/sensorModel"); + + +async function getSensor() { + const sensor = await sensorModel.findAll(); + return sensor; + console.error(error); +} + +async function addSensor( + sensorname, + added_by, + mac_address, + description, + location +) { + const sensor = await sensorModel.create({ + name: sensorname, + added_by: added_by, + mac_address: mac_address, + description: description, + location: location, + }); +} + +async function updateSensor( + id, + sensorname, + added_by, + mac_address, + description, + location +) { + const sensor = await sensorModel.update( + { + name: sensorname, + added_by: added_by, + mac_address: mac_address, + description: description, + location: location, + }, + { + where: { + id: id, + }, + } + ); +} + +async function deleteSensor(id) { + //delete by id + const sensor = await sensorModel.destroy({ + where: { + id: id, + }, + }); + + console.error(error); +} + +async function getSensorById(id) { + const sensor = await sensorModel.findAll({ + where: { + id: id, + }, + }); + return sensor; +} + +module.exports = { + getSensor, + addSensor, + updateSensor, + deleteSensor, +}; diff --git a/webserver/functions/APIDatabase.js b/consumerWebsite/functions/sensorData.js similarity index 88% rename from webserver/functions/APIDatabase.js rename to consumerWebsite/functions/sensorData.js index d357188..29bbe2b 100644 --- a/webserver/functions/APIDatabase.js +++ b/consumerWebsite/functions/sensorData.js @@ -1,7 +1,5 @@ -const { sequelize } = require("../Database/mySql.js"); -const { locationModel } = require("../Database/model/locationModel.js"); -const { sensorModel } = require("../Database/model/sensorModel.js"); -const { sensorDataModel } = require("../Database/model/sensorDataModel.js"); +const { sequelize } = require("../database/mySql.js"); +const { sensorDataModel } = require("../database/model/sensorDataModel.js"); const { Op, Sequelize } = require("sequelize"); //helper function to convert month name to month number @@ -13,126 +11,15 @@ function getMonthFromString(mon) { } return -1; } -async function getLocation() { - const location = await locationModel.findAll(); - return location; -} -async function addLocation(name, added_by, description) { - const location = await locationModel.create({ - name: name, - added_by: added_by, - description: description, - }); -} - -async function updateLocation(id, name, added_by, description) { - const location = await locationModel.update( - { - name: name, - added_by: added_by, - description: description, - }, - { - where: { - id: id, - }, - } - ); -} - -async function deleteLocation(id) { - //delete by id - const location = await locationModel.destroy({ - where: { - id: id, - }, - }); -} - -async function getLocationById(id) { - const location = await locationModel.findAll({ - where: { - id: id, - }, - }); - return location; -} - -async function getSensor() { - const sensor = await sensorModel.findAll(); - return sensor; - console.error(error); -} - -async function addSensor( - sensorname, - added_by, - mac_address, - description, - location -) { - const sensor = await sensorModel.create({ - name: sensorname, - added_by: added_by, - mac_address: mac_address, - description: description, - location: location, - }); -} - -async function updateSensor( - id, - sensorname, - added_by, - mac_address, - description, - location -) { - const sensor = await sensorModel.update( - { - name: sensorname, - added_by: added_by, - mac_address: mac_address, - description: description, - location: location, - }, - { - where: { - id: id, - }, - } - ); -} - -async function deleteSensor(id) { - //delete by id - const sensor = await sensorModel.destroy({ - where: { - id: id, - }, - }); - - console.error(error); -} - -async function getSensorById(id) { - const sensor = await sensorModel.findAll({ - where: { - id: id, - }, - }); - return sensor; -} async function getSensorData() { const sensorData = await sensorDataModel.findAll(); return sensorData; } -async function addSensorData(id, id_sensor, id_location, sensordata) { +async function addSensorData(id_sensor, id_location, sensordata) { const sensorData = await sensorDataModel.create({ - id: id, sensorid: id_sensor, locationid: id_location, measurement: sensordata, @@ -826,16 +713,6 @@ async function getDatabyRange(queryString) { } module.exports = { - getLocation, - addLocation, - updateLocation, - deleteLocation, - getLocationById, - getSensor, - addSensor, - updateSensor, - deleteSensor, - getSensorById, getSensorData, addSensorData, updateSensorData, @@ -843,4 +720,5 @@ module.exports = { getSensorDataById, getData, getDatabyRange, + }; diff --git a/consumerWebsite/functions/validateData.js b/consumerWebsite/functions/validateData.js index d95fa58..00b2f35 100644 --- a/consumerWebsite/functions/validateData.js +++ b/consumerWebsite/functions/validateData.js @@ -1,5 +1,27 @@ var validator = require("validator"); +const dateRegex = /^[A-Za-z]{3}, \d{2} [A-Za-z]{3} \d{4} \d{2}:\d{2}:\d{2} GMT$/; + +function isValidDateString(value) { + return dateRegex.test(value); +} + + +function isMacAddress(value) { + // Joi.string().regex(/^([0-9a-f]{2}-){5}([0-9a-f]{2})$/i).lowercase() + //return validator.isMACAddress(value, { no_separators: true, eui: 48 }); + const macAddress = /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/; + const valid = macAddress.test(value); + return valid; +} + + +function isNumber(value) { + if (typeof value === "number") { + return true; + } +} + function isAlphaNumericwithSpaces(value) { return validator.isAlphanumeric(value, ["en-US"], { ignore: " " }); } @@ -44,6 +66,8 @@ module.exports = { isAlphaNumericwithSpaces, isAlphaNumericWithSpacesAndDash, isJson, - isAddress -}; - + isAddress, + isValidDateString, + isMacAddress, + isNumber, +}; \ No newline at end of file diff --git a/webserver/middleware/apiLogger.js b/consumerWebsite/middleware/apiLogger.js similarity index 93% rename from webserver/middleware/apiLogger.js rename to consumerWebsite/middleware/apiLogger.js index bfe7f2f..5dfef6d 100644 --- a/webserver/middleware/apiLogger.js +++ b/consumerWebsite/middleware/apiLogger.js @@ -1,4 +1,5 @@ -const { insertLogData } = require("../functions/database.js"); +const { insertLogData } = require("../functions/logger.js"); + const APIlogger = (req, res, next) => { try { const log = { diff --git a/webserver/index.js b/consumerWebsite/mqttApp.js similarity index 90% rename from webserver/index.js rename to consumerWebsite/mqttApp.js index c3c7fa8..84d9035 100644 --- a/webserver/index.js +++ b/consumerWebsite/mqttApp.js @@ -1,6 +1,6 @@ const client = require("./modules/mqtt"); const { isJson, isNumber } = require("./functions/validateData.js"); -const { insertDatatoDB } = require("./functions/database.js"); +const { addSensorData } = require("./functions/sensors.js"); // Event handlers client.on("connect", () => { @@ -37,7 +37,7 @@ client.on("message", (topic, message) => { if (isNumber(data)) { { //pass datas to database - insertDatatoDB(datas[key]); + insertDatatoDB(datas[key].sensorid, datas[key].locationid, datas[key]); } } else { @@ -62,4 +62,4 @@ client.on("error", (err) => { client.on("end", () => { console.log("Disconnected from MQTT broker"); client.reconnect(); -}); +}); \ No newline at end of file diff --git a/consumerWebsite/routes/api_routes.js b/consumerWebsite/routes/api_routes.js index 4edf988..d3b13bb 100644 --- a/consumerWebsite/routes/api_routes.js +++ b/consumerWebsite/routes/api_routes.js @@ -1,13 +1,22 @@ 'use strict'; const router = require('express').Router(); -const { auth } = require("../middleware/authChecker") - +const { auth } = require("../middleware/authChecker") +const { APIlogger } = require('../middleware/apiLogger.js'); router.use('/auth', require('./auth')); router.use('/apikey', require('./apikey')); -router.use('/user', auth ,require('./user')); +router.use('/user', [auth, APIlogger], require('./user')); + +//location route +router.use('/location', [auth, APIlogger], require('./location')); + +//location route +router.use('/sensor', [auth, APIlogger], require('./sensor')); + +//location route +router.use('/sensor-data', [auth, APIlogger], require('./sensorData')); module.exports = router; diff --git a/webserver/routes/Location.js b/consumerWebsite/routes/location.js similarity index 97% rename from webserver/routes/Location.js rename to consumerWebsite/routes/location.js index 486cff9..cc7ce2b 100644 --- a/webserver/routes/Location.js +++ b/consumerWebsite/routes/location.js @@ -4,7 +4,7 @@ const { getLocationById, updateLocation, deleteLocation, -} = require("../functions/apiDatabase.js"); +} = require("../functions/location"); const express = require("express"); const router = express.Router(); diff --git a/webserver/routes/SeedLocationAndSensor.js b/consumerWebsite/routes/seedLocationAndSensor.js similarity index 87% rename from webserver/routes/SeedLocationAndSensor.js rename to consumerWebsite/routes/seedLocationAndSensor.js index 11c2aa3..9e44daf 100644 --- a/webserver/routes/SeedLocationAndSensor.js +++ b/consumerWebsite/routes/seedLocationAndSensor.js @@ -1,6 +1,6 @@ -const { sequelize } = require("../Database/mySql.js"); -const { locationModel } = require("../Database/model/locationModel.js"); -const { sensorModel } = require("../Database/model/sensorModel.js"); +const { sequelize } = require("../database/mySql.js"); +const { locationModel } = require("../database/model/locationModel.js"); +const { sensorModel } = require("../database/model/sensorModel.js"); const express = require("express"); const router = express.Router(); diff --git a/webserver/routes/SeedsensorData.js b/consumerWebsite/routes/seedSensorData.js similarity index 93% rename from webserver/routes/SeedsensorData.js rename to consumerWebsite/routes/seedSensorData.js index 7bfaec7..139ed23 100644 --- a/webserver/routes/SeedsensorData.js +++ b/consumerWebsite/routes/seedSensorData.js @@ -1,7 +1,7 @@ -const { sequelize } = require("../Database/mySql.js"); -const { locationModel } = require("../Database/model/locationModel.js"); -const { sensorModel } = require("../Database/model/sensorModel.js"); -const { sensorDataModel } = require("../Database/model/sensorDataModel.js"); +const { sequelize } = require("../database/mySql.js"); +const { locationModel } = require("../database/model/locationModel.js"); +const { sensorModel } = require("../database/model/sensorModel.js"); +const { sensorDataModel } = require("../database/model/sensorDataModel.js"); const express = require("express"); const router = express.Router(); diff --git a/webserver/routes/seed_route.js b/consumerWebsite/routes/seed_route.js similarity index 61% rename from webserver/routes/seed_route.js rename to consumerWebsite/routes/seed_route.js index e89f904..3865742 100644 --- a/webserver/routes/seed_route.js +++ b/consumerWebsite/routes/seed_route.js @@ -2,7 +2,7 @@ const router = require('express').Router(); //location route -router.use('/seedSensorData', require('./seedSensorData.js')); +router.use('/sensor-data', require('./seedSensorData.js')); router.use('/seed', require('./seedLocationAndSensor')); diff --git a/webserver/routes/Sensor.js b/consumerWebsite/routes/sensor.js similarity index 97% rename from webserver/routes/Sensor.js rename to consumerWebsite/routes/sensor.js index cc1c076..4077935 100644 --- a/webserver/routes/Sensor.js +++ b/consumerWebsite/routes/sensor.js @@ -4,7 +4,7 @@ const { updateSensor, deleteSensor, getSensorById -} = require("../functions/apiDatabase.js"); +} = require("../functions/sensor.js"); const express = require("express"); const router = express.Router(); diff --git a/webserver/routes/SensorData.js b/consumerWebsite/routes/sensorData.js similarity index 91% rename from webserver/routes/SensorData.js rename to consumerWebsite/routes/sensorData.js index c54717d..22649e0 100644 --- a/webserver/routes/SensorData.js +++ b/consumerWebsite/routes/sensorData.js @@ -6,7 +6,7 @@ const { getSensorDataById, getData, getDatabyRange, -} = require("../functions/apiDatabase.js"); +} = require("../functions/sensorData"); const express = require("express"); const { json } = require("body-parser"); @@ -24,8 +24,8 @@ router.get("/", async (req, res, next) => { router.post("/new", async (req, res, next) => { try { - const { id, id_sensor, id_location, sensordata } = req.body; - await addSensorData(id, id_sensor, id_location, sensordata); + const { id_sensor, id_location, sensordata } = req.body; + await addSensorData(id_sensor, id_location, sensordata); res.sendStatus(200).json({ message: "SensorData " + id + " added" }); } catch (error) { console.error(error); diff --git a/consumerWebsite/views/401.ejs b/consumerWebsite/views/401.ejs index c6e51c7..71c97db 100644 --- a/consumerWebsite/views/401.ejs +++ b/consumerWebsite/views/401.ejs @@ -24,7 +24,7 @@

Unauthorized Access!

- +

Sorry, you don't have permission to access this resource. Please log in or provide valid credentials.

Back To Homepage diff --git a/consumerWebsite/views/404.ejs b/consumerWebsite/views/404.ejs index ccb157b..b1d397c 100644 --- a/consumerWebsite/views/404.ejs +++ b/consumerWebsite/views/404.ejs @@ -24,7 +24,7 @@

Oops! That page can’t be found.

- +

We can’t find the page your are looking for. You can check out our Homepage.

Back To Homepage diff --git a/consumerWebsite/views/bot.ejs b/consumerWebsite/views/bot.ejs index c383677..ebe6d7b 100644 --- a/consumerWebsite/views/bot.ejs +++ b/consumerWebsite/views/bot.ejs @@ -45,7 +45,7 @@