admin loggin in works.

This commit is contained in:
mrjvs
2018-10-12 21:23:57 +02:00
parent cae579879c
commit a5b546a99d
5 changed files with 570 additions and 416 deletions

View File

@@ -1,11 +1,19 @@
const common = require('../helpers/common');
function adminUserAuthenticationMiddleware(req, res, next) {
function authenticationRequired(req, res, next) {
if (req.isAuthenticated()) {
return next();
} else {
console.log('sending auth error');
common.sendApiAuthError(req, res);
}
common.sendApiAuthError(req, res);
}
module.exports = adminUserAuthenticationMiddleware;
function authenticationOptional(req, res, next) {
return next();
}
module.exports = {
authenticationRequired,
authenticationOptional
};

877
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -18,6 +18,7 @@
"bcrypt": "^3.0.1",
"body-parser": "^1.18.3",
"colors": "^1.1.2",
"connect-mongo": "^2.0.1",
"express": "^4.16.2",
"express-handlebars": "^3.0.0",
"express-session": "^1.15.6",

View File

@@ -9,6 +9,7 @@ file for handling admin panel routes
const router = require('express').Router();
// import dependencies
const passport = require('passport');
const common = require('../helpers/common');
const adminUserMiddleware = require('../middleware/admin-authentication');
const adminUser = require('../models/admin-user');
@@ -18,15 +19,45 @@ router.get('/admin', (req, res) => {
res.render('admin');
});
// admin login
router.post('/admin/login', (req, res) => {
common.sendApi404(req, res);
/*
* /admin/api/v1/login
*
* signs admin user in
*
* post {
* username - username of admin account
* password - password of admin account
* }
* return {
* code: http code
* success: boolean - true if login succesfull
* errors: Strings[messages]
* }
*/
router.post('/admin/api/v1/login', passport.authenticate('adminUserStrategy'), function (req, res) {
res.json({
message: 'sucessfull I guess',
isAuthed: req.isAuthenticated()
});
});
// endpoints
router.use('/admin/api/v1', adminUserMiddleware);
router.post('/admin/register', (req, res) => {
/*
* /admin/api/v1/register
* - requires admin auth
*
* registers a new admin user
*
* post {
* username - username of new admin account
* password - password of new admin account
* }
* return {
* code: httpcode,
* success: boolean,
* errors: Strings[messages]
* }
*/
router.post('/admin/api/v1/register', adminUserMiddleware.authenticationRequired, (req, res) => {
if (!req.body || !req.body.username || !req.body.password) {
// no/wrong post body
common.sendApiGenericError(req, res);
@@ -51,13 +82,23 @@ router.post('/admin/register', (req, res) => {
});
});
router.post('/admin/api/v1/ping', (req, res) => {
res.json({
success: true,
messsage: 'pong!'
/*
* /admin/api/v1/check
*
* checks if admin logged in
*
* return {
* code: httpcode
* success: boolean - true if admin logged in
* errors: Strings[messages]
* }
*/
router.get('/admin/api/v1/check', adminUserMiddleware.authenticationOptional, (req, res) => {
res.status(200).json({
code: 200,
success: req.isAuthenticated()
});
});
// export the router
module.exports = router;

View File

@@ -10,8 +10,9 @@ the file that contains the code to run the server
const express = require('express');
const handlebars = require('express-handlebars');
const session = require('express-session');
const mongoStore = require('connect-mongo')(session);
const passport = require('passport');
const LocalStrategy = require('passport').Strategy;
const LocalStrategy = require('passport-local').Strategy;
const bcrypt = require('bcrypt');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
@@ -41,7 +42,18 @@ connection.on('error', console.error.bind(console, 'connection error:'));
// setup session
app.use(session({
secret: config.secrets.session,
//cookie: { secure: true } // use when https is enabled
saveUninitialized: true,
resave: true,
cookie: {
maxAge: 3600000,
httpOnly: true//, // remove on production
/*secure: true*/
},
// using store session on MongoDB using express-session + connect
store: new mongoStore({
mongooseConnection: connection,
collection: 'sessions'
})
}));
// setup authentication
@@ -62,6 +74,7 @@ passport.use('adminUserStrategy', new LocalStrategy(
return done(null, false);
}
console.log('info correct');
// password is correct, return user
return done(null, user);
@@ -74,6 +87,16 @@ passport.use('adminUserStrategy', new LocalStrategy(
});
}
));
//Configuring app to have sessions
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
adminUserModel.findById(id, function(err, user) {
done(err, user);
});
});
// load the handlebars module
app.engine('.hbs', handlebars({