Release version 1.13.7
[sdc.git] / openecomp-ui / proxy-server.js
index 4733d38..6db8e61 100644 (file)
 
 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);
+    }
 };