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
|
'use strict';
const proxy = require('http-proxy-middleware');
let localDevConfig = {};
try {
localDevConfig = require('./devConfig');
} catch (e) {}
const devConfig = Object.assign({}, require('./devConfig.defaults'), localDevConfig);
let devPort = process.env.PORT || devConfig.port;
module.exports = function (server) {
let cookieRules = devConfig.proxyConfig.cookieReplaceRules;
let cookies = devConfig.proxyConfig.cookies;
console.log('---------------------');
let proxyConfigDefaults = {
changeOrigin: true,
secure: false,
onProxyRes: (proxyRes, req, res) => {
let setCookie = proxyRes.headers['set-cookie'];
if (setCookie) {
cookieRules.forEach(function(rule) {
setCookie[0] = setCookie[0].replace(rule.replace, rule.with);
});
}
if (proxyRes.statusCode === 302 && proxyRes.headers.location.indexOf(devConfig.proxyConfig.login) > -1) {
proxyRes.headers.location = `http://localhost:${devPort}/${devConfig.proxyConfig.redirectionPath}`;
let myCookies = [];
for (let cookie in cookies) {
myCookies.push(cookie + '=' + cookies[cookie]);
}
res.setHeader('Set-Cookie', myCookies);
}
}
};
let middlewares = [
(req, res, next) => {
devConfig.proxyConfig.urlReplaceRules.forEach(function(rule) {
if (req.url.indexOf(rule.url) > -1) {
req.url = req.url.replace(rule.replace, rule.with);
}
});
devConfig.proxyConfig.jsReplaceRules.forEach(function(rule) {
let regex = new RegExp('^(.*)' + rule.replace);
let match = req.url.match(regex);
let newUrl = match && match[1] + rule.with + '.js';
if (newUrl) {
console.log(`REWRITING URL: ${req.url} -> ${newUrl}`);
req.url = newUrl;
}
});
next();
}
];
let proxies = [];
// standalone back-end (proxyTarget) has higher priority, so it should be first
if (devConfig.proxyTarget) {
console.log('Onboarding proxy set to : ' + devConfig.proxyTarget);
proxies.push({
target : devConfig.proxyTarget,
config: devConfig.proxyConfig.onboardingProxy}
);
} else {
console.log('Catalog proxy set to : ' + devConfig.proxyCatalogTarget);
}
console.log('Catalog proxy set to : ' + devConfig.proxyCatalogTarget);
proxies.push({
target : devConfig.proxyCatalogTarget,
config: devConfig.proxyConfig.catalogProxy}
);
proxies.forEach(function(p) {
middlewares.push(
proxy(p.config.proxy, Object.assign({}, proxyConfigDefaults, {
target: p.target,
pathRewrite: p.config.rewrite
}))
);
});
let websocketTarget = devConfig.proxyCatalogTarget;
if (devConfig.proxyWebsocketTarget) {
websocketTarget = devConfig.proxyWebsocketTarget;
}
console.log('Websocket proxy set to : ' + websocketTarget);
console.log('---------------------');
var wsProxy = proxy(devConfig.proxyConfig.websocketProxy.proxy, Object.assign({}, proxyConfigDefaults, {
target: websocketTarget,
ws: true
}));
middlewares.push(wsProxy);
server.use(middlewares);
server.on('upgrade', wsProxy.upgrade);
};
|