From 22ed9c0aa50a0e7b1252000318fe8e5afb63b3d0 Mon Sep 17 00:00:00 2001 From: Michael Woods Date: Sat, 27 Dec 2025 22:51:59 -0500 Subject: [PATCH] Adding db flag for new job form. Not working yet. --- packetserver/http/routers/jobs.py | 18 +++++++++++++++++- packetserver/http/templates/job_new.html | 8 ++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/packetserver/http/routers/jobs.py b/packetserver/http/routers/jobs.py index 2b36ecf..583f3c0 100644 --- a/packetserver/http/routers/jobs.py +++ b/packetserver/http/routers/jobs.py @@ -5,6 +5,8 @@ from pydantic import BaseModel from datetime import datetime import logging import base64 +import json +import gzip from traceback import format_exc from packetserver.http.dependencies import get_current_http_user @@ -12,7 +14,7 @@ from packetserver.http.auth import HttpUser from packetserver.http.database import DbDependency from packetserver.server.jobs import Job, JobStatus from packetserver.http.server import templates -from packetserver.runner import RunnerFile +from packetserver.server.db import get_user_db_json router = APIRouter(prefix="/api/v1", tags=["jobs"]) dashboard_router = APIRouter(tags=["jobs"]) @@ -157,6 +159,7 @@ async def create_job_from_form( env_keys: List[str] = Form(default=[]), env_values: List[str] = Form(default=[]), files: List[UploadFile] = File(default=[]), + include_db: Optional[str] = Form(None), current_user: HttpUser = Depends(get_current_http_user) ): # Build env dict from parallel lists @@ -172,6 +175,19 @@ async def create_job_from_form( content = await upload.read() files_dict[upload.filename] = base64.b64encode(content).decode('ascii') + if include_db == "on": + try: + username_lower = current_user.username.lower() + # get_user_db_json needs the raw ZODB.DB instance + user_db_bytes = get_user_db_json(username_lower,db) + # Base64-encode for payload consistency + b64_db = base64.b64encode(user_db_bytes).decode('ascii') + files_dict["user-db.json.gz"] = b64_db + logging.debug(f"Injected user-db.json.gz for {current_user.username}") + except Exception as e: + logging.error(f"Failed to generate user-db.json.gz: {e}") + raise HTTPException(status_code=500, detail="Failed to include user database") + # Prepare payload for the existing API payload = { "cmd": [part.strip() for part in cmd.split() if part.strip()], # split on whitespace, like shell diff --git a/packetserver/http/templates/job_new.html b/packetserver/http/templates/job_new.html index 78d5cd2..be11bd6 100644 --- a/packetserver/http/templates/job_new.html +++ b/packetserver/http/templates/job_new.html @@ -32,6 +32,14 @@
Uploaded files will be available in the container's working directory.
+
+ + +
+ Cancel