This repository has been archived by the owner on Apr 14, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
routes.js
69 lines (56 loc) · 1.75 KB
/
routes.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
const { ensureLoggedIn } = require('connect-ensure-login');
const express = require('express');
const passport = require('passport');
const config = require('./config');
const authorization = require('./middleware/authorization');
const proxy = require('./proxy');
const router = new express.Router();
const RETURN_TO = encodeURI(`${config.app.protocol}:https://${config.app.host}`);
const SSO_LOGOUT_URL = `https://${config.auth0.domain}${config.auth0.sso_logout_url}?returnTo=${RETURN_TO}&client_id=${config.auth0.clientID}`;
router.get('/healthz', (req, res) => res.sendStatus(200));
router.get('/login', (req, res, next) => {
if (req.isAuthenticated()) {
if (/^http/.test(req.session.returnTo)) {
res.send(400, 'URL must be relative');
} else {
res.redirect(req.session.returnTo);
}
} else {
passport.authenticate(
'auth0-oidc',
{ prompt: req.query.prompt || config.auth0.prompt },
)(req, res, next);
}
});
router.get(['/logout', '/auth-sign-out'], (req, res) => {
req.logout();
req.session.destroy(() => {
res.clearCookie(config.session.name);
res.redirect(SSO_LOGOUT_URL);
});
});
router.get('/callback', [
passport.authenticate('auth0-oidc', { failureRedirect: '/login?prompt=true' }),
(req, res) => {
res.redirect(req.session.returnTo || '/');
},
]);
function parseBody(req) {
const body = [];
return new Promise((resolve, reject) => {
req.on('data', (chunk) => { body.push(chunk); });
req.on('end', () => { resolve(body); });
req.on('error', (err) => { reject(err); });
});
}
router.all(/.*/, [
ensureLoggedIn('/login'),
authorization,
(req, res) => {
parseBody(req).then((body) => {
req.body = body;
proxy.web(req, res);
});
},
]);
module.exports = router;