app.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  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. GitHubStrategy = require('passport-github').Strategy,
  18. DiscordStrategy = require('passport-discord').Strategy,
  19. passportSocketIo = require("passport.socketio");
  20. // global module
  21. const global = require('./logic/global');
  22. // database
  23. const MongoDB = mongoose.connect('mongodb://localhost:27017/musare').connection;
  24. MongoDB.on('error', (err) => {
  25. console.log('Database error: ' + err.message);
  26. });
  27. MongoDB.once('open', () => {
  28. console.log('Connected to database');
  29. setupExpress();
  30. });
  31. // setup express and socket.io
  32. function setupExpress() {
  33. const app = express(MongoDB);
  34. const server = app.listen(80);
  35. global.io = require('socket.io')(server);
  36. // other custom modules
  37. const coreHandler = require('./logic/coreHandler'),
  38. socketHandler = require('./logic/socketHandler'),
  39. expressHandler = require('./logic/expressHandler');
  40. global.db = {
  41. user: require('./schemas/user')(mongoose),
  42. station: require('./schemas/station')(mongoose)
  43. };
  44. console.log("Test");
  45. const mongoStore = new MongoStore({'mongooseConnection': MongoDB});
  46. app.use(session({
  47. secret: config.get('secret'),
  48. key: 'connect.sid',
  49. store: mongoStore,
  50. resave: true,
  51. saveUninitialized: true
  52. }));
  53. global.io.use(passportSocketIo.authorize({
  54. cookieParser: require('cookie-parser'),
  55. key: 'connect.sid',
  56. secret: config.get('secret'),
  57. store: mongoStore,
  58. success: function (data, accept) {
  59. console.log('successful connection to socket.io');
  60. accept();
  61. },
  62. fail: function (data, message, error, accept) {
  63. console.log(message);
  64. if (error && message !== "Passport was not initialized")
  65. throw new Error(message);
  66. accept();
  67. }
  68. }));
  69. app.use(passport.initialize());
  70. app.use(passport.session());
  71. passport.serializeUser((user, done) => {
  72. done(null, user);
  73. });
  74. passport.deserializeUser((user, done) => {
  75. done(null, user);
  76. });
  77. passport.use(new LocalStrategy({usernameField: 'email'}, (email, password, done) => {
  78. console.log(email, password);
  79. process.nextTick(() => {
  80. console.log(email, password);
  81. global.db.user.findOne({"email.address": email}, (err, user) => {
  82. if (err) return done(err);
  83. if (!user) return done(null, false);
  84. //if (!user.services.token.password == password) return done(null, false);
  85. return done(null, user);
  86. });
  87. });
  88. }));
  89. passport.use(new GitHubStrategy({
  90. clientID: config.get("apis.github.client"),
  91. clientSecret: config.get("apis.github.secret"),
  92. callbackURL: `${config.get("domain")}/users/github/callback`
  93. },
  94. function(accessToken, refreshToken, profile, done) {
  95. console.log(accessToken, refreshToken, profile);
  96. /*User.findOrCreate({ githubId: profile.id }, function (err, user) {
  97. return cb(err, user);
  98. });*/
  99. global.db.user.findOne({"services.github.token": profile._json.id}, (err, user) => {
  100. if (err) return done(err);
  101. if (!user) {
  102. let newUser = new global.db.user({
  103. username: profile.username,
  104. services: {
  105. github: {
  106. token: profile._json.id
  107. }
  108. }
  109. });
  110. newUser.save(function (err) {
  111. if (err) throw err;
  112. return done(null, newUser);
  113. });
  114. } else {
  115. return done(null, user);
  116. }
  117. });
  118. }
  119. ));
  120. passport.use(new DiscordStrategy({
  121. clientID: config.get("apis.discord.client"),
  122. clientSecret: config.get("apis.discord.secret"),
  123. callbackURL: `${config.get("domain")}/users/discord/callback`
  124. },
  125. function(accessToken, refreshToken, profile, done) {
  126. console.log(accessToken, refreshToken, profile);
  127. global.db.user.findOne({"services.discord.token": profile.id}, (err, user) => {
  128. if (err) return done(err);
  129. if (!user) {
  130. let newUser = new global.db.user({
  131. username: profile.username,
  132. services: {
  133. discord: {
  134. token: profile.id
  135. }
  136. }
  137. });
  138. newUser.save(function (err) {
  139. if (err) throw err;
  140. return done(null, newUser);
  141. });
  142. } else {
  143. return done(null, user);
  144. }
  145. });
  146. }
  147. ));
  148. app.use(bodyParser.json());
  149. app.use(bodyParser.urlencoded({
  150. extended: true
  151. }));
  152. app.use(express.static(__dirname + '/../frontend/build/'));
  153. socketHandler(coreHandler, global.io);
  154. expressHandler(coreHandler, app);
  155. }