1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.SNICallback = undefined;
|
7 |
|
8 | var _https = require('https');
|
9 |
|
10 | var _https2 = _interopRequireDefault(_https);
|
11 |
|
12 | var _cert = require('./cert/cert.js');
|
13 |
|
14 | var _emptyPort = require('empty-port');
|
15 |
|
16 | var _emptyPort2 = _interopRequireDefault(_emptyPort);
|
17 |
|
18 | var _promise = require('promise');
|
19 |
|
20 | var _promise2 = _interopRequireDefault(_promise);
|
21 |
|
22 | var _log = require('./log');
|
23 |
|
24 | var _log2 = _interopRequireDefault(_log);
|
25 |
|
26 | var _tls = require('tls');
|
27 |
|
28 | var _tls2 = _interopRequireDefault(_tls);
|
29 |
|
30 | var _util = require('util');
|
31 |
|
32 | var _util2 = _interopRequireDefault(_util);
|
33 |
|
34 | var _constants = require('constants');
|
35 |
|
36 | var _constants2 = _interopRequireDefault(_constants);
|
37 |
|
38 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
39 |
|
40 |
|
41 | var 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 | };
|
55 | exports.SNICallback = SNICallback;
|
56 |
|
57 | exports.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 |
|
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 |