Paperless-ngx
Recent Changes
Update gotenberg to 8.32.0
Reverted SSRF defaults (breaking vs 8.31.0). 8.31.0 blocked private-IP destinations by default, which broke deployments running Gotenberg inside a private network. 8.32.0 restores the 8.30.x permissive defaults. Operators with internet-facing APIs opt into the strict posture via the new flags below.
Rejected
file://at/forms/chromium/convert/url. Submittingurl=file:///tmp/...used to let an unauthenticated caller enumerate the request working directory and read other in-flight uploads as rendered PDFs. The route now returns HTTP 400 for anyfile://URL.Required uploaded file for
image/pdfstamp and watermark sources. Twelve callsites acceptedstampSource=pdforwatermarkSource=pdfwith an expression pointing at any path the Gotenberg process could open, even when no file was uploaded. Handlers now return HTTP 400 unless the caller uploaded a matching file.Scoped
file://sub-resources to the request working directory. Crafted HTML could reference another request'sfile:///tmp/<reqdir>/.... The CDP request handler now restrictsfile://sub-resources to the current request's directory./convert/urland/screenshot/urlreject everyfile://sub-resource outright.Hardened Chromium against DNS rebinding. A short-TTL DNS authority could return a public IP at validation and a private IP at connect. A loopback HTTP / CONNECT proxy now sits between Chromium and the network, resolves DNS once, and pins the dial to the resolved IP. Skipped when
--chromium-proxy-serveror--chromium-host-resolver-rulesis set.Filtered LibreOffice outbound fetches through a proxy. Uploaded OOXML, RTF, and ODF files can embed external URLs that LibreOffice's libcurl resolves below every Go-side SSRF filter. LibreOffice now routes every outbound fetch through an in-process forward proxy on the same
gotenberg.DecideOutboundpath Chromium and webhook delivery use. See the four new flags below.Recovered webhook async panics. High-concurrency webhooks could panic the async goroutine and crash the whole process. The goroutine now snapshots the request context and recovers any future panic through the existing error path.
LibreOffice outbound URL filtering. Four flags mirror the Chromium and webhook layout:
--libreoffice-allow-list,--libreoffice-deny-list,--libreoffice-deny-private-ips,--libreoffice-deny-public-ips. All default permissive.IP-class filtering on four modules.
chromium,webhook,api-download-from, andlibreofficeeach accept matchingdeny-private-ipsanddeny-public-ipsflags. All default tofalse.Charts print as blank rectangles (#1531, #1532, #1534, #1535):
chromedp v0.15.0suspended the BeginFrame-driven callback dispatch loop underemulatedMediaType=print.requestAnimationFrame,ResizeObserver,IntersectionObserver, CSStransitionend, and CSSanimationendall stopped firing. Pinningchromedpback tov0.14.2restores native dispatch.
About
Paperless-ngx is an application that manages your personal documents. With the help of a document scanner (see Scanner recommendations), paperless transforms your wieldy physical document binders into a searchable archive and provides many utilities for finding and managing your documents.
Why This Exists
Paper is a nightmare. Environmental issues aside, there’s no excuse for it in the 21st century. It takes up space, collects dust, doesn’t support any form of a search feature, indexing is tedious, it’s heavy and prone to damage & loss.
I wrote this to make “going paperless” easier. I do not have to worry about finding stuff again. I feed documents right from the post box into the scanner and then shred them. Perhaps you might find it useful too.
Paperless-ngx
Paperless-ngx forked from paperless-ng to continue the great work and distribute responsibility of supporting and advancing the project among a team of people.
Install Paperless-ngx in a few minutes on your server with Cloudron. To install Cloudron first, follow our setup steps.