'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); };