webapp: scan ppkgs subdir for enrollment packages, not share root

The playbook deploys SFLD provisioning packages to
/srv/samba/enrollment/ppkgs/ but the /enrollment route scanned the
share root. Result: every visit reported "no enrollment packages
found" even though three .ppkg files were present.

Add ENROLLMENT_PPKG_DIR (defaults to {ENROLLMENT_SHARE}/ppkgs,
overridable via env var) and point all four enrollment routes at it
(list, upload, download, delete).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
cproudlock
2026-05-08 18:29:10 -04:00
parent c16a4f23b4
commit 6d1be6b46a
2 changed files with 10 additions and 7 deletions

View File

@@ -410,9 +410,9 @@ def blancco_delete_report(filename):
@app.route("/enrollment") @app.route("/enrollment")
def enrollment(): def enrollment():
packages = [] packages = []
if os.path.isdir(config.ENROLLMENT_SHARE): if os.path.isdir(config.ENROLLMENT_PPKG_DIR):
for f in sorted(os.listdir(config.ENROLLMENT_SHARE)): for f in sorted(os.listdir(config.ENROLLMENT_PPKG_DIR)):
fpath = os.path.join(config.ENROLLMENT_SHARE, f) fpath = os.path.join(config.ENROLLMENT_PPKG_DIR, f)
if os.path.isfile(fpath) and f.lower().endswith(".ppkg"): if os.path.isfile(fpath) and f.lower().endswith(".ppkg"):
stat = os.stat(fpath) stat = os.stat(fpath)
packages.append({ packages.append({
@@ -444,8 +444,8 @@ def enrollment_upload():
flash("Only .ppkg files are accepted.", "danger") flash("Only .ppkg files are accepted.", "danger")
return redirect(url_for("enrollment")) return redirect(url_for("enrollment"))
os.makedirs(config.ENROLLMENT_SHARE, exist_ok=True) os.makedirs(config.ENROLLMENT_PPKG_DIR, exist_ok=True)
dest = os.path.join(config.ENROLLMENT_SHARE, filename) dest = os.path.join(config.ENROLLMENT_PPKG_DIR, filename)
f.save(dest) f.save(dest)
audit("ENROLLMENT_UPLOAD", filename) audit("ENROLLMENT_UPLOAD", filename)
flash(f"Uploaded {filename} successfully.", "success") flash(f"Uploaded {filename} successfully.", "success")
@@ -455,7 +455,7 @@ def enrollment_upload():
@app.route("/enrollment/download/<filename>") @app.route("/enrollment/download/<filename>")
def enrollment_download(filename): def enrollment_download(filename):
filename = secure_filename(filename) filename = secure_filename(filename)
fpath = os.path.join(config.ENROLLMENT_SHARE, filename) fpath = os.path.join(config.ENROLLMENT_PPKG_DIR, filename)
if not os.path.isfile(fpath): if not os.path.isfile(fpath):
flash(f"Package not found: {filename}", "danger") flash(f"Package not found: {filename}", "danger")
return redirect(url_for("enrollment")) return redirect(url_for("enrollment"))
@@ -465,7 +465,7 @@ def enrollment_download(filename):
@app.route("/enrollment/delete/<filename>", methods=["POST"]) @app.route("/enrollment/delete/<filename>", methods=["POST"])
def enrollment_delete(filename): def enrollment_delete(filename):
filename = secure_filename(filename) filename = secure_filename(filename)
fpath = os.path.join(config.ENROLLMENT_SHARE, filename) fpath = os.path.join(config.ENROLLMENT_PPKG_DIR, filename)
if os.path.isfile(fpath): if os.path.isfile(fpath):
os.remove(fpath) os.remove(fpath)
audit("ENROLLMENT_DELETE", filename) audit("ENROLLMENT_DELETE", filename)

View File

@@ -12,6 +12,9 @@ SAMBA_SHARE = os.environ.get("SAMBA_SHARE", "/srv/samba/winpeapps")
CLONEZILLA_SHARE = os.environ.get("CLONEZILLA_SHARE", "/srv/samba/clonezilla") CLONEZILLA_SHARE = os.environ.get("CLONEZILLA_SHARE", "/srv/samba/clonezilla")
BLANCCO_REPORTS = os.environ.get("BLANCCO_REPORTS", "/srv/samba/blancco-reports") BLANCCO_REPORTS = os.environ.get("BLANCCO_REPORTS", "/srv/samba/blancco-reports")
ENROLLMENT_SHARE = os.environ.get("ENROLLMENT_SHARE", "/srv/samba/enrollment") ENROLLMENT_SHARE = os.environ.get("ENROLLMENT_SHARE", "/srv/samba/enrollment")
ENROLLMENT_PPKG_DIR = os.environ.get(
"ENROLLMENT_PPKG_DIR", os.path.join(ENROLLMENT_SHARE, "ppkgs")
)
UPLOAD_DIR = os.environ.get("UPLOAD_DIR", "/home/pxe/image-upload") UPLOAD_DIR = os.environ.get("UPLOAD_DIR", "/home/pxe/image-upload")
SHARED_DIR = os.path.join(SAMBA_SHARE, "_shared") SHARED_DIR = os.path.join(SAMBA_SHARE, "_shared")
WEB_ROOT = os.environ.get("WEB_ROOT", "/var/www/html") WEB_ROOT = os.environ.get("WEB_ROOT", "/var/www/html")