Advertisement
razyc

Untitled

Jan 30th, 2020
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. if (process.env.NODE_ENV !== 'production') {
  2.     require('dotenv').config()
  3.   }
  4.   const io = require('socket.io')(3001)
  5.   const express = require('express')
  6.   const app = express()
  7.   const bcrypt = require('bcrypt')
  8.   const passport = require('passport')
  9.   const flash = require('express-flash')
  10.   const session = require('express-session')
  11.   const methodOverride = require('method-override')
  12.  
  13.   const initializePassport = require('./passport-config')
  14.   initializePassport(
  15.     passport,
  16.     email => users.find(user => user.email === email),
  17.     id => users.find(user => user.id === id)
  18.   )
  19.   var engines = require('consolidate');
  20.   app.set('views', __dirname + '/views');
  21.   app.engine('html', engines.mustache);
  22.   app.set('view engine', 'html');
  23.  
  24.   const users = []
  25.   io.on('connection', socket => {
  26.     socket.on('new-user', name => {
  27.       users[user.id] = name
  28.       socket.broadcast.emit('user-connected', name)
  29.     })
  30.     socket.on('send-chat-message', message => {
  31.       socket.broadcast.emit('chat-message', { message: message, name: users[user.id] })
  32.     })
  33.     socket.on('disconnect', () => {
  34.       socket.broadcast.emit('user-disconnected', users[user.id])
  35.       delete users[user.id]
  36.     })
  37.   })
  38.  
  39.   app.set('view-engine', 'ejs')
  40.   app.use(express.urlencoded({ extended: false }))
  41.   app.use(flash())
  42.   app.use(session({
  43.     secret: process.env.SESSION_SECRET,
  44.     resave: false,
  45.     saveUninitialized: false
  46.   }))
  47.   app.use(passport.initialize())
  48.   app.use(passport.session())
  49.   app.use(methodOverride('_method'))
  50.  
  51.   app.use(express.static(path.join(__dirname, 'public')));
  52.   app.set('view engine', 'html');
  53.   app.get('/', function(req, res, next){
  54.     res.render('index.html');
  55. });
  56.  
  57.   app.get('/login', checkNotAuthenticated, (req, res) => {
  58.     res.render('login.ejs')
  59.   })
  60.  
  61.   app.post('/login', checkNotAuthenticated, passport.authenticate('local', {
  62.     successRedirect: '/',
  63.     failureRedirect: '/login',
  64.     failureFlash: true
  65.   }))
  66.  
  67.   app.get('/register', checkNotAuthenticated, (req, res) => {
  68.     res.render('register.ejs')
  69.   })
  70.  
  71.   app.post('/register', checkNotAuthenticated, async (req, res) => {
  72.     try {
  73.       const hashedPassword = await bcrypt.hash(req.body.password, 10)
  74.       users.push({
  75.         id: Date.now().toString(),
  76.         name: req.body.name,
  77.         email: req.body.email,
  78.         password: hashedPassword
  79.       })
  80.       res.redirect('/login')
  81.     } catch {
  82.       res.redirect('/register')
  83.     }
  84.   })
  85.  
  86.   app.delete('/logout', (req, res) => {
  87.     req.logOut()
  88.     res.redirect('/login')
  89.   })
  90.  
  91.   function checkAuthenticated(req, res, next) {
  92.     if (req.isAuthenticated()) {
  93.       return next()
  94.     }
  95.  
  96.     res.redirect('/login')
  97.   }
  98.  
  99.   function checkNotAuthenticated(req, res, next) {
  100.     if (req.isAuthenticated()) {
  101.       return res.redirect('/')
  102.     }
  103.     next()
  104.   }
  105.  
  106.   app.listen(3000)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement