Adding db flag for new job form. Not working yet.

This commit is contained in:
Michael Woods
2025-12-27 22:51:59 -05:00
parent e77b08fd0b
commit 22ed9c0aa5
2 changed files with 25 additions and 1 deletions

View File

@@ -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

View File

@@ -32,6 +32,14 @@
<div class="form-text">Uploaded files will be available in the container's working directory.</div>
</div>
<div class="mb-3 form-check">
<input type="checkbox" class="form-check-input" id="include_db" name="include_db" value="on">
<label class="form-check-label" for="include_db">
Include user database (db flag)
<small class="text-muted d-block">Adds user-db.json.gz with the full user database snapshot to job files</small>
</label>
</div>
<button type="submit" class="btn btn-primary me-2">Queue Job</button>
<a href="/jobs" class="btn btn-secondary">Cancel</a>
</form>