blob: 6db8e61ac172c941f4c22111410621f5df073bf3 [file] [log] [blame]
'use strict';
const proxy = require('http-proxy-middleware');
const devConfig = require('./tools/getDevConfig');
let devPort = process.env.PORT || devConfig.port;
module.exports = function(server) {
console.log('');
console.log('---------------------');
console.log('---------------------');
console.log('---------------------');
console.log(
'Local URL: http://localhost:' + devPort + '/sdc1/#!/onboardVendor'
);
console.log('---------------------');
console.log('---------------------');
console.log('---------------------');
console.log('Starting dev server with role: ' + devConfig.env.role);
let userType = devConfig.userTypes[devConfig.env.role];
let proxyConfigDefaults = {
changeOrigin: true,
secure: false,
logLevel: 'debug',
onProxyRes: (proxyRes, req, res) => {
res.cookie(
devConfig.cookie.userIdSuffix,
req.headers[devConfig.cookie.userIdSuffix] || userType.userId
);
res.cookie(
devConfig.cookie.userEmail,
req.headers[devConfig.cookie.userEmail] || userType.email
);
res.cookie(
devConfig.cookie.userFirstName,
req.headers[devConfig.cookie.userFirstName] ||
userType.firstName
);
res.cookie(
devConfig.cookie.userLastName,
req.headers[devConfig.cookie.userLastName] || userType.lastName
);
if (
proxyRes &&
proxyRes.headers &&
proxyRes.headers.location &&
proxyRes.headers.location.indexOf('login') > -1
) {
proxyRes.headers.location = `http://localhost:${devPort}/${
devConfig.proxyConfig.redirectionPath
}`;
}
}
};
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);
next();
}
});
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;
if (newUrl) {
console.log(`REWRITING URL: ${req.url} -> ${newUrl}`);
req.url = newUrl;
next();
}
});
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(
'Onboarding 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) {
console.log(
'adding: ' + p.target + ' with rewrite: ' + p.config.rewrite
);
middlewares.push(
proxy(
p.config.proxy,
Object.assign({}, proxyConfigDefaults, {
target: p.target,
loglevel: 'debug',
pathRewrite: p.config.rewrite
})
)
);
});
if (devConfig.proxyConfig.websocketProxy.enabled) {
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);
} else {
server.use(middlewares);
}
};