Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Recent update #2

Merged
merged 8 commits into from
Apr 15, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -50,9 +50,13 @@ app.use(
session({
secret: "dfgdhhahg15sdff",
saveUninitialized: false,
resave: false
resave: true,
store: new MongoStore({
mongooseConnection: db
})
})
);

app.use(flash());

//locals
Expand Down
4 changes: 4 additions & 0 deletions controllers/home.js
Original file line number Diff line number Diff line change
Expand Up @@ -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?
Expand Down
37 changes: 37 additions & 0 deletions models/admin.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
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,
password: password
})
.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;
4 changes: 2 additions & 2 deletions models/agent.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ const agentSchema = new Schema({
type: String,
required: true
},
job_role: {
type: String,
number: {
type: Number,
required: true
}
});
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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",
Expand Down
40 changes: 38 additions & 2 deletions routes/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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 next();
}
}
});
});

// GET Contact us page
router.get("/contact", Home.contactUs);

Expand All @@ -29,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);
Expand Down
6 changes: 3 additions & 3 deletions validation/agent.js
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -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 {
Expand Down
20 changes: 20 additions & 0 deletions views/admin.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{{> header }}
<div class="container d-flex">

<div style="text-align: center;">
<div class="form-text" style="display: inline-block;">
<h2 class="text-center">Admin Login</h2>
<p class="text-center">Authorised Personnel Only</p>
</div>
<div style="display: inline-block;">
<form action="/admin" method="POST">
<input style="margin-right: 15px;" type="text" name="username" placeholder="Username" required>
<input style="margin-right: 15px;" type="password" name="password" placeholder="Password" required>
<br/>
<button style="margin-top: 10px; margin-bottom: 10px;" class="btn btn-primary">Login</button>
</form>
</div>
</div>
</div>

<script src="views/dist/js/bootstrap.min.js"></script> {{> footer}}
8 changes: 8 additions & 0 deletions views/partials/header.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,14 @@
<input type="tel" name="phoneNo" class="form-control my-0" placeholder="+234 7036836753" minlength="11" pattern="[+]{0,1}[0-9\s]+"
maxlength="16" required>
</div>
<div class="form-group">
<label for="" class="my-0">Github Profile</label>
<input type="link" name="github" class="form-control my-0" placeholder="github.com/username" required>
</div>
<div class="form-group">
<label for="" class="my-0">LinknIn Profile</label>
<input type="link" name="linkedin" class="form-control my-0" placeholder="Enter Link" required>
</div>
<input value="Pay" type="submit" name="phone" class="btn btn-custom px-5 mt-4"></input>
</form>
</div>
Expand Down