diff options
Diffstat (limited to 'openecomp-ui/proxy-server.js')
-rw-r--r-- | openecomp-ui/proxy-server.js | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/openecomp-ui/proxy-server.js b/openecomp-ui/proxy-server.js new file mode 100644 index 0000000000..3c4c32cc35 --- /dev/null +++ b/openecomp-ui/proxy-server.js @@ -0,0 +1,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); +}; |