From 6d1be6b46a1c22115ccb0fa6a7eb5b80a4769b78 Mon Sep 17 00:00:00 2001 From: cproudlock Date: Fri, 8 May 2026 18:29:10 -0400 Subject: [PATCH] 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) --- webapp/app.py | 14 +++++++------- webapp/config.py | 3 +++ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/webapp/app.py b/webapp/app.py index d9f7ea4..6226216 100644 --- a/webapp/app.py +++ b/webapp/app.py @@ -410,9 +410,9 @@ def blancco_delete_report(filename): @app.route("/enrollment") def enrollment(): packages = [] - if os.path.isdir(config.ENROLLMENT_SHARE): - for f in sorted(os.listdir(config.ENROLLMENT_SHARE)): - fpath = os.path.join(config.ENROLLMENT_SHARE, f) + if os.path.isdir(config.ENROLLMENT_PPKG_DIR): + for f in sorted(os.listdir(config.ENROLLMENT_PPKG_DIR)): + fpath = os.path.join(config.ENROLLMENT_PPKG_DIR, f) if os.path.isfile(fpath) and f.lower().endswith(".ppkg"): stat = os.stat(fpath) packages.append({ @@ -444,8 +444,8 @@ def enrollment_upload(): flash("Only .ppkg files are accepted.", "danger") return redirect(url_for("enrollment")) - os.makedirs(config.ENROLLMENT_SHARE, exist_ok=True) - dest = os.path.join(config.ENROLLMENT_SHARE, filename) + os.makedirs(config.ENROLLMENT_PPKG_DIR, exist_ok=True) + dest = os.path.join(config.ENROLLMENT_PPKG_DIR, filename) f.save(dest) audit("ENROLLMENT_UPLOAD", filename) flash(f"Uploaded {filename} successfully.", "success") @@ -455,7 +455,7 @@ def enrollment_upload(): @app.route("/enrollment/download/") def enrollment_download(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): flash(f"Package not found: {filename}", "danger") return redirect(url_for("enrollment")) @@ -465,7 +465,7 @@ def enrollment_download(filename): @app.route("/enrollment/delete/", methods=["POST"]) def enrollment_delete(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): os.remove(fpath) audit("ENROLLMENT_DELETE", filename) diff --git a/webapp/config.py b/webapp/config.py index 249ec61..5081cb2 100644 --- a/webapp/config.py +++ b/webapp/config.py @@ -12,6 +12,9 @@ SAMBA_SHARE = os.environ.get("SAMBA_SHARE", "/srv/samba/winpeapps") CLONEZILLA_SHARE = os.environ.get("CLONEZILLA_SHARE", "/srv/samba/clonezilla") BLANCCO_REPORTS = os.environ.get("BLANCCO_REPORTS", "/srv/samba/blancco-reports") 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") SHARED_DIR = os.path.join(SAMBA_SHARE, "_shared") WEB_ROOT = os.environ.get("WEB_ROOT", "/var/www/html")