Select Git revision
-
Wen Yao Jin authoredWen Yao Jin authored
index.js 2.10 KiB
const express = require('express');
const session = require('express-session');
const bodyParser = require('body-parser');
const User = require('./models/user');
const mongoose = require('mongoose');
const bcrypt = require('bcrypt');
const morgan = require('morgan');
const config = require('./config.json');
// Utils
const render = (req, res, view, options) => res.render(view, {
...options,
user: req.session.user,
nextUrl: req.url,
});
// Configuration
const app = express();
app.set('view engine', 'pug');
app.use(morgan('tiny'));
app.use(session({
secret: config.secret,
resave: false,
saveUninitialized: false
}));
// Middlewares
app.use(bodyParser.urlencoded({
extended: false,
}));
app.use((req, res, next) => {
if (req.session.user || ['/', '/signup', '/login'].includes(req.url)) {
next();
} else {
return res.redirect('/signup');
}
});
app.get('/', (req, res) => {
return render(req, res, 'home');
});
app.get('/signup', (req, res) => {
return render(req, res, 'signup');
});
app.post('/signup', (req, res) => {
const passwordHash = bcrypt.hashSync(req.body.password, config.cryptRounds);
User.create(req.body, (err, user) => {
err ? console.error(err) : null;
user.passwordHash = passwordHash;
user.save();
req.session.user = user;
return res.redirect('/');
});
});
app.post('/login', (req, res) => {
User.findOne({ username: req.body.username }, (err, user) => {
err ? console.error(err) : null;
if (bcrypt.compareSync(req.body.password, user.passwordHash)) {
req.session.user = user;
return res.redirect(req.query.nextUrl || '/');
} else {
console.error("Bad authentication");
return res.redirect('/signup');
}
});
});
app.post('/logout', (req, res) => {
req.session.destroy();
return res.redirect('/');
})
mongoose.connect('mongodb://localhost/rolegame', err => {
if (err) {
console.error('ERROR Unable to connect to Mongo database')
} else {
console.log('Server connected to Mongo database');
}
app.listen(config.port, () => {
console.log(`Server listening on http://localhost:${config.port}`);
});
});