validar-firma-digital-pdf
Version:
Extrae las firmas digitales de archivos PDF
98 lines (83 loc) • 2.42 kB
JavaScript
;
const {
exec
} = require('child_process');
const tmp = require('tmp');
const fs = require('fs');
// Ruta de la librería en java para extraer información de archivos PDF
const PATH_PKCS11_FIRMA = '/lib/FirmaPkcs11PdfLib.jar';
const PATH_PKCS11_FIRMA_SIMPLE = '/lib/FirmaPkcs11PdfLib.jar';
const COMANDO = 'java -jar :libreriaJar -doc :documentoPdf';
const crearPdf = (archivoPdf, base64) => {
let bufferPdf = new Buffer(base64, 'base64');
fs.writeFileSync(archivoPdf, bufferPdf);
return archivoPdf;
}
const ejecutarComando = (comando) => {
return new Promise((resolve, reject) => {
exec(comando, (error, stdout, stderr) => {
if (error) {
reject(error);
} else {
try {
resolve(JSON.parse(stdout));
} catch (e) {
reject(e);
}
}
});
});
}
const obtenerFirmas = (documentoPdf) => {
let comando = '';
let libreriaJar = __dirname + PATH_PKCS11_FIRMA;
// Generación del comando
comando = COMANDO.replace(':libreriaJar', libreriaJar);
comando = comando.replace(':documentoPdf', documentoPdf);
// Ejecución en línea de comandos
return ejecutarComando(comando);
}
const obtenerFirmasSimple = (documentoPdf) => {
let comando = '';
let libreriaJar = __dirname + PATH_PKCS11_FIRMA_SIMPLE;
// Generación del comando
comando = COMANDO.replace(':libreriaJar', libreriaJar);
comando = comando.replace(':documentoPdf', documentoPdf);
// Ejecución en línea de comandos
//console.log(comando);
return ejecutarComando(comando);
}
/**
* Recupera los datos de la firma con ocsp y/o crl simple permite omitir el ocsp
*
* @param {String} base64
* @param {boolean} simple
* @returns
*/
const obtenerFirmasBase64 = (base64, simple) => {
if (simple) {
return recuperarNombreArchivo(base64)
.then(archivoPdf => crearPdf(archivoPdf, base64))
.then(obtenerFirmasSimple);
}
return recuperarNombreArchivo(base64)
.then(archivoPdf => crearPdf(archivoPdf, base64))
.then(obtenerFirmas);
}
const recuperarNombreArchivo = (base64) => {
return new Promise((resolve, reject) => {
tmp.file({
discardDescriptor: true,
postfix: '.pdf'
}, (err, path) => {
if (err) {
reject(error);
}
resolve(path);
});
});
}
module.exports = {
obtenerFirmas: obtenerFirmas,
obtenerFirmasBase64: obtenerFirmasBase64
};