Skip to content
Snippets Groups Projects
Select Git revision
  • 63a80049615bb47f4c0aa64bf110f78fb05ef4a8
  • master default
2 results

.classpath

Blame
  • 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}`);
      });
    });