You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
var stream = require('stream'); |
|
|
var util = require('util'); |
|
|
|
|
|
var Transform = stream.Transform; |
|
|
|
|
|
var HeaderHostTransformer = function(opts) { |
|
|
if (!(this instanceof HeaderHostTransformer)) { |
|
|
return new HeaderHostTransformer(opts); |
|
|
} |
|
|
|
|
|
opts = opts || {} |
|
|
Transform.call(this, opts); |
|
|
|
|
|
var self = this; |
|
|
self.host = opts.host || 'localhost'; |
|
|
self.replaced = false; |
|
|
} |
|
|
util.inherits(HeaderHostTransformer, Transform); |
|
|
|
|
|
HeaderHostTransformer.prototype._transform = function (chunk, enc, cb) { |
|
|
var self = this; |
|
|
|
|
|
// after replacing the first instance of the Host header |
|
|
// we just become a regular passthrough |
|
|
if (!self.replaced) { |
|
|
chunk = chunk.toString(); |
|
|
self.push(chunk.replace(/(\r\n[Hh]ost: )\S+/, function(match, $1) { |
|
|
self.replaced = true; |
|
|
return $1 + self.host; |
|
|
})); |
|
|
} |
|
|
else { |
|
|
self.push(chunk); |
|
|
} |
|
|
|
|
|
cb(); |
|
|
}; |
|
|
|
|
|
module.exports = HeaderHostTransformer;
|
|
|
|