| 'use strict'; |
| |
| const proxy = require('http-proxy-middleware'); |
| |
| const devConfig = require('./tools/getDevConfig'); |
| 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( |
| '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) { |
| 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); |
| }; |