Fix 'Unable to drag a VFC on to composition if an existing VFC instance has the same...
[sdc.git] / openecomp-ui / proxy-server.js
1 'use strict';
2
3 const proxy = require('http-proxy-middleware');
4
5 const devConfig = require('./tools/getDevConfig');
6 let devPort = process.env.PORT || devConfig.port;
7
8 module.exports = function(server) {
9     console.log('');
10     console.log('---------------------');
11     console.log('---------------------');
12     console.log('---------------------');
13     console.log(
14         'Local URL: http://localhost:' + devPort + '/sdc1/#!/onboardVendor'
15     );
16     console.log('---------------------');
17     console.log('---------------------');
18     console.log('---------------------');
19     console.log('Starting dev server with role: ' + devConfig.env.role);
20     let userType = devConfig.userTypes[devConfig.env.role];
21
22     let proxyConfigDefaults = {
23         changeOrigin: true,
24         secure: false,
25         logLevel: 'debug',
26         onProxyRes: (proxyRes, req, res) => {
27             res.cookie(
28                 devConfig.cookie.userIdSuffix,
29                 req.headers[devConfig.cookie.userIdSuffix] || userType.userId
30             );
31             res.cookie(
32                 devConfig.cookie.userEmail,
33                 req.headers[devConfig.cookie.userEmail] || userType.email
34             );
35             res.cookie(
36                 devConfig.cookie.userFirstName,
37                 req.headers[devConfig.cookie.userFirstName] ||
38                 userType.firstName
39             );
40             res.cookie(
41                 devConfig.cookie.userLastName,
42                 req.headers[devConfig.cookie.userLastName] || userType.lastName
43             );
44             if (
45                 proxyRes &&
46                 proxyRes.headers &&
47                 proxyRes.headers.location &&
48                 proxyRes.headers.location.indexOf('login') > -1
49             ) {
50                 proxyRes.headers.location = `http://localhost:${devPort}/${
51                     devConfig.proxyConfig.redirectionPath
52                     }`;
53             }
54         }
55     };
56
57     let middlewares = [
58         (req, res, next) => {
59             devConfig.proxyConfig.urlReplaceRules.forEach(function(rule) {
60                 if (req.url.indexOf(rule.url) > -1) {
61                     req.url = req.url.replace(rule.replace, rule.with);
62                     next();
63                 }
64             });
65             devConfig.proxyConfig.jsReplaceRules.forEach(function(rule) {
66                 let regex = new RegExp('^(.*)' + rule.replace);
67                 let match = req.url.match(regex);
68                 let newUrl = match && match[1] + rule.with;
69                 if (newUrl) {
70                     console.log(`REWRITING URL: ${req.url} -> ${newUrl}`);
71                     req.url = newUrl;
72                     next();
73                 }
74             });
75             next();
76         }
77     ];
78
79     let proxies = [];
80
81     // standalone back-end (proxyTarget) has higher priority, so it should be first
82     if (devConfig.proxyTarget) {
83         console.log('Onboarding proxy set to : ' + devConfig.proxyTarget);
84         proxies.push({
85             target: devConfig.proxyTarget,
86             config: devConfig.proxyConfig.onboardingProxy
87         });
88     } else {
89         console.log(
90             'Onboarding proxy set to : ' + devConfig.proxyCatalogTarget
91         );
92     }
93     console.log('Catalog proxy set to : ' + devConfig.proxyCatalogTarget);
94     proxies.push({
95         target: devConfig.proxyCatalogTarget,
96         config: devConfig.proxyConfig.catalogProxy
97     });
98     proxies.forEach(function(p) {
99         console.log(
100             'adding: ' + p.target + ' with rewrite: ' + p.config.rewrite
101         );
102         middlewares.push(
103             proxy(
104                 p.config.proxy,
105                 Object.assign({}, proxyConfigDefaults, {
106                     target: p.target,
107                     loglevel: 'debug',
108                     pathRewrite: p.config.rewrite
109                 })
110             )
111         );
112     });
113
114     if (devConfig.proxyConfig.websocketProxy.enabled) {
115         let websocketTarget = devConfig.proxyCatalogTarget;
116         if (devConfig.proxyWebsocketTarget) {
117             websocketTarget = devConfig.proxyWebsocketTarget;
118         }
119         console.log('Websocket proxy set to : ' + websocketTarget);
120         console.log('---------------------');
121         var wsProxy = proxy(
122             devConfig.proxyConfig.websocketProxy.proxy,
123             Object.assign({}, proxyConfigDefaults, {
124                 target: websocketTarget,
125                 ws: true
126             })
127         );
128         middlewares.push(wsProxy);
129         server.use(middlewares);
130         server.on('upgrade', wsProxy.upgrade);
131     } else {
132         server.use(middlewares);
133     }
134 };