-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathapp.js
More file actions
173 lines (142 loc) · 4.37 KB
/
app.js
File metadata and controls
173 lines (142 loc) · 4.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
var fs = require('fs');
var express = require('express');
var path = require('path');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
//=======================
// Initialise app
var app = express();
// TODO: How should we set this up properly?
app.locals.cardssessions = [];
// Heroku handles SSL, so we should run the app as a
// HTTP server in production. If the browser has come
// to the app through HTTP, then redirect to HTTPS.
// Heroku passes traffic on both protocols through to the
// single port the app is configured to listen on.
//
// TODO: Move to a middleware file.
function redirectToHTTPS(req,res,next) {
if (req.headers['x-forwarded-proto'] != 'https') {
res.redirect('https://' + req.hostname + req.originalUrl);
console.log("Redirecting to https://" + req.hostname + req.originalUrl);
} else {
next() /* Continue to other routes if we're not redirecting */
}
}
// TODO: This mess needs tidying up. "Production" needs
// renaming to 'heroku', because Heroku sorts out all the
// HTTPS stuff and actually strips headers and sends to
// a HTTP app
if (app.get('env') === 'production') {
var server = require('http').createServer(app);
app.use('*',redirectToHTTPS);
} else {
// Load the self-signed certificate
var private_key = fs.readFileSync('certs/server.key');
var private_cert = fs.readFileSync('certs/server.crt');
var credentials = {key: private_key, cert: private_cert};
var server = require('https').createServer(credentials,app);
}
//=======================
// Load in the config file
var env = app.get('env');
console.log("Loading: " + env);
var config = require(__dirname + '/config/' + env);
//=======================
// Init DB
var mongoose = require('mongoose');
var mongo_uri = process.env.MONGOLAB_URI;
mongoose.connect(mongo_uri, function(err) {
if(err) {
console.log('connection error', err);
} else {
console.log('connection successful');
}
});
//=======================
// Configure flash messages
var flash = require('connect-flash');
app.use(flash());
//=======================
// Configure Sessions
if (app.get('env') === 'test') {
var auth_config = require(__dirname + '/config/test_auth.js');
} else {
var auth_config = require(__dirname + '/config/auth.js');
}
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
var sessionStore = new MongoStore({
mongooseConnection: mongoose.connection
});
app.use(cookieParser());
app.use(session({
store: sessionStore,
secret: auth_config.cookie_secret
}));
//=======================
// Configure Passport
var passport = require('passport');
var google_auth = require('./init/google_auth.js')(passport, auth_config);
app.use(passport.initialize());
app.use(passport.session());
//=======================
// View engine setup. Uses EJS
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use('/static', express.static('public'));
// Set up a httpserver on port 4072
var port = process.env.PORT || 4072;
server.listen(port);
// Load Socket IO config
var io = require('socket.io')(server);
var socket_io = require('./init/websocket.js')(
io,
auth_config,
server,
cookieParser,
sessionStore
);
/* =========== Load Routes ================ */
var AuthRoutes = require('./routes/auth')(passport)
var SessionManager = require('./models/session_manager');
SessionManager.init(app);
var SocketRoutes = require('./routes/websocket.js');
SocketRoutes.init(app,io);
var SessionRoutes = require('./routes/sessions')();
app.use('/', AuthRoutes);
app.use('/', SessionRoutes);
/* =========== Error Handling ================ */
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
console.log(err.stack )
res.status(err.status || 500);
res.render('pages/error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
module.exports = app;