-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathapp.js
More file actions
76 lines (64 loc) · 2.32 KB
/
app.js
File metadata and controls
76 lines (64 loc) · 2.32 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
'use strict';
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const cors = require('cors');
const express = require('express');
const helmet = require('helmet');
const origin = require('./shared/origin');
const path = require('path');
const serviceProvider = require('./shared/serviceProvider');
// eslint-disable-next-line require-sort/require-sort
require('express-async-errors');
/* eslint-disable require-sort/require-sort */
const auth = require('./shared/auth');
const config = require('../config/server');
const logger = require('./shared/logger')();
const storage = require('./shared/storage')(config.storage);
serviceProvider.set('storage', storage);
const storageProxy = require('./shared/storage/proxy')(config.storage.proxy);
serviceProvider.set('storageProxy', storageProxy);
const router = require('./router');
/* eslint-enable */
storageProxy.addStorage('repository', storage);
const { STORAGE_PATH } = process.env;
const app = express();
config.auth.oidc.enabled && (() => {
const consolidate = require('consolidate');
const session = require('express-session');
app.engine('mustache', consolidate.mustache);
app.set('view engine', 'mustache');
app.use(session(config.auth.session));
})();
app.use(helmet());
app.use(cors({ origin: config.auth.corsAllowedOrigins, credentials: true }));
app.use(cookieParser(config.auth.jwt.cookie.secret));
app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(auth.initialize());
app.use(origin());
app.use(express.static(path.join(__dirname, '../dist/')));
if (STORAGE_PATH) app.use(express.static(STORAGE_PATH));
if (storageProxy.isSelfHosted) {
const { getFile } = require('./shared/storage/proxy/mw');
app.use(storageProxy.path, getFile(storageProxy));
}
// Mount main router.
app.use('/api', requestLogger, router);
// Global error handler.
app.use(errorHandler);
// Handle non-existing routes.
app.use((req, res, next) => res.status(404).end());
module.exports = app;
function requestLogger(req, res, next) {
logger.info({ req });
next();
}
function errorHandler(err, req, res, next) {
if (!err.status || err.status === 500) {
res.status(500).end();
logger.error({ err });
return;
}
const { status, message } = err;
res.status(err.status).json({ error: { status, message } });
}