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]>
57 lines
2.0 KiB
TOML
57 lines
2.0 KiB
TOML
[package]
|
|
name = "openpxe-iso-store"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
authors.workspace = true
|
|
description = "ISO upload, storage, introspection, and boot-entry generation for OpenPXE"
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[dependencies]
|
|
openpxe-core.workspace = true
|
|
tokio = { workspace = true }
|
|
serde.workspace = true
|
|
serde_json.workspace = true
|
|
tracing.workspace = true
|
|
anyhow.workspace = true
|
|
sha2.workspace = true
|
|
hex.workspace = true
|
|
bcrypt.workspace = true
|
|
time.workspace = true
|
|
parking_lot.workspace = true
|
|
bytes.workspace = true
|
|
tempfile = "3.12"
|
|
libc = "0.2"
|
|
# v0.4.61: server-side compose of the operator's uploaded raster into a
|
|
# fixed 1024x768 canvas so the PXE menu always gets a consistently-sized
|
|
# PNG regardless of what the operator uploaded. We use the bare-bones
|
|
# `image` crate (no default features) and explicitly enable only the
|
|
# decoders we accept on upload (PNG/JPEG/WebP/GIF) plus the PNG
|
|
# encoder. Keeps the build slim — no JPEG2000, TIFF, BMP, etc.
|
|
image = { version = "0.25", default-features = false, features = ["png", "jpeg", "webp", "gif"] }
|
|
|
|
# v0.4.67: pure-Rust NFSv3 client for reading remote ISOs without a
|
|
# kernel mount. See crates/iso-store/src/nfs_share.rs for usage.
|
|
nfs3_client = { workspace = true }
|
|
nfs3_types = { workspace = true }
|
|
# v0.5.5: pure-Rust SSH/SFTP client (ring backend) for the SFTP remote
|
|
# share path. See crates/iso-store/src/sftp_share.rs for usage.
|
|
russh = { workspace = true }
|
|
russh-sftp = { workspace = true }
|
|
# Needed for the Stream trait that wraps the mpsc receiver feeding
|
|
# NFS read-loop bytes into axum's Body::from_stream.
|
|
futures = { workspace = true }
|
|
|
|
[dev-dependencies]
|
|
tempfile = "3.12"
|
|
|
|
[features]
|
|
# v0.7.4: exposes the in-memory ISO9660 test-image builder
|
|
# (`iso_fs::testiso`) to other crates' integration tests, so http-api's
|
|
# full-flow tests can synthesize ISOs with real directory trees — the
|
|
# probe-based introspection no longer classifies label-only blobs.
|
|
# Never enabled in production builds.
|
|
test-image = []
|