const proxy = require('http-proxy-middleware');
-let localDevConfig = {};
-try {
- localDevConfig = require('./devConfig');
-} catch (e) {}
-const devConfig = Object.assign({}, require('./devConfig.defaults'), localDevConfig);
+const devConfig = require('./tools/getDevConfig');
let devPort = process.env.PORT || devConfig.port;
-let jsonConfig = {
- "appContextPath" : "/onboarding"
-};
-
-try {
- jsonConfig = require('./src/sdc-app/config/config.json');
-} catch (e) {
- console.log('could not load config. using deault value instead');
-}
+module.exports = function(server) {
+ let cookieRules = devConfig.proxyConfig.cookieReplaceRules;
+ let cookies = devConfig.proxyConfig.cookies;
+ console.log('---------------------');
-module.exports = function (server) {
- let proxyConfigDefaults = {
- changeOrigin: true,
- secure: false,
- onProxyRes: (proxyRes, req, res) => {
- let setCookie = proxyRes.headers['set-cookie'];
- if (setCookie) {
- setCookie[0] = setCookie[0].replace(/\bSecure\b(; )?/, '');
- }
- if (proxyRes.statusCode === 302 && proxyRes.headers.location.indexOf('login') > -1) {
- proxyRes.headers.location = `http://localhost:${devPort}/sdc1#/onboardVendor`;
- res.setHeader('Set-Cookie', [
- 'HTTP_CSP_EMAIL=csantana@sdc.com',
- 'HTTP_CSP_FIRSTNAME=Carlos',
- 'HTTP_CSP_LASTNAME=Santana',
- 'HTTP_CSP_WSTYPE=Intranet',
- 'HTTP_IV_REMOTE_ADDRESS=0.0.0.0',
- 'HTTP_IV_USER=cs0008',
- 'USER_ID=cs0008'
- ]);
- }
- }
- };
+ 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) => {
- if (req.url.indexOf('/proxy-designer1') > -1) {
- req.url = req.url.replace('/proxy-designer1', '');
- }
+ 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();
+ }
+ ];
- if (req.url.indexOf(jsonConfig.appContextPath + '/resources') > -1) {
- req.url = req.url.replace(jsonConfig.appContextPath, '');
- }
+ let proxies = [];
- let match = req.url.match(/^(.*)_en.js$/);
- let newUrl = match && match[1] + '.js';
- if (newUrl) {
- console.log(`REWRITING URL: ${req.url} -> ${newUrl}`);
- req.url = newUrl;
- }
- next();
- }
- ];
+ // 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
+ })
+ )
+ );
+ });
- // standalon back-end (proxyTarget) has higher priority, so it should be first
- if (devConfig.proxyTarget) {
- middlewares.push(
- proxy(['/api', '/onboarding-api', '/sdc1/feProxy/onboarding-api'], Object.assign({}, proxyConfigDefaults, {
- target: devConfig.proxyTarget,
- pathRewrite: {
- '/sdc1/feProxy/onboarding-api': '/onboarding-api'
- }
- }))
- );
- }
+ 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);
- // ATT environment (proxyATTTarget) has lower priority, so it should be second
- if (devConfig.proxyATTTarget) {
- middlewares.push(
- proxy(['/sdc1', '/onboarding-api', '/scripts', '/styles'], Object.assign({}, proxyConfigDefaults, {
- target: devConfig.proxyATTTarget,
- pathRewrite: {
- // Workaround for some weird proxy issue
- '/sdc1/feProxy/onboarding-api': '/sdc1/feProxy/onboarding-api',
- '/onboarding-api': '/sdc1/feProxy/onboarding-api'
- }
- }))
- );
- }
- server.use(middlewares);
+ server.use(middlewares);
+ server.on('upgrade', wsProxy.upgrade);
};