Ease-of-use pass inspired by Bootimus (Dnsmasq-PXE is a manual dnsmasq
setup guide — nothing to adopt; OpenPXE already replaces that stack).
Add ISO by URL:
- New http-api `fetch` module: a small FetchJobs registry + a background
streaming download (reqwest) that pipes a remote .iso through the same
UploadHandle + introspection path as an upload, so a URL-fetched image
classifies and gains boot entries identically. Progress is polled by the
Storage view and rendered as rows, mirroring uploads.
- Routes POST/GET/DELETE /api/isos/fetch. http/https only; .iso-only
filename derived from Content-Disposition / URL basename with path
traversal stripped; 16 GiB cap; cancel; credential-stripped URL display.
Operator-gated, no boot-time outbound — offline boot is untouched.
- Storage upload card gains an "Or add by URL" field with progress + cancel.
Zero-touch admin bootstrap:
- OPENPXE_ADMIN_USERNAME + OPENPXE_ADMIN_PASSWORD (or _PASSWORD_FILE for
Docker/K8s secrets) auto-create the admin on first run, so a fresh
container is usable with no setup wizard. Seeds the first run only — a
lingering env var can't reset a rotated password.
Tests: URL parse / filename / Content-Disposition unit tests + a wiremock
end-to-end fetch-into-store integration test. clippy/fmt/node clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>