30 lines
957 B
Python
30 lines
957 B
Python
"""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
|