Files
OpenSign/apps/OpenSignServer/cloud/customRoute/decryptpdf.js
T
nxglabs cbca22c308 Merge pull request #861 from nxglabs/staging
fix: handle password protected pdf
2025-06-18 14:03:05 +00:00

44 lines
1.4 KiB
JavaScript

import fs from 'node:fs';
import multer from 'multer';
import Coherentpdf from 'coherentpdf';
const storage = multer.diskStorage({
destination(req, file, cb) {
cb(null, 'exports');
},
filename(req, file, cb) {
cb(null, file.originalname);
},
});
export const upload = multer({ storage });
export default async function decryptpdf(req, res) {
const inputPath = req.file.path;
const password = req.body.password || '';
try {
const file = fs.readFileSync(inputPath);
const pdf = await Coherentpdf.fromMemory(file, password);
await Coherentpdf.decryptPdf(pdf, password);
// Get decrypted buffer directly from memory (no file I/O)
const buffer = await Coherentpdf.toMemory(pdf, false, false);
res.set({
'Content-Type': 'application/pdf',
'Content-Disposition': 'inline; filename="decrypted.pdf"',
'Content-Length': buffer.length,
});
res.send(buffer);
fs.unlink(inputPath, () => {});
} catch (err) {
fs.unlink(inputPath, () => {});
console.log('Error in decrypt file: ', err);
let code = err?.code ? err.code : 400;
let message = err?.[2]?.c ? err[2].c : 'Something went wrong.';
if (err?.[2]?.c?.includes('Bad password') || err?.[2]?.c?.includes('decrypt_pdf_inner')) {
code = 401;
message = 'Incorrect password.';
}
return res.status(code).json({ error: message });
}
}