UNPKG

4.71 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.getRootCert = exports.getCert = exports.emptyCertDir = exports.getRootCertPath = exports.getCertDir = exports.setCertDir = exports.setRootCert = exports.isRootCertExits = undefined;
7
8var _fs = require('fs');
9
10var _fs2 = _interopRequireDefault(_fs);
11
12var _path = require('path');
13
14var _path2 = _interopRequireDefault(_path);
15
16var _fsExtra = require('fs-extra');
17
18var _fsExtra2 = _interopRequireDefault(_fsExtra);
19
20var _nodeForge = require('node-forge');
21
22var _log = require('../log');
23
24var _log2 = _interopRequireDefault(_log);
25
26var _createCert = require('./createCert');
27
28function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
30var certDir = process.env.APPDATA;
31
32if (!certDir || certDir === 'undefined') {
33 certDir = process.platform === 'darwin' ? _path2.default.join(process.env.HOME, 'Library/Preferences') : '/var/local';
34}
35certDir = _path2.default.join(certDir, './.cert_center');
36
37var rootKeyPath = _path2.default.resolve(certDir, './cert.key');
38var rootCrtPath = _path2.default.resolve(certDir, './cert.crt');
39var certCachePath = _path2.default.resolve(certDir, 'certCache');
40var certCache = {};
41// console.log(log);
42//是否纯在根证书
43var isRootCertExits = function isRootCertExits() {
44 return !!(_fs2.default.existsSync(certDir) && _fs2.default.existsSync(rootKeyPath) && _fs2.default.existsSync(rootCrtPath));
45};
46
47var 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//不存在根证书就创建
64var 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//证书是否存在
84var isCertExits = function isCertExits(keyPath, crtPath) {
85 return _fs2.default.existsSync(keyPath) && _fs2.default.existsSync(crtPath);
86};
87//获取证书
88var 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// 删除证书目录
121var emptyCertDir = function emptyCertDir() {
122 _fsExtra2.default.emptyDirSync(certDir);
123};
124
125var 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};
135var getCertDir = function getCertDir() {
136 return certDir;
137};
138var getRootCertPath = function getRootCertPath() {
139 return rootCrtPath;
140};
141//getCert('lmlc.com');
142// emptyCertDir();
143exports.isRootCertExits = isRootCertExits;
144exports.setRootCert = setRootCert;
145exports.setCertDir = setCertDir;
146exports.getCertDir = getCertDir;
147exports.getRootCertPath = getRootCertPath;
148exports.emptyCertDir = emptyCertDir;
149exports.getCert = getCert;
150exports.getRootCert = getRootCert;
\No newline at end of file