/
app.js
executable file
·97 lines (76 loc) · 2.67 KB
/
app.js
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
'use strict';
var express = require('express');
var methodOverride = require('method-override');
var morgan = require('morgan');
var bodyParser = require('body-parser');
var compression = require('compression');
var cookieParser = require('cookie-parser');
var favicon = require('serve-favicon');
var minify = require('express-minify');
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
var mongoose = require('mongoose');
var passport = require('passport');
var app = express();
var statusCodePage = require('./libs/templateHelpers').statusCodePage;
var modifySessions = require('./libs/modifySessions');
var settings = require('./models/settings.json');
var connectStr = process.env.CONNECT_STRING || settings.connect;
var sessionSecret = process.env.SESSION_SECRET || settings.secret;
var db = mongoose.connection;
var dbOptions = { server: { socketOptions: { keepAlive: 1 } } };
app.set('port', process.env.PORT || 8080);
// Connect to the database
mongoose.connect(connectStr, dbOptions);
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function () {
app.listen(app.get('port'));
});
var sessionStore = new MongoStore({ mongoose_connection: db });
// Force HTTPS
if (app.get('port') === 443) {
app.use(function (aReq, aRes, aNext) {
aRes.setHeader('Strict-Transport-Security',
'max-age=8640000; includeSubDomains');
if (aReq.headers['x-forwarded-proto'] !== 'https') {
return aRes.redirect(301, 'https://' + aReq.headers.host + encodeURI(aReq.url));
}
aNext();
});
}
if (process.env.NODE_ENV !== 'production') {
app.use(morgan('dev'));
}
app.use(bodyParser.urlencoded({
extended: false,
limit: parseInt(settings.maximum_upload_script_size / 1024, 10) + 'kb'
}));
app.use(bodyParser.json({
extended: false,
limit: parseInt(settings.maximum_upload_script_size / 1024, 10) + 'kb'
}));
app.use(compression());
app.use(methodOverride('X-HTTP-Method-Override'));
// Order is very important here (i.e mess with at your own risk)
app.use(cookieParser());
app.use(session({
resave: true,
saveUninitialized: true,
secret: sessionSecret,
store: sessionStore
}));
app.use(passport.initialize());
app.use(modifySessions.init(sessionStore));
app.use(app.router);
app.use(favicon(__dirname + '/public/images/favicon.ico'));
// Set up the views
app.engine('html', require('./libs/muExpress').renderFile(app));
app.set('view engine', 'html');
app.set('views', __dirname + '/views');
// Setup minification
// Order is important here as Ace will fail with an invalid content encoding issue
if (process.env.NODE_ENV === 'production') {
app.use(minify());
}
// Routes
require('./routes')(app);