-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
78 lines (62 loc) · 2.17 KB
/
server.js
File metadata and controls
78 lines (62 loc) · 2.17 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
77
78
const express = require('express')
const { createProxyMiddleware } = require('http-proxy-middleware');
const basicAuth = require('express-basic-auth')
const cors = require('cors');
const config = require('./config.json');
const app = express()
const hasRoot = Object.keys(config.apps).includes("/")
const base = config.base ? config.base : ''
for (let [name, service] of Object.entries(config.apps)) {
console.log(`Installed app /${name} => ${service.target}`)
const pathRewrite = {}
if(name !== "/")
pathRewrite['^/' + name] = ''
else
pathRewrite['^/'] = ''
const url = name === "/" ? "/" : `/${name}`
const router = express.Router();
router.all(`/*`, createProxyMiddleware({
target: service.target,
changeOrigin: true,
xfwd: true,
autoRewrite: true,
hostRewrite: true,
logLevel: config.log_level,
pathRewrite: pathRewrite,
onError(err, req, res) {
console.error(err);
},
onProxyReq: (proxyReq, req, res) => {
proxyReq.setHeader('X-Forwarded-Path', `${base}/${name}`);
proxyReq.setHeader('HTTP_X_FORWARDED_URI', `${base}/${name}`);
},
onProxyRes: (proxyRes, req, res) => {
if (proxyRes.headers.location && proxyRes.headers.location.startsWith("/")) {
if (proxyRes.headers.location.startsWith(`/${name}`)) {
proxyRes.headers['location'] = `${base}${proxyRes.headers.location}`
} else {
proxyRes.headers['location'] = `${base}/${name}${proxyRes.headers.location}`
}
}
},
cookiePathRewrite: service.cookiePathRewrite
}));
if(service.users) {
app.use(url,basicAuth({
users: service.users,
challenge: true
}),router)
} else if(service.cors) {
app.use(url, cors(), router);
} else {
app.use(url, router);
}
}
if(!hasRoot) {
app.get('/', (req, res) => {
res.redirect(303, `${base}/${config.default_app}/`);
})
}
app.listen(config.port, () => {
console.log(`Box proxy listening on port ${config.port}`)
})