123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- 'use strict';
- // nodejs modules
- const path = require('path'),
- fs = require('fs'),
- os = require('os');
- process.env.NODE_CONFIG_DIR = `${__dirname}/config`;
- // npm modules
- const express = require('express'),
- session = require('express-session'),
- mongoose = require('mongoose'),
- bodyParser = require('body-parser'),
- config = require('config'),
- cookieParser = require('cookie-parser'),
- cors = require('cors'),
- 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 globals = require('./logic/globals');
- // database
- globals.db.connection = mongoose.connect('mongodb://mongo:27017/musare').connection;
- globals.db.connection.on('error', err => console.log('Database error: ' + err.message));
- globals.db.connection.once('open', _ => {
- console.log('Connected to database');
- const app = express(globals.db.connection);
- const server = app.listen(80);
- globals.io = require('socket.io')(server);
- // load all the schemas from the schemas folder into an object
- globals.db.models =
- // get an array of all the files in the schemas folder
- fs.readdirSync(`${__dirname}/schemas`)
- // remove the .js from the file names
- .map(name => name.split('.').shift())
- // create an object with
- .reduce((db, name) => {
- db[name] = mongoose.model(name, new mongoose.Schema(require(`${__dirname}/schemas/${name}`)));
- return db;
- }, {});
- globals.db.store = new (require('connect-mongo')(session))({ 'mongooseConnection': globals.db.connection });
- app.use(session({
- secret: config.get('secret'),
- key: 'connect.sid',
- store: globals.db.store,
- resave: true,
- saveUninitialized: true
- }));
- app.use(passport.initialize());
- app.use(passport.session());
- passport.serializeUser((user, done) => done(null, user));
- passport.deserializeUser((user, done) => done(null, user));
- globals.io.use(passportSocketIo.authorize({
- passport: require('passport'),
- cookieParser: require('cookie-parser'),
- key: 'connect.sid',
- secret: config.get('secret'),
- store: globals.db.store,
- success: (data, accept) => {
- console.log('success', data);
- accept();
- },
- fail: (data, message, error, accept) => {
- console.log('error', error, message);
- accept();
- }
- }));
- passport.use(new LocalStrategy({ usernameField: 'email' }, (email, password, done) => {
- process.nextTick(() => {
- globals.db.models.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);
- }
- });
- });
- });
- }));
- app.use(bodyParser.json());
- app.use(bodyParser.urlencoded({ extended: true }));
- let corsOptions = Object.assign({}, config.get('cors'));
- app.use(cors(corsOptions));
- app.options('*', cors(corsOptions));
- const coreHandler = require('./logic/coreHandler');
- require('./logic/socketHandler')(coreHandler, globals.io);
- require('./logic/expressHandler')(coreHandler, app);
- });
|