diff --git a/src/packetserver/server/db.py b/src/packetserver/server/db.py index 11b6f65..fe3b0ea 100644 --- a/src/packetserver/server/db.py +++ b/src/packetserver/server/db.py @@ -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: diff --git a/src/packetserver/server/jobs.py b/src/packetserver/server/jobs.py index 2c75a01..0cdf6f6 100644 --- a/src/packetserver/server/jobs.py +++ b/src/packetserver/server/jobs.py @@ -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.") - 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) if 'files' in req.payload: if type(files) is dict: