UNPKG

1.78 kBJavaScriptView Raw
1'use strict';
2var regexes = require('./regexes');
3var utils = require('./utils');
4var path = require('path');
5var url = require('url');
6var ignoreExts = ['.css', '.js', '.png', '.jpg', '.woff', '.svg'];
7
8function isServices(pRes) {
9 return (regexes.servicesRegex.test(pRes.req.path));
10}
11
12function 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
23function isRedirect(pRes) {
24 return (pRes.headers['location'] && pRes.statusCode === 301 || pRes.statusCode === 302);
25}
26
27function 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
34module.exports = function(pRes, req, res) {
35 if (isRedirect(pRes)) {
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 // shh. It'll be over soon little guy
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};