1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.getRootCert = exports.getCert = exports.emptyCertDir = exports.getRootCertPath = exports.getCertDir = exports.setCertDir = exports.setRootCert = exports.isRootCertExits = undefined;
|
7 |
|
8 | var _fs = require('fs');
|
9 |
|
10 | var _fs2 = _interopRequireDefault(_fs);
|
11 |
|
12 | var _path = require('path');
|
13 |
|
14 | var _path2 = _interopRequireDefault(_path);
|
15 |
|
16 | var _fsExtra = require('fs-extra');
|
17 |
|
18 | var _fsExtra2 = _interopRequireDefault(_fsExtra);
|
19 |
|
20 | var _nodeForge = require('node-forge');
|
21 |
|
22 | var _log = require('../log');
|
23 |
|
24 | var _log2 = _interopRequireDefault(_log);
|
25 |
|
26 | var _createCert = require('./createCert');
|
27 |
|
28 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
29 |
|
30 | var certDir = process.env.APPDATA;
|
31 |
|
32 | if (!certDir || certDir === 'undefined') {
|
33 | certDir = process.platform === 'darwin' ? _path2.default.join(process.env.HOME, 'Library/Preferences') : '/var/local';
|
34 | }
|
35 | certDir = _path2.default.join(certDir, './.cert_center');
|
36 |
|
37 | var rootKeyPath = _path2.default.resolve(certDir, './cert.key');
|
38 | var rootCrtPath = _path2.default.resolve(certDir, './cert.crt');
|
39 | var certCachePath = _path2.default.resolve(certDir, 'certCache');
|
40 | var certCache = {};
|
41 |
|
42 |
|
43 | var isRootCertExits = function isRootCertExits() {
|
44 | return !!(_fs2.default.existsSync(certDir) && _fs2.default.existsSync(rootKeyPath) && _fs2.default.existsSync(rootCrtPath));
|
45 | };
|
46 |
|
47 | var setRootCert = function setRootCert() {
|
48 | _fsExtra2.default.ensureDirSync(certDir);
|
49 |
|
50 | _fsExtra2.default.emptyDirSync(certDir);
|
51 | _log2.default.info('根证书生成目录: ' + certDir);
|
52 | var result = (0, _createCert.createRootCert)();
|
53 | var privateKey = result.privateKey;
|
54 | var cert = result.cert;
|
55 | _fs2.default.writeFileSync(rootKeyPath, privateKey);
|
56 | _fs2.default.writeFileSync(rootCrtPath, cert);
|
57 | return {
|
58 | privateKey: privateKey,
|
59 | cert: cert
|
60 | };
|
61 | };
|
62 |
|
63 |
|
64 | var getRootCert = function getRootCert() {
|
65 | var privateKey, cert;
|
66 |
|
67 | if (certCache.root) {
|
68 | return certCache.root;
|
69 | }
|
70 |
|
71 | _fsExtra2.default.ensureDirSync(certDir);
|
72 | if (!isRootCertExits()) {
|
73 | _log2.default.error('没有生成根证书,请调用命令生成根证书 -h查看帮助');
|
74 | process.exit(0);
|
75 | } else {
|
76 | privateKey = _fs2.default.readFileSync(rootKeyPath, { encoding: 'utf8' });
|
77 | cert = _fs2.default.readFileSync(rootCrtPath, { encoding: 'utf8' });
|
78 | certCache.root = { privateKey: privateKey, cert: cert };
|
79 | }
|
80 | return { privateKey: privateKey, cert: cert };
|
81 | };
|
82 |
|
83 |
|
84 | var isCertExits = function isCertExits(keyPath, crtPath) {
|
85 | return _fs2.default.existsSync(keyPath) && _fs2.default.existsSync(crtPath);
|
86 | };
|
87 |
|
88 | var getCert = function getCert(domain) {
|
89 | var result = {};
|
90 | if (!domain) {
|
91 | return result;
|
92 | }
|
93 |
|
94 | if (certCache[domain]) {
|
95 | return certCache[domain];
|
96 | }
|
97 | var mc = _nodeForge.md.md5.create();
|
98 | mc.update(domain);
|
99 | var domainMd5 = mc.digest().toHex();
|
100 | var keyPath = _path2.default.join(certCachePath, domainMd5 + ".key");
|
101 | var certPath = _path2.default.join(certCachePath, domainMd5 + ".crt");
|
102 | var cert, privateKey;
|
103 | if (isCertExits(keyPath, certPath)) {
|
104 | privateKey = _fs2.default.readFileSync(keyPath, { encoding: 'utf8' });
|
105 | cert = _fs2.default.readFileSync(certPath, { encoding: 'utf8' });
|
106 | } else {
|
107 | var _createSelfCert = (0, _createCert.createSelfCert)(domain, getRootCert());
|
108 |
|
109 | cert = _createSelfCert.cert;
|
110 | privateKey = _createSelfCert.privateKey;
|
111 |
|
112 | _fsExtra2.default.ensureDirSync(certCachePath);
|
113 | _fs2.default.writeFileSync(keyPath, privateKey);
|
114 | _fs2.default.writeFileSync(certPath, cert);
|
115 | }
|
116 | certCache[domain] = { cert: cert, privateKey: privateKey };
|
117 | return { cert: cert, privateKey: privateKey };
|
118 | };
|
119 |
|
120 |
|
121 | var emptyCertDir = function emptyCertDir() {
|
122 | _fsExtra2.default.emptyDirSync(certDir);
|
123 | };
|
124 |
|
125 | var setCertDir = function setCertDir(path) {
|
126 | if (!path) {
|
127 | return;
|
128 | }
|
129 | _fsExtra2.default.ensureDirSync(path);
|
130 | certDir = path;
|
131 | rootKeyPath = path.resolve(certDir, './cert.key');
|
132 | rootCrtPath = path.resolve(certDir, './cert.crt');
|
133 | certCachePath = path.resolve(certDir, 'certCache');
|
134 | };
|
135 | var getCertDir = function getCertDir() {
|
136 | return certDir;
|
137 | };
|
138 | var getRootCertPath = function getRootCertPath() {
|
139 | return rootCrtPath;
|
140 | };
|
141 |
|
142 |
|
143 | exports.isRootCertExits = isRootCertExits;
|
144 | exports.setRootCert = setRootCert;
|
145 | exports.setCertDir = setCertDir;
|
146 | exports.getCertDir = getCertDir;
|
147 | exports.getRootCertPath = getRootCertPath;
|
148 | exports.emptyCertDir = emptyCertDir;
|
149 | exports.getCert = getCert;
|
150 | exports.getRootCert = getRootCert; |
\ | No newline at end of file |