|  | @@ -1,4 +1,4 @@
 | 
	
		
			
				|  |  | - 'use strict';
 | 
	
		
			
				|  |  | +'use strict';
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // nodejs modules
 | 
	
		
			
				|  |  |  const path = require('path'),
 | 
	
	
		
			
				|  | @@ -11,10 +11,9 @@ process.env.NODE_CONFIG_DIR = `${__dirname}/config`;
 | 
	
		
			
				|  |  |  const express          = require('express'),
 | 
	
		
			
				|  |  |        session          = require('express-session'),
 | 
	
		
			
				|  |  |        mongoose         = require('mongoose'),
 | 
	
		
			
				|  |  | -      MongoStore       = require('connect-mongo')(session),
 | 
	
		
			
				|  |  |        bodyParser       = require('body-parser'),
 | 
	
		
			
				|  |  |        config           = require('config'),
 | 
	
		
			
				|  |  | -	  cookieParser	   = require('cookie-parser'),
 | 
	
		
			
				|  |  | +      cookieParser     = require('cookie-parser'),
 | 
	
		
			
				|  |  |        cors             = require('cors'),
 | 
	
		
			
				|  |  |        request          = require('request'),
 | 
	
		
			
				|  |  |        passport         = require('passport'),
 | 
	
	
		
			
				|  | @@ -25,43 +24,40 @@ const express          = require('express'),
 | 
	
		
			
				|  |  |        passportSocketIo = require("passport.socketio");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // global module
 | 
	
		
			
				|  |  | -const global = require('./logic/global');
 | 
	
		
			
				|  |  | +const globals = require('./logic/globals');
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // database
 | 
	
		
			
				|  |  | -const MongoDB = mongoose.connect('mongodb://mongo:27017/musare').connection;
 | 
	
		
			
				|  |  | +globals.db.connection = mongoose.connect('mongodb://mongo:27017/musare').connection;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -MongoDB.on('error', err => {
 | 
	
		
			
				|  |  | -	console.log('Database error: ' + err.message);
 | 
	
		
			
				|  |  | -});
 | 
	
		
			
				|  |  | +globals.db.connection.on('error', err => console.log('Database error: ' + err.message));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +globals.db.connection.once('open', _ => {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -MongoDB.once('open', () => {
 | 
	
		
			
				|  |  |  	console.log('Connected to database');
 | 
	
		
			
				|  |  | -	setupExpress();
 | 
	
		
			
				|  |  | -});
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -// setup express and socket.io
 | 
	
		
			
				|  |  | -function setupExpress() {
 | 
	
		
			
				|  |  | -	const app = express(MongoDB);
 | 
	
		
			
				|  |  | +	const app = express(globals.db.connection);
 | 
	
		
			
				|  |  |  	const server = app.listen(80);
 | 
	
		
			
				|  |  | -	global.io = require('socket.io')(server);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	global.db = {
 | 
	
		
			
				|  |  | -		user: require('./schemas/user')(mongoose),
 | 
	
		
			
				|  |  | -		station: require('./schemas/station')(mongoose),
 | 
	
		
			
				|  |  | -		song: require('./schemas/song')(mongoose)
 | 
	
		
			
				|  |  | -	};
 | 
	
		
			
				|  |  | +	globals.io = require('socket.io')(server);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	// other custom modules
 | 
	
		
			
				|  |  | -	const coreHandler = require('./logic/coreHandler'),
 | 
	
		
			
				|  |  | -		  socketHandler = require('./logic/socketHandler'),
 | 
	
		
			
				|  |  | -		  expressHandler = require('./logic/expressHandler');
 | 
	
		
			
				|  |  | +	// 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;
 | 
	
		
			
				|  |  | +		}, {});
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	const mongoStore = new MongoStore({'mongooseConnection': MongoDB});
 | 
	
		
			
				|  |  | +	globals.db.store = new (require('connect-mongo')(session))({ 'mongooseConnection': globals.db.connection });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	app.use(session({
 | 
	
		
			
				|  |  |  		secret: config.get('secret'),
 | 
	
		
			
				|  |  |  		key: 'connect.sid',
 | 
	
		
			
				|  |  | -		store: mongoStore,
 | 
	
		
			
				|  |  | +		store: globals.db.store,
 | 
	
		
			
				|  |  |  		resave: true,
 | 
	
		
			
				|  |  |  		saveUninitialized: true
 | 
	
		
			
				|  |  |  	}));
 | 
	
	
		
			
				|  | @@ -69,20 +65,15 @@ function setupExpress() {
 | 
	
		
			
				|  |  |  	app.use(passport.initialize());
 | 
	
		
			
				|  |  |  	app.use(passport.session());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	passport.serializeUser((user, done) => {
 | 
	
		
			
				|  |  | -		done(null, user);
 | 
	
		
			
				|  |  | -	});
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	passport.deserializeUser((user, done) => {
 | 
	
		
			
				|  |  | -		done(null, user);
 | 
	
		
			
				|  |  | -	});
 | 
	
		
			
				|  |  | +	passport.serializeUser((user, done) => done(null, user));
 | 
	
		
			
				|  |  | +	passport.deserializeUser((user, done) => done(null, user));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	global.io.use(passportSocketIo.authorize({
 | 
	
		
			
				|  |  | +	globals.io.use(passportSocketIo.authorize({
 | 
	
		
			
				|  |  |  		passport: require('passport'),
 | 
	
		
			
				|  |  |  		cookieParser: require('cookie-parser'),
 | 
	
		
			
				|  |  |  		key: 'connect.sid',
 | 
	
		
			
				|  |  |  		secret: config.get('secret'),
 | 
	
		
			
				|  |  | -		store: mongoStore,
 | 
	
		
			
				|  |  | +		store: globals.db.store,
 | 
	
		
			
				|  |  |  		success: (data, accept) => {
 | 
	
		
			
				|  |  |  			console.log('success', data);
 | 
	
		
			
				|  |  |  			accept();
 | 
	
	
		
			
				|  | @@ -93,9 +84,9 @@ function setupExpress() {
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	passport.use(new LocalStrategy({usernameField: 'email'}, (email, password, done) => {
 | 
	
		
			
				|  |  | +	passport.use(new LocalStrategy({ usernameField: 'email' }, (email, password, done) => {
 | 
	
		
			
				|  |  |  		process.nextTick(() => {
 | 
	
		
			
				|  |  | -			global.db.user.findOne({"email.address": email}, (err, user) => {
 | 
	
		
			
				|  |  | +			globals.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) {
 | 
	
	
		
			
				|  | @@ -112,12 +103,15 @@ function setupExpress() {
 | 
	
		
			
				|  |  |  	}));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	app.use(bodyParser.json());
 | 
	
		
			
				|  |  | -	app.use(bodyParser.urlencoded({
 | 
	
		
			
				|  |  | -		extended: true
 | 
	
		
			
				|  |  | -	}));
 | 
	
		
			
				|  |  | +	app.use(bodyParser.urlencoded({ extended: true }));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	let corsOptions = Object.assign({}, config.get('cors'));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	app.use(cors());
 | 
	
		
			
				|  |  | +	app.use(cors(corsOptions));
 | 
	
		
			
				|  |  | +	app.options('*', cors(corsOptions));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	const coreHandler = require('./logic/coreHandler');
 | 
	
		
			
				|  |  | +	require('./logic/socketHandler')(coreHandler, globals.io, app);
 | 
	
		
			
				|  |  | +	require('./logic/expressHandler')(coreHandler, app);
 | 
	
		
			
				|  |  | +});
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	socketHandler(coreHandler, global.io, app);
 | 
	
		
			
				|  |  | -	expressHandler(coreHandler, app);
 | 
	
		
			
				|  |  | -}
 |