UNPKG

2.41 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.SNICallback = undefined;
7
8var _https = require('https');
9
10var _https2 = _interopRequireDefault(_https);
11
12var _cert = require('./cert/cert.js');
13
14var _emptyPort = require('empty-port');
15
16var _emptyPort2 = _interopRequireDefault(_emptyPort);
17
18var _promise = require('promise');
19
20var _promise2 = _interopRequireDefault(_promise);
21
22var _log = require('./log');
23
24var _log2 = _interopRequireDefault(_log);
25
26var _tls = require('tls');
27
28var _tls2 = _interopRequireDefault(_tls);
29
30var _util = require('util');
31
32var _util2 = _interopRequireDefault(_util);
33
34var _constants = require('constants');
35
36var _constants2 = _interopRequireDefault(_constants);
37
38function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
39
40//创建一个https的代理服务器
41var SNICallback = function SNICallback(servername, callback) {
42 try {
43 var _getCert = (0, _cert.getCert)(servername);
44
45 var key = _getCert.privateKey;
46 var cert = _getCert.cert;
47
48 var ctx = _tls2.default.createSecureContext({ key: key, cert: cert });
49 callback(null, ctx);
50 } catch (e) {
51 _log2.default.error(e);
52 callback(e);
53 }
54};
55exports.SNICallback = SNICallback;
56
57exports.default = function (host, port, callback) {
58 if (_util2.default.isFunction(port)) {
59 callback = port;
60 port = null;
61 }
62 return _promise2.default.resolve(port).then(function (p) {
63 if (p) {
64 return p;
65 } else {
66 return new _promise2.default(function (resolve, reject) {
67 (0, _emptyPort2.default)({
68 startPort: 10001
69 }, function (err, port) {
70 if (err) {
71 reject(err);
72 } else {
73 resolve(port);
74 }
75 });
76 });
77 }
78 })
79 //不支持sni的请求可能点了就没反应,SNICallback在客户端不支持的情况下,不会报错,会直接返回
80 .then(function (port) {
81 var _getCert2 = (0, _cert.getCert)(host);
82
83 var key = _getCert2.privateKey;
84 var cert = _getCert2.cert;
85
86 var server = _https2.default.createServer({
87 key: key,
88 cert: cert,
89 SNICallback: SNICallback,
90 rejectUnauthorized: false
91 }, callback);
92 server.listen(port);
93 server.on('error', function (err) {
94 return _log2.default.error(err + 'inner https prxoy server err:' + err);
95 });
96 return { server: server, port: port };
97 }).then(null, function (err) {
98 return _log2.default.error('create https proxy server error:' + err);
99 });
100};
\No newline at end of file