Dependency cleanup (ponytail audit): - Drop 14 unused dependency declarations across 7 crates; quick-xml and x509-parser leave the tree entirely (SAML cert/XML work is handled by bergshamra + roxmltree). Fixes: - introspect: drop the over-broad "microsoft" UTF-16 bulk-scan marker that mislabeled Secure-Boot-signed non-Windows bootables (memtest86, signed BSDs, firmware tools) as Windows — the string lives in their MS-signed EFI loader's FAT long-filename entries. INTROSPECT_REV 3 -> 4 re-probes existing local ISOs on startup so the bogus label clears on upgrade. - upload: begin_upload now reclaims an abandoned <id>.partial instead of rejecting the re-upload with "already uploading". Robust against browser refresh, tab close, and dropped connections (the chunked protocol can't resume a dead session anyway). Features: - Storage upload: multi-file + concurrent. Each dropped/selected .iso gets its own progress row and uploads independently; a single page-leave guard plus a pagehide keepalive-abort replace the old shared singletons. - Operator API key (x-api-key): a persisted key authenticates /api/* exactly like an operator session, for Postman/scripts. New core ApiKeyStore (generated on first run, regenerable), accepted in require_auth alongside the session cookie, surfaced in Settings -> Advanced with copy + regenerate and a usage reference. GET /api/api-key + POST /api/api-key/regenerate. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
70 lines
2.6 KiB
TOML
70 lines
2.6 KiB
TOML
[package]
|
|
name = "openpxe-http-api"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
authors.workspace = true
|
|
# v0.5.0: inherit the workspace repository so CARGO_PKG_REPOSITORY is
|
|
# populated at build time — the About-tab update check derives the
|
|
# Gitea releases API URL from it.
|
|
repository.workspace = true
|
|
description = "HTTP server: ISO uploads, iPXE script generation, ISO streaming"
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[dependencies]
|
|
openpxe-core.workspace = true
|
|
openpxe-iso-store.workspace = true
|
|
openpxe-ipxe-assets.workspace = true
|
|
openpxe-webui.workspace = true
|
|
tokio.workspace = true
|
|
tokio-util.workspace = true
|
|
tokio-stream.workspace = true
|
|
time.workspace = true
|
|
axum.workspace = true
|
|
tower.workspace = true
|
|
tower-http.workspace = true
|
|
serde.workspace = true
|
|
serde_json.workspace = true
|
|
tracing.workspace = true
|
|
anyhow.workspace = true
|
|
bytes.workspace = true
|
|
futures.workspace = true
|
|
uuid.workspace = true
|
|
# v0.4.5 Forms auth: lock-free session store and cookie helpers.
|
|
parking_lot.workspace = true
|
|
# v0.5.0: outbound HTTP for chat webhooks (Slack/Teams/Discord) and the
|
|
# About-tab "check for updates" call to the Gitea releases API; SMTP for
|
|
# email notifications. Both use rustls so the static musl binary stays
|
|
# OpenSSL-free.
|
|
reqwest.workspace = true
|
|
lettre.workspace = true
|
|
# v0.5.1: decode the base64 SAMLResponse at the ACS endpoint.
|
|
base64.workspace = true
|
|
|
|
[dev-dependencies]
|
|
tokio = { workspace = true, features = ["macros", "rt", "rt-multi-thread", "time"] }
|
|
tower = { workspace = true }
|
|
tempfile = "3.12"
|
|
# v0.7.4: probe-based introspection verifies kernel paths against the
|
|
# real ISO9660 tree, so the full-flow tests synthesize images with the
|
|
# shared test builder instead of label-only blobs.
|
|
openpxe-iso-store = { workspace = true, features = ["test-image"] }
|
|
serde_json = { workspace = true }
|
|
time = { workspace = true }
|
|
# v0.4.61: integration tests need to generate real PNG bytes for the
|
|
# `/branding/pxe-logo` compositor; hand-rolled CRCs are too fragile.
|
|
image = { version = "0.25", default-features = false, features = ["png"] }
|
|
# v0.5.1: the SAML ACS integration tests mint a throwaway IdP keypair
|
|
# (rcgen) and sign a SAMLResponse with bergshamra so the happy-path,
|
|
# replay, and IdP-initiated-gating flows exercise real signatures.
|
|
rcgen = "0.13"
|
|
bergshamra = { workspace = true }
|
|
# v0.5.4: snapshot the generated iPXE menu so any unintended drift (a
|
|
# dropped line, reordered item) is caught and reviewed, not silently shipped.
|
|
insta = "1.40"
|
|
# v0.5.4: stand up a mock HTTP server to exercise the SAML metadata-URL
|
|
# fetch path (previously untested because it did a real network GET).
|
|
wiremock = "0.6"
|