40 lines
968 B
JavaScript
40 lines
968 B
JavaScript
|
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;
|