1 | import path from 'path';
|
2 | import { unlinkSync as rm, writeFileSync as writeFile, readFileSync as readFile } from 'fs';
|
3 | import { sync as mkdirp } from 'mkdirp';
|
4 | import { template as makeTemplate } from 'lodash';
|
5 | import applicationConfigPath = require('application-config-path');
|
6 | import eol from 'eol';
|
7 | import { mktmp } from './utils';
|
8 |
|
9 |
|
10 | export const isMac = process.platform === 'darwin';
|
11 | export const isLinux = process.platform === 'linux';
|
12 | export const isWindows = process.platform === 'win32';
|
13 |
|
14 |
|
15 | export const configDir = applicationConfigPath('devcert');
|
16 | export const configPath: (...pathSegments: string[]) => string = path.join.bind(path, configDir);
|
17 |
|
18 | export const domainsDir = configPath('domains');
|
19 | export const pathForDomain: (domain: string, ...pathSegments: string[]) => string = path.join.bind(path, domainsDir)
|
20 |
|
21 | export const caVersionFile = configPath('devcert-ca-version');
|
22 | export const opensslSerialFilePath = configPath('certificate-authority', 'serial');
|
23 | export const opensslDatabaseFilePath = configPath('certificate-authority', 'index.txt');
|
24 | export const caSelfSignConfig = path.join(__dirname, '../openssl-configurations/certificate-authority-self-signing.conf');
|
25 |
|
26 | export 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 |
|
36 | export 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 |
|
52 |
|
53 |
|
54 |
|
55 | export const rootCADir = configPath('certificate-authority');
|
56 | export const rootCAKeyPath = configPath('certificate-authority', 'private-key.key');
|
57 | export const rootCACertPath = configPath('certificate-authority', 'certificate.cert');
|
58 |
|
59 | mkdirp(configDir);
|
60 | mkdirp(domainsDir);
|
61 | mkdirp(rootCADir);
|