Create ParseCSR.mjs

This commit is contained in:
arnydo 2018-10-10 14:47:11 -04:00 committed by GitHub
parent ec9dfd2918
commit ea1a1f00d0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -0,0 +1,56 @@
/**
* @author arnydo [arnydo@protonmail.com]
* @copyright Crown Copyright 2018
* @license Apache-2.0
*/
import Operation from "../Operation";
import forge from "node-forge/dist/forge.min.js";
/**
* ParseCSR operation
*/
class ParseCSR extends Operation {
/**
* ParseCSR constructor
*/
constructor() {
super();
this.name = "Parse CSR";
this.module = "PublicKey";
this.description = "Parses a Base64 encoded Certificate Signing Request (CSR).<br><br>In public key infrastructure (PKI) systems, a certificate signing request (also CSR or certification request) is a message sent from an applicant to a certificate authority in order to apply for a digital identity certificate. It usually contains the public key for which the certificate should be issued, identifying information (such as a domain name) and integrity protection (e.g., a digital signature). The most common format for CSRs is the PKCS #10 specification and another is the Signed Public Key and Challenge SPKAC format generated by some web browsers.<br><br>This operation displays the contents of a certificate signing request in a human readable format, similar to the openssl command line tool.";
this.infoURL = "https://en.wikipedia.org/wiki/Certificate_signing_request";
this.inputType = "string";
this.outputType = "string";
this.args = [];
}
/**
* @param {string} input
* @param {Object[]} args
* @returns {string}
*/
run(input) {
if (!input.length) {
return "No input";
}
const csr = forge.pki.certificationRequestFromPem(input);
const extInfo = csr.getAttribute({ name: "extensionRequest" }).extensions;
const subjectAltNames = extInfo[0].altNames.map(function(name){
return name.value;
});
return `CommonName: ${csr.subject.getField("CN").value}
Locality: ${csr.subject.getField("L").value}
State: ${csr.subject.getField("ST").value}
Country: ${csr.subject.getField("C").value}
EmailAddress: ${csr.subject.getField("E").value}
Subject Alternative Names: ${subjectAltNames.map(function (name) {
return name;
})}`;
}
}
export default ParseCSR;