1 | 'use strict';
|
2 | var regexes = require('./regexes');
|
3 | var utils = require('./utils');
|
4 | var path = require('path');
|
5 | var url = require('url');
|
6 | var ignoreExts = ['.css', '.js', '.png', '.jpg', '.woff', '.svg'];
|
7 |
|
8 | function isServices(pRes) {
|
9 | return (regexes.servicesRegex.test(pRes.req.path));
|
10 | }
|
11 |
|
12 | function isHtml(pRes, req) {
|
13 | var ext = path.extname(req.url);
|
14 | if (ext && ignoreExts.indexOf(ext) !== -1) {
|
15 | return false;
|
16 | }
|
17 | if (!pRes.headers || !pRes.headers['content-type']) {
|
18 | return false;
|
19 | }
|
20 | return pRes.headers['content-type'].indexOf('html') !== '-1';
|
21 | }
|
22 |
|
23 | function isRedirect(pRes) {
|
24 | return (pRes.headers['location'] && pRes.statusCode === 301 || pRes.statusCode === 302);
|
25 | }
|
26 |
|
27 | function rewriteRedirect(pRes, req) {
|
28 | var u = url.parse(pRes.headers['location']);
|
29 | u.host = req.headers._host;
|
30 | pRes.headers['location'] = u.format();
|
31 | }
|
32 |
|
33 |
|
34 | module.exports = function (pRes, req, res) {
|
35 | if (isRedirect(pRes) && req.headers._host) {
|
36 | return rewriteRedirect(pRes, req, res);
|
37 | }
|
38 | if (!isServices(pRes) && !isHtml(pRes, req)) {
|
39 | return;
|
40 | }
|
41 | var host = req.headers._host;
|
42 | var toReplace = utils.serverMap(host);
|
43 | if (!toReplace) {
|
44 | return;
|
45 | }
|
46 |
|
47 | var _write = res.write;
|
48 | var _writeHead = res.writeHead;
|
49 | var str = '';
|
50 | pRes.on('data', function (data) {
|
51 | str += data;
|
52 | });
|
53 | pRes.on('end', function () {
|
54 | str = str.replace(new RegExp(toReplace, 'g'), host);
|
55 | _write.call(res, str);
|
56 | });
|
57 | res.write = function () {
|
58 |
|
59 | };
|
60 | res.writeHead = function (code, headers) {
|
61 | res.removeHeader('Content-Length');
|
62 | if (headers) {
|
63 | delete headers['content-length'];
|
64 | }
|
65 | _writeHead.apply(res, arguments);
|
66 | };
|
67 |
|
68 | };
|