UNPKG

2.67 kBPlain TextView Raw
1import path from 'path';
2import { unlinkSync as rm, writeFileSync as writeFile, readFileSync as readFile } from 'fs';
3import { sync as mkdirp } from 'mkdirp';
4import { template as makeTemplate } from 'lodash';
5import applicationConfigPath = require('application-config-path');
6import eol from 'eol';
7import { mktmp } from './utils';
8
9// Platform shortcuts
10export const isMac = process.platform === 'darwin';
11export const isLinux = process.platform === 'linux';
12export const isWindows = process.platform === 'win32';
13
14// Common paths
15export const configDir = applicationConfigPath('devcert');
16export const configPath: (...pathSegments: string[]) => string = path.join.bind(path, configDir);
17
18export const domainsDir = configPath('domains');
19export const pathForDomain: (domain: string, ...pathSegments: string[]) => string = path.join.bind(path, domainsDir)
20
21export const caVersionFile = configPath('devcert-ca-version');
22export const opensslSerialFilePath = configPath('certificate-authority', 'serial');
23export const opensslDatabaseFilePath = configPath('certificate-authority', 'index.txt');
24export const caSelfSignConfig = path.join(__dirname, '../openssl-configurations/certificate-authority-self-signing.conf');
25
26export function withDomainSigningRequestConfig(domain: string, cb: (filepath: string) => void) {
27 let tmpFile = mktmp();
28 let source = readFile(path.join(__dirname, '../openssl-configurations/domain-certificate-signing-requests.conf'), 'utf-8');
29 let template = makeTemplate(source);
30 let result = template({ domain });
31 writeFile(tmpFile, eol.auto(result));
32 cb(tmpFile);
33 rm(tmpFile);
34}
35
36export function withDomainCertificateConfig(domain: string, cb: (filepath: string) => void) {
37 let tmpFile = mktmp();
38 let source = readFile(path.join(__dirname, '../openssl-configurations/domain-certificates.conf'), 'utf-8');
39 let template = makeTemplate(source);
40 let result = template({
41 domain,
42 serialFile: opensslSerialFilePath,
43 databaseFile: opensslDatabaseFilePath,
44 domainDir: pathForDomain(domain)
45 });
46 writeFile(tmpFile, eol.auto(result));
47 cb(tmpFile);
48 rm(tmpFile);
49}
50
51 // confTemplate = confTemplate.replace(/DATABASE_PATH/, configPath('index.txt').replace(/\\/g, '\\\\'));
52 // confTemplate = confTemplate.replace(/SERIAL_PATH/, configPath('serial').replace(/\\/g, '\\\\'));
53 // confTemplate = eol.auto(confTemplate);
54
55export const rootCADir = configPath('certificate-authority');
56export const rootCAKeyPath = configPath('certificate-authority', 'private-key.key');
57export const rootCACertPath = configPath('certificate-authority', 'certificate.cert');
58
59mkdirp(configDir);
60mkdirp(domainsDir);
61mkdirp(rootCADir);