app.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. 'use strict';
  2. // nodejs modules
  3. const path = require('path'),
  4. fs = require('fs'),
  5. os = require('os');
  6. process.env.NODE_CONFIG_DIR = `${process.cwd()}/backend/config`;
  7. // npm modules
  8. const express = require('express'),
  9. session = require('express-session'),
  10. mongoose = require('mongoose'),
  11. mongoStore = require('connect-mongo')(session),
  12. bodyParser = require('body-parser'),
  13. config = require('config'),
  14. request = require('request'),
  15. passport = require('passport'),
  16. LocalStrategy = require('passport-local').Strategy,
  17. passportSocketIo = require("passport.socketio");
  18. // global module
  19. const global = require('./logic/global');
  20. // database
  21. const MongoDB = mongoose.connect('mongodb://localhost:27017/musare').connection;
  22. MongoDB.on('error', (err) => {
  23. console.log('Database error: ' + err.message);
  24. });
  25. MongoDB.once('open', () => {
  26. console.log('Connected to database');
  27. });
  28. // setup express and socket.io
  29. const app = express(MongoDB);
  30. const server = app.listen(80);
  31. global.io = require('socket.io')(server);
  32. // other custom modules
  33. const coreHandler = require('./logic/coreHandler'),
  34. socketHandler = require('./logic/socketHandler'),
  35. expressHandler = require('./logic/expressHandler');
  36. global.db = {
  37. user: require('./schemas/user')(mongoose),
  38. station: require('./schemas/station')(mongoose)
  39. };
  40. app.use(passport.initialize());
  41. app.use(passport.session());
  42. app.use(session({
  43. secret: config.get('secret'),
  44. store: new mongoStore({ mongooseConnection: MongoDB }),
  45. resave: true,
  46. saveUninitialized: true
  47. }));
  48. global.io.use(passportSocketIo.authorize({
  49. secret: config.get('secret'),
  50. store: new mongoStore({ mongooseConnection: MongoDB })
  51. }));
  52. passport.serializeUser((user, done) => {
  53. done(null, user);
  54. });
  55. passport.deserializeUser((user, done) => {
  56. done(null, user);
  57. });
  58. passport.use('local-signup', new LocalStrategy((username, password, cb) => {
  59. process.nextTick(() => {
  60. global.db.user.findOne({'username' : username}, function(err, user) {
  61. if (err) return cb(err);
  62. if (user) return cb(null, false);
  63. else {
  64. let newUser = new global.db.user({
  65. username
  66. });
  67. newUser.save(function(err) {
  68. if (err) throw err;
  69. return cb(null, newUser);
  70. });
  71. }
  72. });
  73. });
  74. }));
  75. passport.use('local-login', new LocalStrategy((username, password, cb) => {
  76. process.nextTick(() => {
  77. global.db.user.findOne({username}, (err, user) => {
  78. if (err) return cb(err);
  79. if (!user) return cb(null, false);
  80. if (!user.services.token.password == password) return done(null, false);
  81. return done(null, user);
  82. });
  83. });
  84. }));
  85. app.use(bodyParser.json());
  86. app.use(bodyParser.urlencoded({
  87. extended: true
  88. }));
  89. app.use(express.static(__dirname + '/../frontend/build/'));
  90. socketHandler(coreHandler, global.io);
  91. expressHandler(coreHandler, app);