ods / pdf-engine

Dev Progress Report

Branch: dev · 2026-03-19 · 8 commits since skeleton
179
Tests Passing
84
Tests Added Today
+2,323
Lines Added
19
Files Changed
8
Security Fixes
SPLITa — Feature
PDF Split Operation
7deb7b0
  • src/processing/split.rs — SplitSpec tagged enum (all/ranges), PageRange validation
  • POST /v1/split — multipart/form-data, returns base64 parts
  • Events: split.completed, split.failed
  • 50MB max PDF size enforced at processing + multipart
+ 28 tests
SPLITb — Feature
PDF Merge Operation
eb8fc09
  • src/processing/merge.rs — deep-copy merge using lopdf
  • POST /v1/merge — multiple files, returns merged PDF
  • Events: merge.completed, merge.failed
  • Limits: 50MB/file, 20 files max, 200MB total
+ 17 tests
SPLITc — Feature
PDF Rotate Operation
75cc37f
  • src/processing/rotate.rs — page rotation with additive angles
  • POST /v1/rotate — file + spec JSON, returns rotated PDF
  • Events: rotate.completed, rotate.failed
  • Angles: 90/180/270 with mod 360 wraparound
+ 25 tests
SEC-FIX — Security
JWT Hardening
3ffb20f
  • JWT iss/aud claim validation enforced
  • HS256 production guard (requires explicit opt-in)
  • body_html 512KB / schema 64KB size limits
  • CORS hardened: no origins allowed by default
+ 9 tests
SEC-FIX-2: Security Review Findings (8 items fixed)
Commit: 7d59f13 · +5 tests
  • SEC-01 A03 — DB error messages sanitized. Conflict/Internal return generic messages; full details logged server-side via tracing::warn! / tracing::error!.
  • SEC-02 A05 — RLS INSERT policies now enforce tenant_id = current_setting('app.tenant_id') via migration 006.
  • SEC-03 A10 — Auth failures logged at WARN with peer address, request path, and failure reason.
  • SEC-04 A05 — RBAC enforcement deferred. ADR-001 written (waiting on OID role definitions).
  • SEC-05 Dead dependencies removed: reqwest, validator.
  • SEC-06 Mutex::lock().unwrap() replaced with .expect() with context messages.
  • SEC-07 X-Correlation-Id header propagated from request to CloudEvents via with_correlation_id().
  • SEC-08 64KB size limit enforced on spec multipart field in split/rotate handlers.
Quality Gates
cargo test
179 passed, 0 failed
cargo clippy
0 warnings
cargo fmt
clean
Files Changed (since SPLITa)
File Change + -
src/processing/rotate.rsNew6050
src/processing/merge.rsNew3830
src/api/extractors.rsMod38335
src/api/rotate.rsNew2350
src/api/merge.rsNew1770
src/events/producer.rsMod1578
src/error.rsMod11113
progress.mdNew1080
src/domain/template.rsMod590
tasks/todo.mdMod5911
docs/adr/001-defer-rbac-enforcement.mdNew320
src/main.rsMod325
src/api/split.rsMod270
migrations/006_fix_rls_insert_policies.sqlNew150
19 files +2,323 -72