semblance-dev/backend/app/utils/__init__.py

35 lines
No EOL
1 KiB
Python
Executable file

# Utils package for Synthetic Society backend
from functools import wraps
from datetime import datetime
from bson import ObjectId
from quart import jsonify
from app.auth.quart_jwt import get_jwt_identity
from app.models.user import User
def make_serializable(obj):
"""Recursively convert MongoDB documents to JSON-serializable types."""
if isinstance(obj, dict):
return {k: make_serializable(v) for k, v in obj.items()}
elif isinstance(obj, list):
return [make_serializable(item) for item in obj]
elif isinstance(obj, ObjectId):
return str(obj)
elif isinstance(obj, datetime):
return obj.isoformat()
else:
return obj
def admin_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
user_id = get_jwt_identity()
user_data = User.find_by_id(user_id)
if not user_data or user_data.get('role') != 'admin':
return jsonify({"message": "Admin privileges required"}), 403
return f(*args, **kwargs)
return decorated_function