From b5677c57e315d2a75fad0dac4ffb8f2477a96ff4 Mon Sep 17 00:00:00 2001 From: IDTitanium Date: Sat, 13 Apr 2019 13:18:07 +0100 Subject: [PATCH 1/4] Added Login to the Manage Jobs page npm install before npm start --- app.js | 8 ++++++-- controllers/home.js | 4 ++++ models/admin.js | 35 +++++++++++++++++++++++++++++++++++ package.json | 3 ++- routes/index.js | 39 ++++++++++++++++++++++++++++++++++++++- views/admin.hbs | 20 ++++++++++++++++++++ 6 files changed, 105 insertions(+), 4 deletions(-) create mode 100644 models/admin.js create mode 100644 views/admin.hbs diff --git a/app.js b/app.js index 7b784d33..9f64581c 100644 --- a/app.js +++ b/app.js @@ -7,7 +7,7 @@ var cookieParser = require("cookie-parser"); var logger = require("morgan"); var session = require("express-session"); var flash = require("connect-flash"); - +var MongoStore = require('connect-mongo')(session); require("dotenv").config(); // The database setup @@ -50,9 +50,13 @@ app.use( session({ secret: "dfgdhhahg15sdff", saveUninitialized: false, - resave: false + resave: true, + store: new MongoStore({ + mongooseConnection: db +}) }) ); + app.use(flash()); //locals diff --git a/controllers/home.js b/controllers/home.js index 8378c703..2a5b19e3 100644 --- a/controllers/home.js +++ b/controllers/home.js @@ -18,6 +18,10 @@ class Home { static faqs(req, res, next) { res.render("faqs"); } + //Render Admin page + static admin(req, res, next) { + res.render("admin"); + } // Render job details page // TODO? diff --git a/models/admin.js b/models/admin.js new file mode 100644 index 00000000..1b8857f6 --- /dev/null +++ b/models/admin.js @@ -0,0 +1,35 @@ +const mongoose = require('mongoose'); +const AdminSchema = new mongoose.Schema({ + username: { + type: String, + unique: true, + required: true, + trim: true + }, + password: { + type: String, + required: true, + } +}); + + +AdminSchema.statics.authenticate = function (username, password, callback) { + Admin.findOne({ username: username }) + .exec(function (err, admin) { + if (err) { + return callback(err) + } else if (!admin) { + var err = new Error('User not found.'); + err.status = 401; + return callback(err); + } else { + return callback(null, admin); + } + + }); +} + + + +var Admin = mongoose.model('Admin', AdminSchema); +module.exports = Admin; \ No newline at end of file diff --git a/package.json b/package.json index 0c77a999..dad884a5 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "dependencies": { "body-parser": "^1.18.3", "connect-flash": "^0.1.1", + "connect-mongo": "^2.0.3", "cookie-parser": "~1.4.3", "debug": "~2.6.9", "dotenv": "^7.0.0", @@ -22,8 +23,8 @@ "flash": "^1.1.0", "hbs": "~4.0.1", "http-errors": "~1.6.2", - "mailgun-js": "^0.22.0", "lodash": "^4.17.11", + "mailgun-js": "^0.22.0", "mongoose": "^5.5.0", "morgan": "~1.9.0", "node-fetch": "^2.3.0", diff --git a/routes/index.js b/routes/index.js index 7cb9aad3..039e7000 100644 --- a/routes/index.js +++ b/routes/index.js @@ -6,7 +6,7 @@ var router = express.Router(); const UserController = require("../controllers/user"); const Validation = require("../validation/email"); const Paystack = require("../controllers/paystack"); - +var Admin = require("../models/admin"); var JobModel = require("../models/jobs"); /* GET home page. */ //router.get("/", Home.index); @@ -19,6 +19,43 @@ router.get("/", function(req, res, next) { // GET About us page router.get("/about", Home.aboutUs); +//Admin Page +router.get('/admin', Home.admin); + +router.post('/admin', function(req, res, next){ + if (req.body.username && req.body.password) { + Admin.authenticate(req.body.username, req.body.password, function (error, admin) { + if (error || !admin) { + var err = new Error('Wrong username or password.'); + err.status = 401; + return next(err); + } else { + req.session.adminId = admin._id; + return res.redirect('/managejobs'); + } + }); +} +}); + +//Authenticate Admin Login to Manage Jobs +router.get('/managejobs', function (req, res, next) { + Admin.findById(req.session.adminId) + .exec(function (error, admin) { + if (error) { + return next(error); + } else { + if (admin === null) { + var err = new Error('Not authorized! Go back!'); + err.status = 400; + res.redirect("/admin"); + // return next(err); + } else { + return res.render("manage_jobs"); + } + } + }); +}); + // GET Contact us page router.get("/contact", Home.contactUs); diff --git a/views/admin.hbs b/views/admin.hbs new file mode 100644 index 00000000..4b3b3365 --- /dev/null +++ b/views/admin.hbs @@ -0,0 +1,20 @@ + {{> header }} +
+ +
+
+

