Files
bau-pm-pdf-tools/test/Dockerfile
T
magdevandClaude Opus 5.5 47138ddfbe BentoPDF for bau-pm, without third-party hosts (bau-pm BAU-119)
BentoPDF v2.8.8 built from source at its pinned commit with BentoPDF's own
air-gapped build options, every module it would load from a CDN vendored and
checked against vendor.lock, a Content-Security-Policy without a single host,
digital-sign-pdf and timestamp-pdf disabled because both need a third party,
and the hand-off glue on every page: the AGPL source link, the hand-in of a
file from bau-pm through a one-minute cookie into sessionStorage, confirmed by
the tool's reaction, the hand-back of a result from every window, and the
signing tool's flatten switch locked on.

The zero-host gate drives all 117 enabled tool pages in Chromium and fails on
any request to another origin, any CSP violation, a CSP that names a host, and
a disabled id that names no page. Green on this image (3 min 52 s on a private
network), red on the stock upstream image (115 findings) and on a misspelled
id. CI runs it on every push, the release workflow before it pushes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:36:02 +02:00

14 lines
629 B
Docker

# The gate's own image (test/zero-hosts.mjs): Chromium and playwright-core,
# with the test files and the glue baked in, because the CI runner passes the
# host's Docker socket through and a mounted workspace would be empty.
FROM public.ecr.aws/docker/library/node:20-alpine
RUN apk add --no-cache chromium
WORKDIR /gate
RUN npm init -y >/dev/null && npm install --no-audit --no-fund --silent playwright-core@1.63.0
COPY test/ ./test/
COPY glue/ ./glue/
RUN node --check glue/handoff.js
ENV PLAYWRIGHT_CORE=/gate/node_modules/playwright-core/index.mjs \
CHROMIUM=/usr/bin/chromium-browser
CMD ["node", "test/zero-hosts.mjs"]