UNPKG

catproxy

Version:

a node proxy or host change tools

103 lines (81 loc) 2.52 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.SNICallback = undefined; var _https = require('https'); var _https2 = _interopRequireDefault(_https); var _cert = require('./cert/cert.js'); var _emptyPort = require('empty-port'); var _emptyPort2 = _interopRequireDefault(_emptyPort); var _promise = require('promise'); var _promise2 = _interopRequireDefault(_promise); var _log = require('./log'); var _log2 = _interopRequireDefault(_log); var _tls = require('tls'); var _tls2 = _interopRequireDefault(_tls); var _util = require('util'); var _util2 = _interopRequireDefault(_util); var _requestSerives = require('./requestSerives'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // 创建一个https的代理服务器 var SNICallback = function SNICallback(servername, callback) { try { var _getCert = (0, _cert.getCert)(servername); var key = _getCert.privateKey; var cert = _getCert.cert; var ctx = _tls2.default.createSecureContext({ key: key, cert: cert }); callback(null, ctx); } catch (e) { _log2.default.error(e); callback(e); } }; exports.SNICallback = SNICallback; exports.default = function (host, port) { if (!host) { throw new Error('host is must'); } return _promise2.default.resolve(port).then(function (p) { if (p) { return p; } else { return new _promise2.default(function (resolve, reject) { (0, _emptyPort2.default)({ startPort: 10001 }, function (err, port) { if (err) { reject(err); } else { resolve(port); } }); }); } }) // 不支持sni的请求可能点了就没反应,SNICallback在客户端不支持的情况下,不会报错,会直接返回 .then(function (port) { var _getCert2 = (0, _cert.getCert)(host); var key = _getCert2.privateKey; var cert = _getCert2.cert; var server = _https2.default.createServer({ key: key, cert: cert, SNICallback: SNICallback, rejectUnauthorized: false }, function (req, res) { if (req.headers.upgrade) { return; } _requestSerives.requestHandler.call(this, req, res); }); server.on('upgrade', _requestSerives.requestUpgradeHandler); server.listen(port); server.on('error', function (err) { return _log2.default.error(err + 'inner https prxoy server err:' + err); }); return { server: server, port: port }; }).then(null, function (err) { return _log2.default.error('create https proxy server error:' + err); }); };