encharm/http-master

View on GitHub
modules/middleware/websockify.js

Summary

Maintainability
A
2 hrs
Test Coverage
var regexpHelper = require('../../src/regexpHelper');
var net = require('net');
var url = require('url');

module.exports = function WebsockifyMiddleware() {
  return {
    requestHandler: function(req, res, next, parsedEntry) {
      if(req.upgrade) {
        var socket = new net.Socket();

        var target = parsedEntry.target;

        if (req.match) {
          target = regexpHelper(target, req.match);
        }
        if(target.match(/^(\d+)$/)) {
          target = 'localhost:' +  target;
        }
        var parsedTarget = url.parse('tcp://' + target);

        socket.once('error', function(err) {
          if(req.connection) {
            req.connection.end();
          }
        });
        socket.connect(parseInt(parsedTarget.port), parsedTarget.hostname || 'localhost',  function() {
          websockifyService(req, socket);
        });
      }
      next();
    },
    entryParser: function(entry) {
      return {
        target: entry
      };
    }
  };
};