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