electron-root-ssl-pinning
Version:
Pinning root CA certificates into your Electron app
65 lines (64 loc) • 2.28 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = __importDefault(require("fs"));
const n_readlines_1 = __importDefault(require("n-readlines"));
function parsePemFile(pathname) {
checkFileExistence(pathname);
const rootCertificatesList = [];
const lineReader = new n_readlines_1.default(pathname);
let iteration;
do {
iteration = findAndReadCertificate(lineReader);
if (typeof iteration.result === "string") {
rootCertificatesList.push(iteration.result);
}
} while (iteration.isEnd === false);
if (rootCertificatesList.length === 0) {
throw new Error(`File ${pathname} does not contain any certificates`);
}
return rootCertificatesList;
}
exports.parsePemFile = parsePemFile;
function checkFileExistence(pathname) {
const error = new Error(`File '${pathname}' does not exist. Please check correct pathname to your root CA '*.pem' file.`);
if (!pathname) {
throw error;
}
const result = fs_1.default.existsSync(pathname);
if (result === false) {
throw error;
}
}
exports.checkFileExistence = checkFileExistence;
function findAndReadCertificate(lineReader) {
let currentLine;
let currentString;
let certificate = "";
do {
currentLine = lineReader.next();
if (currentLine === false) {
return { result: undefined, isEnd: true };
}
currentString = currentLine.toString("ascii");
} while (!currentString.startsWith("-----BEGIN CERTIFICATE-----"));
updateCertificateString();
do {
currentLine = lineReader.next();
if (currentLine === false) {
return { result: undefined, isEnd: true };
}
currentString = currentLine.toString("ascii");
updateCertificateString();
} while (!currentString.startsWith("-----END CERTIFICATE-----"));
return {
result: certificate.trim(),
isEnd: false,
};
function updateCertificateString() {
certificate += currentString.trim() + "\n";
}
}
exports.findAndReadCertificate = findAndReadCertificate;