Admin Login

+

Authorised Personnel Only

+
+
+
+ + +
+ +
+
+
+
+ + {{> footer}} \ No newline at end of file From efaa4889f92d2804f60265231f823d1d79377137 Mon Sep 17 00:00:00 2001 From: Clarence Date: Mon, 15 Apr 2019 09:55:47 +0100 Subject: [PATCH 2/4] Added Vetting Process --- views/partials/header.hbs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/views/partials/header.hbs b/views/partials/header.hbs index 1cfef67a..259fd73a 100644 --- a/views/partials/header.hbs +++ b/views/partials/header.hbs @@ -77,6 +77,14 @@ +
+ + +
+
+ + +
From b57dd77ca1d824683d6319d8c5df670f47f6f612 Mon Sep 17 00:00:00 2001 From: Prismathic Date: Mon, 15 Apr 2019 16:27:29 +0100 Subject: [PATCH 3/4] Added Agent Schema and Fixed Validation --- models/agent.js | 4 ++-- validation/agent.js | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/models/agent.js b/models/agent.js index cb881bb2..907f0aa7 100644 --- a/models/agent.js +++ b/models/agent.js @@ -14,8 +14,8 @@ const agentSchema = new Schema({ type: String, required: true }, - job_role: { - type: String, + number: { + type: Number, required: true } }); diff --git a/validation/agent.js b/validation/agent.js index 5f8a0bff..b1fd5603 100644 --- a/validation/agent.js +++ b/validation/agent.js @@ -7,7 +7,7 @@ const validateAgentQueryText = data => { data.first_name = !isEmpty(data.first_name) ? data.first_name : ''; data.last_name = !isEmpty(data.last_name) ? data.last_name : ''; data.email = !isEmpty(data.email) ? data.email : ''; - data.job_role = !isEmpty(data.job_role) ? data.job_role : ''; + data.number = !isEmpty(data.number) ? data.number : ''; if (Validator.isEmpty(data.first_name)) { errors.first_name = 'First name is required'; @@ -22,8 +22,8 @@ const validateAgentQueryText = data => { errors.email = 'Email is invalid'; } - if (Validator.isEmpty(data.job_role)) { - errors.job_role = 'Job Role is required'; + if (Validator.isEmpty(data.number)) { + errors.number = 'Phone Number is required'; } return { From 7bc5bbbf5532cd00dc2746844659c44fdc5828d1 Mon Sep 17 00:00:00 2001 From: IDTitanium Date: Mon, 15 Apr 2019 17:44:11 +0100 Subject: [PATCH 4/4] Fixed Admin Login --- models/admin.js | 4 +++- routes/index.js | 3 +-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/models/admin.js b/models/admin.js index 1b8857f6..adf89614 100644 --- a/models/admin.js +++ b/models/admin.js @@ -14,7 +14,9 @@ const AdminSchema = new mongoose.Schema({ AdminSchema.statics.authenticate = function (username, password, callback) { - Admin.findOne({ username: username }) + Admin.findOne({ username: username, + password: password + }) .exec(function (err, admin) { if (err) { return callback(err) diff --git a/routes/index.js b/routes/index.js index 039e7000..39253020 100644 --- a/routes/index.js +++ b/routes/index.js @@ -50,7 +50,7 @@ router.get('/managejobs', function (req, res, next) { res.redirect("/admin"); // return next(err); } else { - return res.render("manage_jobs"); + return next(); } } }); @@ -66,7 +66,6 @@ router.get("/faqs", Home.faqs); router.get("/job_details", Home.job_details); //Job Routes -router.get("/jobs", Jobs.get_all); router.get("/jobs_json", Jobs.get_all_json); router.get("/jobs_json/:job_id", Jobs.get_one_json); router.get("/jobs_api", Jobs.fetchData);