UNPKG

electron-root-ssl-pinning

Version:
50 lines (49 loc) 2.35 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const lodash_flow_1 = __importDefault(require("lodash.flow")); const parsePemFile_1 = require("./parsePemFile"); const utils_1 = require("./utils"); const createChainVerifier_1 = require("./createChainVerifier"); exports.createRootCaVerifier = rootCertificates => lodash_flow_1.default(determineTypeOfGivenArgument, createCAStore, createChainVerifier_1.createChainVerifier)(rootCertificates); /** * Determine if 'rootCertificates' is either a pathname to '*.pem' file or an array of certificates */ function determineTypeOfGivenArgument(rootCertificates) { if (typeof rootCertificates === "string") { return parsePemFile_1.parsePemFile(rootCertificates); } else if (Array.isArray(rootCertificates)) { return rootCertificates; } throw new Error("You have to provide a path to '*.pem' file or an array of root CA"); } exports.determineTypeOfGivenArgument = determineTypeOfGivenArgument; /** * Create root CA store dictionary: { ['* commonName * organizationName * organizationalUnitName *']: PKICertificate } */ function createCAStore(rootCertificatesList) { try { return rootCertificatesList.reduce((dictionary, pem) => { const pkiCert = utils_1.createPKICertificate(pem); const isCorrectValidityPeriod = utils_1.isValidityPeriodCorrect(pkiCert); const pemFirstSymbols = pem.slice(27, 47).trim(); if (!isCorrectValidityPeriod) { console.error(`Given root certificate '${pemFirstSymbols}...' has an invalid validity period (either it has expired or is not valid yet)`); } if (!utils_1.isRootCertificate(pkiCert)) { throw new Error(`Certificate '${pemFirstSymbols}...' is not a root CA`); } const dn = utils_1.findDistinguishedName(pkiCert, "subject"); dictionary[dn] = pkiCert; return dictionary; }, {}); } catch (err) { console.error("An error occurred during creation of CA store. Please check correctness of your root certificates."); throw err; } } exports.createCAStore = createCAStore;