forked from ging/fiware-idm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
176 lines (147 loc) · 5.03 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
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
174
175
176
const body_parser = require('body-parser');
const clc = require('cli-color');
const cookie_parser = require('cookie-parser');
const cors = require('cors');
const debug = require('debug')('idm:app');
const express = require('express');
const favicon = require('serve-favicon');
const force_ssl = require('express-force-ssl');
const i18n = require('i18n-express');
const logger = require('morgan');
const method_override = require('method-override');
const partials = require('express-partials');
const path = require('path');
const sass_middleware = require('node-sass-middleware');
const session = require('cookie-session');
// Obtain secret from config file
const config = require('./config.js');
// Create vars that store routes
const index = require('./routes/web/index');
const api = require('./routes/api/index');
const oauth2 = require('./routes/oauth2/oauth2');
const saml2 = require('./routes/saml2/saml2');
const app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// Set logs in development
if (config.debug) {
app.use(logger('dev'));
}
// Disabled header
app.disable('x-powered-by');
// Parse request
app.use(body_parser.json({ limit: '50mb' }));
app.use(body_parser.urlencoded({ limit: '50mb', extended: true }));
// CORS Enable
if (config.cors.enabled) {
app.use(cors(config.cors.options));
}
// Set routes for version
const up_date = new Date();
app.use('/version', function(req, res) {
const version = require('./version.json');
version.keyrock.uptime = require('./lib/time').ms_to_time(
new Date() - up_date
);
version.keyrock.api.link = config.host + '/' + version.keyrock.api.version;
res.status(200).send(version);
});
// uncomment after placing your favicon in /public
app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(partials());
app.use(cookie_parser(config.session.secret));
app.use(
session({
secret: config.session.secret,
name: 'session',
secure: config.https.enabled,
maxAge: config.session.expires, // eslint-disable-line snakecase/snakecase
})
);
const styles = config.site.theme || 'default';
// Middleware to convert sass files to css
app.use(
sass_middleware({
src: path.join(__dirname, 'themes/' + styles),
dest: path.join(__dirname, 'public/stylesheets'),
debug: config.debug,
outputStyle: 'extended', // eslint-disable-line snakecase/snakecase
prefix: '/stylesheets', // Where prefix is at <link rel="stylesheets" href="prefix/style.css"/>
})
);
app.use(express.static(path.join(__dirname, 'public')));
app.use(method_override('_method'));
app.use(
i18n({
translationsPath: path.join(__dirname, 'etc/translations'), // eslint-disable-line snakecase/snakecase
siteLangs: ['en', 'es'], // eslint-disable-line snakecase/snakecase
textsVarName: 'translation', // eslint-disable-line snakecase/snakecase
browserEnable: true, // eslint-disable-line snakecase/snakecase
defaultLang: 'en', // eslint-disable-line snakecase/snakecase
})
);
// Helpers dinamicos:
app.use(function(req, res, next) {
res.set(
'Cache-Control',
'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0'
);
// init req.session.redir
if (!req.session.redir) {
req.session.redir = '/';
}
// To make visible req.session in the view
res.locals.session = req.session;
// {text: 'message text', type: 'info | success | warning | danger'}
res.locals.message = {};
res.locals.site = config.site;
res.locals.fs = require('fs');
next();
});
// Force HTTPS connection to web server
if (config.https.enabled) {
app.set('forceSSLOptions', {
enable301Redirects: true, // eslint-disable-line snakecase/snakecase
trustXFPHeader: false, // eslint-disable-line snakecase/snakecase
httpsPort: config.https.port, // eslint-disable-line snakecase/snakecase
sslRequiredMessage: 'SSL Required.', // eslint-disable-line snakecase/snakecase
});
// Set routes for api
app.use('/v1', force_ssl, api);
app.use('/v3', force_ssl, api); // REDIRECT OLD KEYSTONE REQUESTS TO THE SAME API
// Set routes for oauth2
app.use('/oauth2', force_ssl, oauth2);
app.get(
'/user',
force_ssl,
require('./controllers/oauth2/oauth2').authenticate_token
);
// Set routes for saml2
app.use('/saml2', force_ssl, saml2);
// Set routes for GUI
app.use('/', force_ssl, index);
} else {
// Set routes for api
app.use('/v1', api);
app.use('/v3', api); // REDIRECT OLD KEYSTONE REQUESTS TO THE SAME API
// Set routes for oauth2
app.use('/oauth2', oauth2);
app.get('/user', require('./controllers/oauth2/oauth2').authenticate_token);
// Set routes for saml2
app.use('/saml2', saml2);
// Set routes for GUI
app.use('/', index);
}
// Check connection with Authzforce
if (config.authorization.authzforce.enabled) {
require('./lib/authzforce.js')
.check_connection()
.then(function(status) {
debug(clc.green('Connection with Authzforce: ' + status));
})
.catch(function(error) {
debug(clc.red(error));
});
}
module.exports = app;