HeaderHostTransformer.js 968 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. var stream = require('stream');
  2. var util = require('util');
  3. var Transform = stream.Transform;
  4. var HeaderHostTransformer = function(opts) {
  5. if (!(this instanceof HeaderHostTransformer)) {
  6. return new HeaderHostTransformer(opts);
  7. }
  8. opts = opts || {}
  9. Transform.call(this, opts);
  10. var self = this;
  11. self.host = opts.host || 'localhost';
  12. self.replaced = false;
  13. }
  14. util.inherits(HeaderHostTransformer, Transform);
  15. HeaderHostTransformer.prototype._transform = function (chunk, enc, cb) {
  16. var self = this;
  17. // after replacing the first instance of the Host header
  18. // we just become a regular passthrough
  19. if (!self.replaced) {
  20. chunk = chunk.toString();
  21. self.push(chunk.replace(/(\r\n[Hh]ost: )\S+/, function(match, $1) {
  22. self.replaced = true;
  23. return $1 + self.host;
  24. }));
  25. }
  26. else {
  27. self.push(chunk);
  28. }
  29. cb();
  30. };
  31. module.exports = HeaderHostTransformer;