@@ -40,6 +40,10 @@ def __init__(self, hs: "HomeServer"):
4040 self .read_marker_handler = hs .get_read_marker_handler ()
4141 self .presence_handler = hs .get_presence_handler ()
4242
43+ self ._known_receipt_types = {ReceiptTypes .READ , ReceiptTypes .FULLY_READ }
44+ if hs .config .experimental .msc2285_enabled :
45+ self ._known_receipt_types .add (ReceiptTypes .READ_PRIVATE )
46+
4347 async def on_POST (
4448 self , request : SynapseRequest , room_id : str
4549 ) -> Tuple [int , JsonDict ]:
@@ -49,13 +53,7 @@ async def on_POST(
4953
5054 body = parse_json_object_from_request (request )
5155
52- valid_receipt_types = {
53- ReceiptTypes .READ ,
54- ReceiptTypes .FULLY_READ ,
55- ReceiptTypes .READ_PRIVATE ,
56- }
57-
58- unrecognized_types = set (body .keys ()) - valid_receipt_types
56+ unrecognized_types = set (body .keys ()) - self ._known_receipt_types
5957 if unrecognized_types :
6058 # It's fine if there are unrecognized receipt types, but let's log
6159 # it to help debug clients that have typoed the receipt type.
@@ -65,31 +63,25 @@ async def on_POST(
6563 # types.
6664 logger .info ("Ignoring unrecognized receipt types: %s" , unrecognized_types )
6765
68- read_event_id = body .get (ReceiptTypes .READ , None )
69- if read_event_id :
70- await self .receipts_handler .received_client_receipt (
71- room_id ,
72- ReceiptTypes .READ ,
73- user_id = requester .user .to_string (),
74- event_id = read_event_id ,
75- )
76-
77- read_private_event_id = body .get (ReceiptTypes .READ_PRIVATE , None )
78- if read_private_event_id and self .config .experimental .msc2285_enabled :
79- await self .receipts_handler .received_client_receipt (
80- room_id ,
81- ReceiptTypes .READ_PRIVATE ,
82- user_id = requester .user .to_string (),
83- event_id = read_private_event_id ,
84- )
85-
86- read_marker_event_id = body .get (ReceiptTypes .FULLY_READ , None )
87- if read_marker_event_id :
88- await self .read_marker_handler .received_client_read_marker (
89- room_id ,
90- user_id = requester .user .to_string (),
91- event_id = read_marker_event_id ,
92- )
66+ for receipt_type in self ._known_receipt_types :
67+ event_id = body .get (receipt_type , None )
68+ # TODO Add validation to reject non-string event IDs.
69+ if not event_id :
70+ continue
71+
72+ if receipt_type == ReceiptTypes .FULLY_READ :
73+ await self .read_marker_handler .received_client_read_marker (
74+ room_id ,
75+ user_id = requester .user .to_string (),
76+ event_id = event_id ,
77+ )
78+ else :
79+ await self .receipts_handler .received_client_receipt (
80+ room_id ,
81+ receipt_type ,
82+ user_id = requester .user .to_string (),
83+ event_id = event_id ,
84+ )
9385
9486 return 200 , {}
9587
0 commit comments