UNPKG

validar-firma-digital-pdf

Version:

Extrae las firmas digitales de archivos PDF

98 lines (83 loc) 2.42 kB
"use strict"; 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 };