1 | var _ = require('lodash');
|
2 | var logger = require('./logger.js').getInstance();
|
3 |
|
4 | module.exports = {
|
5 | createProxyOptions: createProxyOptions
|
6 | };
|
7 |
|
8 | function createProxyOptions(req, config) {
|
9 | var proxyTable = config.proxyTable;
|
10 | var result = _.clone(config);
|
11 |
|
12 | if (proxyTable) {
|
13 | var newTarget = getTargetFromProxyTable(req, proxyTable);
|
14 | if (newTarget) {
|
15 | logger.debug('[HPM] proxyTable new target: %s -> "%s"', config.target, newTarget);
|
16 | result = _.assign(result, {target: newTarget});
|
17 | }
|
18 | }
|
19 |
|
20 | return result;
|
21 | }
|
22 |
|
23 | function getTargetFromProxyTable(req, proxyTable) {
|
24 | var result;
|
25 | var host = req.headers.host;
|
26 | var path = req.url;
|
27 |
|
28 | var hostAndPath = host + path;
|
29 |
|
30 | _.forIn(proxyTable, function(value, key) {
|
31 | if (containsPath(key)) {
|
32 |
|
33 | if (hostAndPath.indexOf(key) > -1) {
|
34 | result = proxyTable[key];
|
35 | logger.debug('[HPM] proxyTable match: %s -> "%s"', hostAndPath, result);
|
36 | return false;
|
37 | }
|
38 | } else {
|
39 |
|
40 | if (key === host) {
|
41 | result = proxyTable[key];
|
42 | logger.debug('[HPM] proxyTable match: %s -> "%s"', host, result);
|
43 | return false;
|
44 | }
|
45 |
|
46 | }
|
47 |
|
48 | });
|
49 |
|
50 | return result;
|
51 | }
|
52 |
|
53 | function containsPath(v) {
|
54 | return v.indexOf('/') > -1;
|
55 | }
|