node-ssl-certificates
Version:
a node.js library for fetching, parsing and validating ssl-certificates
79 lines (65 loc) • 1.71 kB
JavaScript
// author: jmarroyave
;
async function get( from, options={} ){
const { get: getSource } = require("../utils/source");
const { verbose=false } = options
var resp, cert;
if(verbose) console.breadcrumbs.push("getPEM")
const source = getSource( from, options )
switch( source.type ){
case "URL":
const { URL } = require('url')
const url = new URL(source.value);
cert = await require("../fetch").fromURL(from, options);
resp = cert
break;
case "DOMAIN":
cert = await require("../fetch").fromConnection(source.value, options);
resp = cert
break;
case "FILE":
const fs = require("fs")
if(source.value.endsWith("pem")){
cert = fs.readFileSync(source.value, "utf8");
resp = cert
} else if(source.value.endsWith("der")){
cert = fs.readFileSync(source.value);
resp = fromDER(cert)
} else {
cert = fs.readFileSync(source.value, "utf8");
resp = cert
}
break;
}
if(verbose) console.breadcrumbs.print(resp.length)
console.breadcrumbs.pop()
source.pem = resp;
return source;
}
function encode(str) {
const prefix = "-----BEGIN CERTIFICATE-----\n";
const postfix = "-----END CERTIFICATE-----";
const pemText =
prefix +
str
.toString("base64")
.match(/.{0,64}/g)
.join("\n") +
postfix;
return pemText;
}
function fromDER( der ){
return encode(der)
}
function fromString( data ){
if(data.startsWith("----")){
return data
} else {
return fromDER( Buffer.from(data) )
}
}
module.exports = {
get: get,
fromDER: fromDER,
fromString: fromString,
};