This commit is contained in:
Michael Woods
2025-02-19 15:24:23 -05:00
parent e540e1ebb4
commit 0abf0cc7f0
2 changed files with 24 additions and 7 deletions

View File

@@ -3,25 +3,37 @@ import json
import gzip
import base64
from io import BytesIO
from uuid import UUID
def get_user_db(username: str, db: ZODB.DB) -> dict:
udb = {
"objects": {},
"objects": [],
"messages": [],
"user": {},
"bulletins": [],
"jobs": []
}
username = username.strip().upper()
with db.transaction() as db_conn:
with (db.transaction() as db_conn):
user = db_conn.root.users[username]
udb['user'] = user.to_safe_dict()
for o in user.object_uuids:
if type(o.data) is bytes:
o.data = base64.b64encode(o.data).decode()
obj = {}
tmp = db_conn.root.objects[o].to_dict()
obj['name'] = tmp['name']
obj['private'] = tmp['private']
obj['uuid'] = str(UUID(bytes=tmp['uuid_bytes']))
obj['created_at'] = tmp['created_at']
obj['modified_at'] = tmp['modified_at']
if type(tmp['data']) is bytes:
obj['data'] = base64.b64encode(tmp['data']).decode()
else:
o.data = base64.b64encode(o.data.encode()).decode()
udb['objects'][o] = db_conn.root.objects[o].to_dict()
obj['data'] = str(tmp['data'])
udb['objects'].append(obj)
if user in db_conn.root.messages:
for m in db_conn.root.messages[username]:
for a in m.attachments:

View File

@@ -298,7 +298,12 @@ def handle_new_job_post(req: Request, conn: PacketServerConnection, db: ZODB.DB)
files = []
if 'db' in req.payload:
logging.debug(f"Fetching a user db as requested.")
try:
dbf = RunnerFile('user-db.json.gz', data=get_user_db_json(username.lower(), db))
except:
logging.error(format_exc())
send_blank_response(conn, req, 500)
return
files.append(dbf)
if 'files' in req.payload:
if type(files) is dict: