Add password prompt functionality and tests while uploading encrypted PDF

This commit is contained in:
alam00000
2026-03-26 12:11:12 +05:30
parent f88f872162
commit 1dbf907eeb
79 changed files with 7869 additions and 4419 deletions

View File

@@ -1,9 +1,6 @@
import { showAlert } from '../ui.js';
import {
downloadFile,
formatBytes,
readFileAsArrayBuffer,
} from '../utils/helpers.js';
import { downloadFile, formatBytes } from '../utils/helpers.js';
import { batchDecryptIfNeeded } from '../utils/password-prompt.js';
import { PDFDocument } from 'pdf-lib';
import { flattenAnnotations } from '../utils/flatten-annotations.js';
import { icons, createIcons } from 'lucide';
@@ -109,23 +106,22 @@ async function flattenPdf() {
const loaderModal = document.getElementById('loader-modal');
const loaderText = document.getElementById('loader-text');
pageState.files = await batchDecryptIfNeeded(pageState.files);
try {
if (pageState.files.length === 1) {
if (loaderModal) loaderModal.classList.remove('hidden');
if (loaderText) loaderText.textContent = 'Flattening PDF...';
const file = pageState.files[0];
const arrayBuffer = await readFileAsArrayBuffer(file);
const pdfDoc = await PDFDocument.load(arrayBuffer as ArrayBuffer, {
ignoreEncryption: true,
});
const arrayBuffer = await file.arrayBuffer();
const pdfDoc = await PDFDocument.load(arrayBuffer);
try {
flattenFormsInDoc(pdfDoc);
} catch (e: any) {
if (e.message.includes('getForm')) {
// Ignore if no form found
} else {
} catch (e: unknown) {
const msg = e instanceof Error ? e.message : String(e);
if (!msg.includes('getForm')) {
throw e;
}
}
@@ -157,17 +153,14 @@ async function flattenPdf() {
loaderText.textContent = `Flattening ${i + 1}/${pageState.files.length}: ${file.name}...`;
try {
const arrayBuffer = await readFileAsArrayBuffer(file);
const pdfDoc = await PDFDocument.load(arrayBuffer as ArrayBuffer, {
ignoreEncryption: true,
});
const arrayBuffer = await file.arrayBuffer();
const pdfDoc = await PDFDocument.load(arrayBuffer);
try {
flattenFormsInDoc(pdfDoc);
} catch (e: any) {
if (e.message.includes('getForm')) {
// Ignore if no form found
} else {
} catch (e: unknown) {
const msg = e instanceof Error ? e.message : String(e);
if (!msg.includes('getForm')) {
throw e;
}
}
@@ -207,10 +200,12 @@ async function flattenPdf() {
}
if (loaderModal) loaderModal.classList.add('hidden');
}
} catch (e: any) {
} catch (e: unknown) {
console.error(e);
if (loaderModal) loaderModal.classList.add('hidden');
showAlert('Error', e.message || 'An unexpected error occurred.');
const errorMessage =
e instanceof Error ? e.message : 'An unexpected error occurred.';
showAlert('Error', errorMessage);
}
}