"""Bounded parsing for explicit message-read acknowledgements.""" import json import uuid from django.core.exceptions import ValidationError def message_read_ids(request): if request.content_type == 'application/json': try: payload = json.loads(request.body or b'{}') except (TypeError, ValueError): raise ValidationError('invalid_json') if not isinstance(payload, dict): raise ValidationError('invalid_json') values = payload.get('message_ids', []) else: values = request.POST.getlist('message_ids') if not isinstance(values, list) or len(values) > 100: raise ValidationError('invalid_message_ids') identifiers = set() for value in values: if not isinstance(value, str) or len(value) > 45: continue try: identifiers.add(uuid.UUID(value)) except ValueError: continue return identifiers