-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
135 lines (100 loc) · 3.4 KB
/
server.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
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
// Dependencies
var bodyParser = require('body-parser');
var express = require('express');
var logger = require('winston');
var path = require('path');
/* jshint ignore:start */
var nunjucks = require('nunjucks');
/* jshint ignore:end */
// Configuration
var appConfig = {
'adminServerRoot': process.env.ADMIN_SERVER_ROOT || 'http://localhost:8090',
'userName': process.env.USER_NAME || 'user',
'password': process.env.PASSWORD || 'password',
'logLevel': process.env.LOG_LEVEL || 'info',
'name': 'hub-admin-ui',
'port': process.env.PORT || 3000,
'version': '0.1'
};
// Logger configuration
logger.remove(logger.transports.Console);
logger.add(logger.transports.Console, {
prettyPrint: true,
colorize: true,
silent: false,
timestamp: true
//json: true
});
// Startup
logger.info('Starting service', {app: appConfig.name});
logger.info('Starting service with configuration:', appConfig);
// Server Configuration
logger.level = appConfig.logLevel;
var HubAdminClient = require('./server/hub-admin-client.js');
var hubAdminClient = new HubAdminClient(appConfig, logger);
var hubAuth = require('./server/hub-auth.js');
var Routes = require('./app/routes.js');
var routes = new Routes(appConfig, hubAdminClient, logger);
// Express Configuration
var app = express();
app.set('view engine', 'html');
app.set('port', appConfig.port);
// View Engine Configuration
/* jshint ignore:start */
var views = [
path.join(__dirname, '/app/views/'),
path.join(__dirname, '/govuk_modules/govuk_template/layouts/')
];
/* jshint ignore:end */
/* jshint ignore:start */
var nunjucksAppEnv = nunjucks.configure(views, {
autoescape: true,
express: app,
noCache: true,
watch: true
});
var dateFilter = require('nunjucks-date-filter');
nunjucksAppEnv.addFilter('date', dateFilter);
dateFilter.setDefaultFormat('HH:mm on DD/MM/YYYY');
/* jshint ignore:end */
// Request Processing Configuration
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
// Express Routing Configuration
// NB Must be after fileupload, bodyparser config
app.use('/', hubAuth.basicAuth(appConfig.userName, appConfig.password));
app.use('/', routes.router);
// Static Resources Configuration
app.use('/public', express.static(path.join(__dirname, '/public')));
app.use('/public', express.static(path.join(__dirname, '/govuk_modules/govuk_template/assets')));
app.use('/public', express.static(path.join(__dirname, '/govuk_modules/govuk_frontend_toolkit')));
app.use('/public/images/icons', express.static(path.join(__dirname, '/govuk_modules/govuk_frontend_toolkit/images')));
// GovUK Template Configuration
/* jshint ignore:start */
app.locals.asset_path = '/public/';
/* jshint ignore:end */
// Error Handler
app.use(function (req, res, next) {
var error = new Error('Not Found');
error.status = 404;
next(error);
});
app.use(logErrors);
app.use(clientErrors);
function logErrors (err, req, res, next) {
logger.error('Unhandled error: ' + err.stack);
next(err);
}
function clientErrors (error, req, res, next) {
res.locals.message = error.message;
res.locals.error = error;
res.status(error.status || 500);
res.render('error');
}
// Server Startup
var server = app.listen(app.get('port'), function () {
console.log('Express server listening on port ' + app.get('port'));
});
// Exports
module.exports.server = server;
module.exports.appConfig = appConfig;