Guest User

Untitled

a guest
Feb 15th, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.19 KB | None | 0 0
  1. var express = require('express');
  2. var mongoose = require('mongoose');
  3. var path = require('path');
  4. var bodyParser = require('body-parser');
  5. var cookieParser = require('cookie-parser');
  6. var session = require('express-session');
  7. const MongoStore = require('connect-mongo')(session);
  8. var flash = require('connect-flash');
  9. var logger = require('morgan');
  10. var passport = require('passport');
  11.  
  12. var passportSetup = require('./passport-setup');
  13.  
  14. // import routes
  15. var routes = require('./routes');
  16.  
  17. // setup express app
  18. var app = express();
  19. app.use(logger());
  20.  
  21. // setup connection with mongodb
  22. mongoose.connect( process.env.MONGODB_URI || "mongodb://smachs:***@d***.mlab.com:****/****-messenger",
  23. (err, db)=> {
  24. if (err) return new Error(err);
  25. console.log('🔐 Conexão estabelecida com banco de dados!');
  26. });
  27. // setup passport from different class
  28. passportSetup();
  29.  
  30. // set view engine and connection of application
  31. app.set('views', path.join(__dirname, 'views'));
  32. app.set('view engine', 'ejs');
  33. app.use(bodyParser.urlencoded({extended:false}));
  34. app.use(cookieParser());
  35.  
  36. // session storage based in mongodb
  37. var sessionStore = new MongoStore({
  38. url: 'mongodb://smachs:***@d***.mlab.com:****/****-messenger',
  39. ttl: 1 * 24 * 60 * 60, // = 1 days. Default
  40. autoReconnect: true
  41. })
  42.  
  43. // setup session based in express-session
  44. app.use(session({
  45. secret:"58585858585858",
  46. key: "connect.sid",
  47. resave: false,
  48. saveUninitialized: false,
  49. store: sessionStore
  50. }));
  51.  
  52. app.use(flash());
  53.  
  54. // public directory
  55. app.use(express.static(__dirname + '/public'));
  56.  
  57. // passport staff
  58. app.use(passport.initialize());
  59. app.use(passport.session());
  60.  
  61. // start routes
  62. app.use(routes);
  63.  
  64. // start server
  65. var port = process.env.PORT || 3000;
  66. var server = app.listen(port, () => { console.log('🌐 Servidor iniciado em localhost:', port); });;
  67.  
  68. // setup socket.io and passport.socketio packages
  69. var io = require('socket.io').listen(server);
  70. var passportSocketIo = require("passport.socketio");
  71.  
  72. // setup session found in express-session
  73. io.use(passportSocketIo.authorize({
  74. cookieParser: cookieParser, // the same middleware you registrer in express
  75. key: 'connect.sid', // the name of the cookie where express/connect stores its session_id
  76. secret: '58585858585858', // the session_secret to parse the cookie
  77. store: sessionStore, // we NEED to use a sessionstore. no memorystore please
  78. success: onAuthorizeSuccess, // *optional* callback on success - read more below
  79. fail: onAuthorizeFail, // *optional* callback on fail/error - read more below
  80. }));
  81.  
  82. // setup route just for clients authenticate
  83. function ensureAutheticated(req, res, next) {
  84. if (req.isAuthenticated()) next();
  85. else {
  86. req.flash("info", "Você precisa estar logado para visualizar essa página!");
  87. res.redirect('/login');
  88. }
  89. }
  90.  
  91. // setup current online clients
  92. var User = require('./models/user');
  93. app.use((req, res, next) => {
  94. res.locals.currentUser = req.user;
  95. res.locals.errors = req.flash('error');
  96. res.locals.infos = req.flash('info');
  97. next();
  98. });
  99.  
  100. // callback from passport.socketio
  101. function onAuthorizeSuccess(data, accept) {
  102. console.log('🗲 Passport-Socket.IO conectado com sucesso');
  103.  
  104. io.on('connection', function (socket) {
  105. console.log("🗲 Socket.IO-Native conectado com sucesso");
  106. });
  107.  
  108. // get current user online after authentication
  109. io.on('connection', function (socket) {
  110.  
  111. // get user details of documents in database
  112. app.get('/user-online', ensureAutheticated, (req, res) => {
  113. User.find()
  114. .sort({ createdAd: 'descending' })
  115. .exec((err, users) => {
  116. if (err) return next(err);
  117. // render response
  118. res.send({
  119. users: users
  120. })
  121. });
  122. });
  123. });
  124.  
  125. accept();
  126. }
  127.  
  128. function onAuthorizeFail(data, message, error, accept) {
  129. console.log('failed connection to socket.io:', data, message);
  130. if (error)
  131. accept(new Error(message));
  132. }
  133.  
  134. var mongoose = require('mongoose');
  135. var bcrypt = require('bcrypt-nodejs');
  136. const SALT_FACTOR = 10;
  137.  
  138. var userSchema = mongoose.Schema({
  139. username: { type: String, required: true, unique: true },
  140. password: { type: String, required: true },
  141. createdAt: { type: Date, default: Date.now },
  142. displayName: String,
  143. bio: String
  144. });
  145.  
  146. userSchema.methods.name = function() { return this.displayName || this.username;}
  147.  
  148. function noop() { };
  149.  
  150. userSchema.pre('save', function(done) {
  151. var user = this;
  152. console.log('USER: ' + JSON.stringify( user));
  153.  
  154. if (!( user.isModified('password'))) return done();
  155. bcrypt.genSalt(SALT_FACTOR, function(err, salt) {
  156. if (err) return done(err);
  157. bcrypt.hash(user.password, salt, noop,
  158. function (err, hashedPassword) {
  159. if (err) return done(err);
  160. user.password = hashedPassword;
  161. done();
  162. });
  163. });
  164. });
  165.  
  166. userSchema.methods.checkPassword = function(guess, done){
  167. bcrypt.compare(guess, this.password, function(err, isMatch){
  168. done(err,isMatch);
  169. });
  170. };
  171.  
  172. var User = mongoose.model('User', userSchema);
  173.  
  174. module.exports = User;
Add Comment
Please, Sign In to add comment