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 gzip
import base64 import base64
from io import BytesIO from io import BytesIO
from uuid import UUID
def get_user_db(username: str, db: ZODB.DB) -> dict: def get_user_db(username: str, db: ZODB.DB) -> dict:
udb = { udb = {
"objects": {}, "objects": [],
"messages": [], "messages": [],
"user": {}, "user": {},
"bulletins": [], "bulletins": [],
"jobs": [] "jobs": []
} }
username = username.strip().upper() username = username.strip().upper()
with db.transaction() as db_conn: with (db.transaction() as db_conn):
user = db_conn.root.users[username] user = db_conn.root.users[username]
udb['user'] = user.to_safe_dict() udb['user'] = user.to_safe_dict()
for o in user.object_uuids: for o in user.object_uuids:
if type(o.data) is bytes: obj = {}
o.data = base64.b64encode(o.data).decode() 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: else:
o.data = base64.b64encode(o.data.encode()).decode() obj['data'] = str(tmp['data'])
udb['objects'][o] = db_conn.root.objects[o].to_dict()
udb['objects'].append(obj)
if user in db_conn.root.messages: if user in db_conn.root.messages:
for m in db_conn.root.messages[username]: for m in db_conn.root.messages[username]:
for a in m.attachments: for a in m.attachments:

View File

@@ -298,7 +298,12 @@ def handle_new_job_post(req: Request, conn: PacketServerConnection, db: ZODB.DB)
files = [] files = []
if 'db' in req.payload: if 'db' in req.payload:
logging.debug(f"Fetching a user db as requested.") logging.debug(f"Fetching a user db as requested.")
dbf = RunnerFile('user-db.json.gz', data=get_user_db_json(username.lower(), db)) 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) files.append(dbf)
if 'files' in req.payload: if 'files' in req.payload:
if type(files) is dict: if type(files) is dict: