UNPKG

whistle

Version:

HTTP, HTTP2, HTTPS, Websocket debugging proxy

52 lines (47 loc) 1.85 kB
var Transform = require('pipestream').Transform; var path = require('path'); var fs = require('fs'); var util = require('../util'); var config = require('../config'); var weinreScriptFile = path.join(config.ASSESTS_PATH, 'js/weinre.js'); var weinreScript = fs.readFileSync(weinreScriptFile, { encoding: 'utf8' }); var weinreHtmlScript = '\r\n<script>' + weinreScript + '</script>\r\n'; function getScript(host, name, isHtml, req) { host = util.getInternalHost(req, host); var baseUrl = (req.isHttps ? 'https://' : 'http://') + host; var weinrePath = config.WEBUI_PATH + 'weinre.' + config.port; var result = isHtml ? weinreHtmlScript : weinreScript; var weinreUrl = weinrePath + '/target/target-script-min.js#' + (name || 'anonymous'); return result.replace('$BASE_URL', baseUrl) .replace('$WEINRE_PATH', weinrePath) .replace('$WEINRE_URL', weinreUrl); } module.exports = function (req, res) { var weinre = req.rules.weinre; if (weinre) { util.disableReqCache(req.headers); delete req.rules.weinre; var host = req.headers.host; res.on('src', function (_res) { if (!(weinre = req.rules.weinre) || !util.hasBody(_res)) { return; } var isHtml = util.supportHtmlTransform(_res, req); if (!isHtml && util.getContentType(_res.headers) !== 'JS') { return; } !util.isEnable(req, 'keepAllCSP') && util.disableCSP(_res.headers); !req._customCache && util.disableResStore(_res.headers); var name = util.getPath(util.rule.getMatcher(weinre)); var transform = new Transform(); transform._transform = function (chunk, _, callback) { if (!chunk) { chunk = util.toBuffer(getScript(host, name, isHtml, req)); } callback(null, chunk); }; res.addZipTransform(transform, false, true); }); } };