123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- 'use strict';
- // nodejs modules
- const path = require('path'),
- fs = require('fs'),
- os = require('os');
- process.env.NODE_CONFIG_DIR = `${process.cwd()}/backend/config`;
- // npm modules
- const express = require('express'),
- session = require('express-session'),
- mongoose = require('mongoose'),
- MongoStore = require('connect-mongo')(session),
- bodyParser = require('body-parser'),
- config = require('config'),
- request = require('request'),
- passport = require('passport'),
- bcrypt = require('bcrypt'),
- LocalStrategy = require('passport-local').Strategy,
- GitHubStrategy = require('passport-github').Strategy,
- DiscordStrategy = require('passport-discord').Strategy,
- passportSocketIo = require("passport.socketio");
- // global module
- const global = require('./logic/global');
- // database
- const MongoDB = mongoose.connect('mongodb://localhost:27017/musare').connection;
- MongoDB.on('error', (err) => {
- console.log('Database error: ' + err.message);
- });
- MongoDB.once('open', () => {
- console.log('Connected to database');
- setupExpress();
- });
- // setup express and socket.io
- function setupExpress() {
- const app = express(MongoDB);
- const server = app.listen(80);
- global.io = require('socket.io')(server);
- // other custom modules
- const coreHandler = require('./logic/coreHandler'),
- socketHandler = require('./logic/socketHandler'),
- expressHandler = require('./logic/expressHandler');
- global.db = {
- user: require('./schemas/user')(mongoose),
- station: require('./schemas/station')(mongoose),
- song: require('./schemas/song')(mongoose)
- };
- const mongoStore = new MongoStore({'mongooseConnection': MongoDB});
- app.use(session({
- secret: config.get('secret'),
- key: 'connect.sid',
- store: mongoStore,
- resave: true,
- saveUninitialized: true
- }));
- global.io.use(passportSocketIo.authorize({
- cookieParser: require('cookie-parser'),
- key: 'connect.sid',
- secret: config.get('secret'),
- store: mongoStore,
- success: function (data, accept) {
- console.log('successful connection to socket.io');
- accept();
- },
- fail: function (data, message, error, accept) {
- console.log(message);
- if (error && message !== "Passport was not initialized")
- throw new Error(message);
- accept();
- }
- }));
- app.use(passport.initialize());
- app.use(passport.session());
- passport.serializeUser((user, done) => {
- done(null, user);
- });
- passport.deserializeUser((user, done) => {
- done(null, user);
- });
- passport.use(new LocalStrategy({usernameField: 'email'}, (email, password, done) => {
- console.log(email, password);
- process.nextTick(() => {
- console.log(email, password);
- global.db.user.findOne({"email.address": email}, (err, user) => {
- if (err) return done(err);
- if (!user) return done(null, false);
- bcrypt.compare(password, user.services.password.password, function(err, res) {
- if (res) {
- return done(null, user);
- } else if (err) {
- return done(err);
- } else {
- return done(null, false);
- }
- });
- });
- });
- }));
- passport.use(new GitHubStrategy({
- clientID: config.get("apis.github.client"),
- clientSecret: config.get("apis.github.secret"),
- callbackURL: `${config.get("domain")}/users/github/callback`
- },
- function(accessToken, refreshToken, profile, done) {
- console.log('new github auth', accessToken, refreshToken, profile);
- /*User.findOrCreate({ githubId: profile.id }, function (err, user) {
- return cb(err, user);
- });*/
- global.db.user.findOne({"services.github.id": profile._json.id}, (err, id) => {
- if (err) return done(err);
- if (!id) {
- global.db.user.findOne({"username": profile.username}, (err, username) => {
- if (err) return done(err);
- if (!username) {
- let newUser = new global.db.user({
- username: profile.username,
- services: {
- discord: {
- id: profile.id
- }
- }
- });
- newUser.save(err => {
- if (err) throw err;
- return done(null, newUser);
- });
- } else {
- return done(null, user);
- }
- });
- }
- });
- }
- ));
- passport.use(new DiscordStrategy({
- clientID: config.get("apis.discord.client"),
- clientSecret: config.get("apis.discord.secret"),
- callbackURL: `${config.get("domain")}/users/discord/callback`
- },
- function(accessToken, refreshToken, profile, done) {
- console.log('new discord auth', accessToken, refreshToken, profile);
- global.db.user.findOne({"services.discord.id": profile.id}, (err, id) => {
- if (err) return done(err);
- if (!id) {
- global.db.user.findOne({"username": profile.username}, (err, username) => {
- if (err) return done(err);
- if (!username) {
- let newUser = new global.db.user({
- username: profile.username,
- services: {
- discord: {
- id: profile.id
- }
- }
- });
- newUser.save(err => {
- if (err) throw err;
- return done(null, newUser);
- });
- } else {
- return done(null, user);
- }
- });
- }
- });
- }
- ));
- app.use(bodyParser.json());
- app.use(bodyParser.urlencoded({
- extended: true
- }));
- app.use(express.static(__dirname + '/../frontend/build/'));
- socketHandler(coreHandler, global.io);
- expressHandler(coreHandler, app);
- }
|