107 lines
17 KiB
JavaScript
107 lines
17 KiB
JavaScript
![]() |
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.ensureConfigDirs = exports.getLegacyConfigDir = exports.rootCACertPath = exports.rootCAKeyPath = exports.rootCADir = exports.withDomainCertificateConfig = exports.withDomainSigningRequestConfig = exports.caSelfSignConfig = exports.opensslDatabaseFilePath = exports.opensslSerialFilePath = exports.caVersionFile = exports.pathForDomain = exports.domainsDir = exports.getStableDomainPath = exports.configPath = exports.configDir = exports.isWindows = exports.isLinux = exports.isMac = void 0;
|
||
|
const tslib_1 = require("tslib");
|
||
|
const path_1 = tslib_1.__importDefault(require("path"));
|
||
|
const fs_1 = require("fs");
|
||
|
const mkdirp_1 = require("mkdirp");
|
||
|
const lodash_1 = require("lodash");
|
||
|
const applicationConfigPath = require("application-config-path");
|
||
|
const eol_1 = tslib_1.__importDefault(require("eol"));
|
||
|
const utils_1 = require("./utils");
|
||
|
// Platform shortcuts
|
||
|
exports.isMac = process.platform === 'darwin';
|
||
|
exports.isLinux = process.platform === 'linux';
|
||
|
exports.isWindows = process.platform === 'win32';
|
||
|
// Common paths
|
||
|
exports.configDir = applicationConfigPath('devcert');
|
||
|
exports.configPath = path_1.default.join.bind(path_1.default, exports.configDir);
|
||
|
const getFilteredDomains = (domains) => Array.from(domains
|
||
|
.sort((a, b) => b.length - a.length)
|
||
|
.reduce((filteredList, domain) => Array.from(filteredList)
|
||
|
.reduce((matches, item) => {
|
||
|
if (item.indexOf(domain) > -1) {
|
||
|
matches.add(domain);
|
||
|
}
|
||
|
else if (domain.indexOf(item) === -1 && item.indexOf(domain) === -1) {
|
||
|
matches.add(item);
|
||
|
matches.add(domain);
|
||
|
}
|
||
|
else {
|
||
|
matches.add(item);
|
||
|
}
|
||
|
return matches;
|
||
|
}, new Set()), new Set([domains[0]]))).sort();
|
||
|
const getStableDomainPath = (domains) => domains.length === 1 ?
|
||
|
domains[0] :
|
||
|
'san-' + utils_1.numericHash(getFilteredDomains(domains).join(''));
|
||
|
exports.getStableDomainPath = getStableDomainPath;
|
||
|
exports.domainsDir = exports.configPath('domains');
|
||
|
exports.pathForDomain = path_1.default.join.bind(path_1.default, exports.domainsDir);
|
||
|
exports.caVersionFile = exports.configPath('devcert-ca-version');
|
||
|
exports.opensslSerialFilePath = exports.configPath('certificate-authority', 'serial');
|
||
|
exports.opensslDatabaseFilePath = exports.configPath('certificate-authority', 'index.txt');
|
||
|
exports.caSelfSignConfig = path_1.default.join(__dirname, '../openssl-configurations/certificate-authority-self-signing.conf');
|
||
|
function generateSubjectAltNames(domains) {
|
||
|
return domains
|
||
|
.reduce((dnsEntries, domain) => dnsEntries.concat([
|
||
|
`DNS.${dnsEntries.length + 1} = ${domain}`,
|
||
|
`DNS.${dnsEntries.length + 2} = *.${domain}`,
|
||
|
]), [])
|
||
|
.join("\r\n");
|
||
|
}
|
||
|
function withDomainSigningRequestConfig(domains, cb) {
|
||
|
const domain = domains[0];
|
||
|
const subjectAltNames = generateSubjectAltNames(domains);
|
||
|
let tmpFile = utils_1.mktmp();
|
||
|
let source = fs_1.readFileSync(path_1.default.join(__dirname, '../openssl-configurations/domain-certificate-signing-requests.conf'), 'utf-8');
|
||
|
let template = lodash_1.template(source);
|
||
|
let result = template({ domain, subjectAltNames });
|
||
|
fs_1.writeFileSync(tmpFile, eol_1.default.auto(result));
|
||
|
cb(tmpFile);
|
||
|
fs_1.unlinkSync(tmpFile);
|
||
|
}
|
||
|
exports.withDomainSigningRequestConfig = withDomainSigningRequestConfig;
|
||
|
function withDomainCertificateConfig(domains, cb) {
|
||
|
const domainPath = exports.getStableDomainPath(domains);
|
||
|
const subjectAltNames = generateSubjectAltNames(domains);
|
||
|
let tmpFile = utils_1.mktmp();
|
||
|
let source = fs_1.readFileSync(path_1.default.join(__dirname, '../openssl-configurations/domain-certificates.conf'), 'utf-8');
|
||
|
let template = lodash_1.template(source);
|
||
|
let result = template({
|
||
|
subjectAltNames,
|
||
|
serialFile: exports.opensslSerialFilePath,
|
||
|
databaseFile: exports.opensslDatabaseFilePath,
|
||
|
domainDir: exports.pathForDomain(domainPath)
|
||
|
});
|
||
|
fs_1.writeFileSync(tmpFile, eol_1.default.auto(result));
|
||
|
cb(tmpFile);
|
||
|
fs_1.unlinkSync(tmpFile);
|
||
|
}
|
||
|
exports.withDomainCertificateConfig = withDomainCertificateConfig;
|
||
|
// confTemplate = confTemplate.replace(/DATABASE_PATH/, configPath('index.txt').replace(/\\/g, '\\\\'));
|
||
|
// confTemplate = confTemplate.replace(/SERIAL_PATH/, configPath('serial').replace(/\\/g, '\\\\'));
|
||
|
// confTemplate = eol.auto(confTemplate);
|
||
|
exports.rootCADir = exports.configPath('certificate-authority');
|
||
|
exports.rootCAKeyPath = exports.configPath('certificate-authority', 'private-key.key');
|
||
|
exports.rootCACertPath = exports.configPath('certificate-authority', 'certificate.cert');
|
||
|
// Exposed for uninstallation purposes.
|
||
|
function getLegacyConfigDir() {
|
||
|
if (exports.isWindows && process.env.LOCALAPPDATA) {
|
||
|
return path_1.default.join(process.env.LOCALAPPDATA, 'devcert', 'config');
|
||
|
}
|
||
|
else {
|
||
|
let uid = process.getuid && process.getuid();
|
||
|
let userHome = (exports.isLinux && uid === 0) ? path_1.default.resolve('/usr/local/share') : require('os').homedir();
|
||
|
return path_1.default.join(userHome, '.config', 'devcert');
|
||
|
}
|
||
|
}
|
||
|
exports.getLegacyConfigDir = getLegacyConfigDir;
|
||
|
function ensureConfigDirs() {
|
||
|
mkdirp_1.sync(exports.configDir);
|
||
|
mkdirp_1.sync(exports.domainsDir);
|
||
|
mkdirp_1.sync(exports.rootCADir);
|
||
|
}
|
||
|
exports.ensureConfigDirs = ensureConfigDirs;
|
||
|
ensureConfigDirs();
|
||
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJjb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLHdEQUF3QjtBQUN4QiwyQkFBNEY7QUFDNUYsbUNBQXdDO0FBQ3hDLG1DQUFrRDtBQUNsRCxpRUFBa0U7QUFDbEUsc0RBQXNCO0FBQ3RCLG1DQUEyQztBQUUzQyxxQkFBcUI7QUFDUixRQUFBLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQztBQUN0QyxRQUFBLE9BQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQztBQUN2QyxRQUFBLFNBQVMsR0FBRyxPQUFPLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQztBQUV0RCxlQUFlO0FBQ0YsUUFBQSxTQUFTLEdBQUcscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDN0MsUUFBQSxVQUFVLEdBQTBDLGNBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQUksRUFBRSxpQkFBUyxDQUFDLENBQUM7QUFFakcsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLE9BQWlCLEVBQUUsRUFBRSxDQUMvQyxLQUFLLENBQUMsSUFBSSxDQUNSLE9BQU87S0FDSixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7S0FDbkMsTUFBTSxDQUFDLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQy9CLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0tBQ3JCLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRTtJQUN4QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNyQjtT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
|