Skip to content

Version-2.0.2

Choose a tag to compare

@Tusharp21 Tusharp21 released this 26 Apr 17:36
· 12 commits to develop since this release

Scan Me — Release Notes

All previous releases are on GitHub: https://github.com/Tusharp21/scan_me/releases


v2.0.2

Patch release — Frappe Cloud audit compliance.

🛠 Fixes

  • Replaced raw frappe.cache.get / setex / incrby calls in the per-UUID rate limiter (api/verify_document_qr.py) with multitenancy-safe get_value / set_value. Resolves the Semgrep frappe-cache-breaks-multitenancy finding from the Frappe Cloud audit. Behaviour preserved — UUIDs over 60 hits / hour still get blocked, with the cache entry now correctly site-prefixed on multi-tenant benches.

🔁 No behaviour changes

This release is audit / fix only. No feature additions, no schema changes, no migrations.


v2.0.1

Patch release — Frappe Cloud audit compliance.

🛠 Fixes

  • Added [tool.bench.frappe-dependencies] section to pyproject.toml declaring supported Frappe range (>=14.0.0,<=17.0.0-dev).
  • Removed external links from the long description (README.md) per Frappe Cloud audit guidance.
  • Tightened the Advanced Print page role from All to System User, blocking Guest / Website User access while keeping all desk users (Sales User, Accountant, Stock User, etc.) functional.
  • Annotated the two intentional file-system call sites (api/pdf.py, utils/pades.py) with inline # nosemgrep: frappe-security-file-traversal markers — both are already gated by allow-list containment / fixed internal paths.

🔁 No behaviour changes

This release is audit / metadata only. No feature additions, no schema changes, no migrations.


v2.0.0

Major release — Chromium PDF pipeline, PAdES digital signatures, Advanced Print page, and a hardened Verified QR with tamper detection.

🚀 New features

🔐 Signing & Verification

  • Multi-signer support — same document can be signed by multiple users, each with their own Verified QR
  • Content hash (SHA-256) recorded at sign time — edits auto-invalidate the signature in PDFs and on the verify page
  • Permanent signature lock — Verified QR records can be locked so no one, including Administrator, can modify or delete
  • Stored-signature mode — server reads the user's saved signature instead of accepting client-supplied images
  • Signature Type selector — one setting controls Visual Block / Cryptographic (PAdES) / Both

🖨️ Advanced Print Page (/app/scan-me-print/{DocType}/{DocName})

  • Live PDF preview pane that re-renders on every option change (debounced)
  • Auto-fills Print Format + Letter Head defaults per doctype
  • Multi-copy (1–5) with optional comma-separated labels (Original / Duplicate / Triplicate / custom)
  • Header & footer repeat modes — All pages / First only / Last only / First + Last / None
  • QR / Barcode insertion at any corner of the PDF
  • Acrobat-style signature card with green VERIFIED / red INVALIDATED states
  • Watermark system — Document Status (auto DRAFT / CANCELLED / status) or Custom Text
  • Attach-to-Document option — saves the PDF as a private attachment on download
  • Breadcrumbs: DocType → DocName → Advanced Print

🧠 PAdES Digital Signatures (PyHanko)

  • Optional Adobe-compatible cryptographic PDF signatures
  • Self-signed certificate auto-generated on first use
  • Replace the PKCS#12 bundle with a CA-issued one for Adobe's green "Signed and all signatures are valid" badge

🌐 Public Verify Page (/verify_document/)

  • Redesigned mobile-first UI with dark-mode support
  • Three distinct result states — Verified, Signature Invalidated (tampered), Not Recognised
  • Admin-configurable detail level — Minimal / Standard (default) / Full — controls what guests see
  • Rate-limited to 30 requests per 60 seconds per IP

⚙️ Settings & Form Integration

  • Scan Me Settings is now a tabbed form — Allowed Documents / Verification & Signing / Public Verification / Print Dialog Features
  • New "Advanced Print" icon on document forms, placed immediately right of Frappe's native Print icon
  • Admin toggle to show/hide the Advanced Print icon

📄 Bundled print formats

  • Sales Invoice Scan Me — full-featured invoice with QR footer
  • SO — sample Sales Order format
  • Basic HTML Template by Scan Me — starter skeleton users can duplicate for any doctype

📝 Bundled Letter Head

  • Letter Head By Scan Me ships as a fixture for reference — admin can mark it default or customize as needed

🧰 Jinja helpers (for print format authors)

  • qr_img, qr_link_img, verify_qr, verify_qr_img — added alongside existing qr, barcode, qr_link

🧱 Dependencies added

  • playwright~=1.47 — Chromium PDF rendering
  • pypdf~=6.1.3 — multi-copy PDF merging
  • pyHanko~=0.25 — PAdES signing
  • cryptography>=41 — self-signed cert generation

📦 Installation

bench get-app https://github.com/Tusharp21/scan_me
bench install-app scan_me

Chromium for PDF rendering (~200 MB) downloads automatically via the
after_install hook. On restricted hosts where auto-download fails,
run ./env/bin/python -m playwright install chromium manually — the app will show
a clear message pointing to this fallback.

Existing installs: bench migrate runs 5 patches that backfill sensible
defaults for new settings fields and will download Chromium if it isn't
already cached.

⚠️ Known limitations

  • Self-signed PAdES cert shows as "signer unknown" in Adobe until replaced with a CA-issued PFX
  • Test suite is skeleton-only — real test coverage planned for 2.1

📚 Documentation


v1.0.2 — 06 Jan 2026

  • System-verified QR code generation with unique document IDs
  • Logo integration in QR codes
  • Signature requirement for QR generation
  • Doctype-based configuration via Scan Me Settings
  • Public verification support with ROOT_URL/verify_document/

Generate a unique system ID linked to a specific document, with verification URL and embedded logo.


v1.0.1 — 18 Nov 2025

  • Fixed line-level issue in jinja_functions.py
  • Updated function logic for accurate output rendering
  • Minor code cleanup for readability

This update focuses on improving reliability in template utilities without introducing any breaking changes.


v1.0.0 — 15 Nov 2025

  • Jinja functions for print formats: qr(), barcode(), qr_link()
  • Global JavaScript function add_qr_to_description()
  • QR/barcode generation in desk forms and print formats
  • Auto-loading via hooks.py configuration