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 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'
- ]);
- }
- }
- };
+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 middlewares = [
- (req, res, next) => {
- if (req.url.indexOf('/proxy-designer1') > -1) {
- req.url = req.url.replace('/proxy-designer1', '');
- }
+ 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
+ }`;
+ }
+ }
+ };
- if (req.url.indexOf(jsonConfig.appContextPath + '/resources') > -1) {
- req.url = req.url.replace(jsonConfig.appContextPath, '');
- }
+ 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 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();
- }
- ];
+ let proxies = [];
- // 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'
- }
- }))
- );
- }
+ // 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
+ })
+ )
+ );
+ });
- // 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);
+ 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);
+ }
};