Advertisement
Guest User

Untitled

a guest
Feb 4th, 2017
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.95 KB | None | 0 0
  1. 'use strict';
  2.  
  3. const express = require('express');
  4. const bodyParser = require('body-parser');
  5. const fccTesting = require('./freeCodeCamp/fcctesting.js');
  6. const session = require('express-session');
  7. const passport = require('passport');
  8. const mongo = require('mongodb').MongoClient;
  9. const ObjectID = require('mongodb').ObjectID;
  10. const LocalStrategy = require('passport-local');
  11.  
  12. const app = express();
  13.  
  14. fccTesting(app); //For FCC testing purposes
  15. app.use('/public', express.static(process.cwd() + '/public'));
  16. app.use(bodyParser.json());
  17. app.use(bodyParser.urlencoded({ extended: true }));
  18.  
  19. app.set('view engine', 'pug')
  20.  
  21. app.use(session({
  22. secret: process.env.SESSION_SECRET,
  23. resave: true,
  24. saveUninitialized: true,
  25. }));
  26. app.use(passport.initialize());
  27. app.use(passport.session());
  28.  
  29. mongo.connect(process.env.DATABASE, (err, db) => {
  30. if(err) {
  31. console.log('Database error: ' + err);
  32. } else {
  33. console.log('Successful database connection');
  34.  
  35. passport.serializeUser((user, done) => {
  36. done(null, user._id);
  37. });
  38.  
  39. passport.deserializeUser((id, done) => {
  40. db.collection('users').findOne(
  41. {_id: new ObjectID(id)},
  42. (err, doc) => {
  43. done(null, doc);
  44. }
  45. );
  46. });
  47.  
  48. passport.use(new LocalStrategy(
  49. function(username, password, done) {
  50. db.collection('users').findOne({ username: username }, function (err, user) {
  51. console.log('User '+ username +' attempted to log in.');
  52. if (err) { return done(err); }
  53. if (!user) { return done(null, false); }
  54. if (password !== user.password) { return done(null, false); }
  55. return done(null, user);
  56. });
  57. }
  58. ));
  59.  
  60.  
  61. function ensureAuthenticated(req, res, next) {
  62. if (req.isAuthenticated()) {
  63. return next();
  64. }
  65. res.redirect('/');
  66. };
  67.  
  68.  
  69. app.route('/')
  70. .get((req, res) => {
  71. res.render(process.cwd() + '/views/pug/index', {title: 'Hello', message: 'login', showLogin: true, showRegistration: true});
  72. });
  73.  
  74. app.route('/login')
  75. .post(passport.authenticate('local', { failureRedirect: '/' }),(req,res) => {
  76. res.redirect('/profile');
  77. });
  78.  
  79. app.route('/profile')
  80. .get(ensureAuthenticated, (req, res) => {
  81. res.render(process.cwd() + '/views/pug/profile', {username: req.user.username});
  82. });
  83.  
  84. app.route('/register')
  85. .post((req, res, next) => {
  86. db.collection('users').findOne({ username: req.body.username }, function (err, user) {
  87. if(err) {
  88. next(err);
  89. } else if (user) {
  90. res.redirect('/');
  91. } else {
  92. db.collection('users').insertOne(
  93. {username: req.body.username,
  94. password: req.body.password},
  95. (err, doc) => {
  96. if(err) {
  97. res.redirect('/');
  98. } else {
  99. next(null, user);
  100. }
  101. }
  102. )
  103. }
  104. })},
  105. passport.authenticate('local', { failureRedirect: '/' }),
  106. (req, res, next) => {
  107. res.redirect('/profile');
  108. }
  109. );
  110.  
  111. app.route('/logout')
  112. .get((req, res) => {
  113. req.logout();
  114. res.redirect('/');
  115. });
  116.  
  117. app.use((req, res, next) => {
  118. res.status(404)
  119. .type('text')
  120. .send('Not Found');
  121. });
  122.  
  123. app.listen(process.env.PORT || 3000, () => {
  124. console.log("Listening on port " + process.env.PORT);
  125. });
  126. }});
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement