mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-10-21 06:12:21 +02:00
fix(email): replace html2pdf with Print / save PDF and harden EML export
SAN-157 removed the html2pdf client library. The PDF export code added in the original PR commit referenced the deleted library and would fail at runtime. Replace the html2pdf-based _downloadSelectedEmailPdf with a browser Print / save PDF workflow using a sandboxed iframe and window.print(), matching the established pattern in document.js and compare/index.js. Changes: - Replace _loadEmailHtml2Pdf and _downloadSelectedEmailPdf with _printSelectedEmails using a sandboxed iframe + contentWindow.print() - Update menu label from 'PDF' to 'Print / save PDF' - Add 512 MiB total size cap to /messages-download-bulk to prevent unbounded memory growth when exporting many large messages - Update test assertions to verify the browser print pattern and confirm html2pdf is not referenced - Add regression tests for size cap, selection count validation, non-numeric UID rejection, and partial batch failure accounting
This commit is contained in:
@@ -4216,6 +4216,10 @@ def setup_email_routes():
|
||||
used_names: set[str] = set()
|
||||
exported = 0
|
||||
skipped = 0
|
||||
total_bytes = 0
|
||||
# 512 MiB safety cap prevents unbounded memory growth when exporting
|
||||
# many large messages.
|
||||
max_total_bytes = 512 * 1024 * 1024
|
||||
single_export: tuple[str, bytes] | None = None
|
||||
|
||||
def _email_filename(row: dict, uid: str) -> str:
|
||||
@@ -4299,6 +4303,9 @@ def setup_email_routes():
|
||||
suffix += 1
|
||||
used_names.add(unique_name.lower())
|
||||
message_bytes = _fixture_message_bytes(fixture, uid, folder)
|
||||
total_bytes += len(message_bytes)
|
||||
if total_bytes > max_total_bytes:
|
||||
raise HTTPException(status_code=413, detail="Export too large")
|
||||
zf.writestr(f"{export_folder}/{unique_name}", message_bytes)
|
||||
single_export = (unique_name, message_bytes)
|
||||
exported += 1
|
||||
@@ -4336,6 +4343,9 @@ def setup_email_routes():
|
||||
suffix += 1
|
||||
used_names.add(unique_name.lower())
|
||||
message_bytes = bytes(raw_message)
|
||||
total_bytes += len(message_bytes)
|
||||
if total_bytes > max_total_bytes:
|
||||
raise HTTPException(status_code=413, detail="Export too large")
|
||||
zf.writestr(f"{export_folder}/{unique_name}", message_bytes)
|
||||
single_export = (unique_name, message_bytes)
|
||||
found.add(uid)
|
||||
|
||||
Reference in New Issue
Block a user