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 from datetime import datetime
import logging import logging
import base64 import base64
import json
import gzip
from traceback import format_exc from traceback import format_exc
from packetserver.http.dependencies import get_current_http_user 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.http.database import DbDependency
from packetserver.server.jobs import Job, JobStatus from packetserver.server.jobs import Job, JobStatus
from packetserver.http.server import templates 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"]) router = APIRouter(prefix="/api/v1", tags=["jobs"])
dashboard_router = APIRouter(tags=["jobs"]) dashboard_router = APIRouter(tags=["jobs"])
@@ -157,6 +159,7 @@ async def create_job_from_form(
env_keys: List[str] = Form(default=[]), env_keys: List[str] = Form(default=[]),
env_values: List[str] = Form(default=[]), env_values: List[str] = Form(default=[]),
files: List[UploadFile] = File(default=[]), files: List[UploadFile] = File(default=[]),
include_db: Optional[str] = Form(None),
current_user: HttpUser = Depends(get_current_http_user) current_user: HttpUser = Depends(get_current_http_user)
): ):
# Build env dict from parallel lists # Build env dict from parallel lists
@@ -172,6 +175,19 @@ async def create_job_from_form(
content = await upload.read() content = await upload.read()
files_dict[upload.filename] = base64.b64encode(content).decode('ascii') 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 # Prepare payload for the existing API
payload = { payload = {
"cmd": [part.strip() for part in cmd.split() if part.strip()], # split on whitespace, like shell "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 class="form-text">Uploaded files will be available in the container's working directory.</div>
</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> <button type="submit" class="btn btn-primary me-2">Queue Job</button>
<a href="/jobs" class="btn btn-secondary">Cancel</a> <a href="/jobs" class="btn btn-secondary">Cancel</a>
</form> </form>