UNPKG

fecr

Version:

Modulo de comprobantes electrónicos para el API del Ministerio de Hacienda de Costa Rica versión 4.3

80 lines (66 loc) 2.13 kB
"use strict"; var openssl = require("openssl-nodejs"); var fs = require("fs"); var path = require("path"); // 'openssl pkcs12 -in '+p12+' -nodes -passin pass:'+pass var signer = { p12ToPemString(p12, pass) { return new Promise((resolve, reject) => { // eslint-disable-next-line max-len openssl(["pkcs12", " -in ", p12, " -nodes ", " -passin ", " pass:".concat(pass)], (error, buffer) => { if (error.toString()) { reject(error.toString()); } else { resolve(buffer.toString()); } }); }); }, copyFileP12(pathP12) { return new Promise((resolve, reject) => { var basename = path.basename(pathP12); fs.copyFile(pathP12, "openssl/".concat(basename), err => { if (err) reject(err); resolve(basename); }); }); }, pem2js(pem) { // eslint-disable-next-line max-len var key = pem.match(/-----BEGIN PRIVATE KEY-----[\S\s]*?-----END PRIVATE KEY-----/g)[0]; // eslint-disable-next-line max-len var chain = pem.match(/-----BEGIN CERTIFICATE-----[\S\s]*?-----END CERTIFICATE-----/g); return { key, chain }; }, pem2der(pem) { var preparedPem = this.preparePem(pem); // convert base64 to ArrayBuffer return new Uint8Array(Buffer.from(preparedPem, "base64")); }, preparePem(pem) { return pem // remove BEGIN/END .replace(/-----(BEGIN|END)[\w\d\s]+-----/g, "") // remove \r, \n .replace(/[\r\n]/g, ""); }, getKeyPair(p12Path, pass) { return new Promise((resolve, reject) => { this.copyFileP12(p12Path).then(newPath => this.p12ToPemString(newPath, pass)).then(pem => { try { fs.unlinkSync("./openssl/".concat(path.basename(p12Path))); } catch (e) { reject(e); } var keyPairPem = this.pem2js(pem); var keyPair = { key: this.preparePem(keyPairPem.key), x509: this.preparePem(keyPairPem.chain[0]) }; resolve(keyPair); }).catch(error => { reject(error); }); }); } }; module.exports = signer; module.exports.default = signer;