summary refs log tree commit diff
path: root/synapse/rest/client
diff options
context:
space:
mode:
authorOlivier Wilkinson (reivilibre) <oliverw@matrix.org>2023-09-22 18:59:10 +0100
committerOlivier Wilkinson (reivilibre) <oliverw@matrix.org>2023-09-22 18:59:10 +0100
commitda19c6fcf7d6b8f416f466ac102e2742937baa63 (patch)
tree572b9536c67cf208c9036b53ab668aac80f76ff3 /synapse/rest/client
parentAdd missing license header. (#16359) (diff)
downloadsynapse-da19c6fcf7d6b8f416f466ac102e2742937baa63.tar.xz
Add warnings when /forget isn't given a JSON body
Diffstat (limited to 'synapse/rest/client')
-rw-r--r--synapse/rest/client/room.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/synapse/rest/client/room.py b/synapse/rest/client/room.py
index 553938ce9d..8ca22c7991 100644
--- a/synapse/rest/client/room.py
+++ b/synapse/rest/client/room.py
@@ -47,6 +47,7 @@ from synapse.http.servlet import (
     parse_enum,
     parse_integer,
     parse_json_object_from_request,
+    parse_json_value_from_request,
     parse_string,
     parse_strings_from_args,
 )
@@ -960,6 +961,17 @@ class RoomForgetRestServlet(TransactionRestServlet):
         self, request: SynapseRequest, room_id: str
     ) -> Tuple[int, JsonDict]:
         requester = await self.auth.get_user_by_req(request, allow_guest=False)
+
+        content = parse_json_value_from_request(request, allow_empty_body=True)
+        if content is None:
+            logger.warning(
+                "No JSON body supplied to POST /forget. "
+                "This is not spec-compliant and will not be accepted in a future release!"
+            )
+        elif not isinstance(content, dict):
+            message = "Content must be a JSON object."
+            raise SynapseError(HTTPStatus.BAD_REQUEST, message, errcode=Codes.BAD_JSON)
+
         return await self._do(requester, room_id)
 
     async def on_PUT(
@@ -968,6 +980,16 @@ class RoomForgetRestServlet(TransactionRestServlet):
         requester = await self.auth.get_user_by_req(request, allow_guest=False)
         set_tag("txn_id", txn_id)
 
+        content = parse_json_value_from_request(request, allow_empty_body=True)
+        if content is None:
+            logger.warning(
+                "No JSON body supplied to PUT /forget. "
+                "This is not spec-compliant and will not be accepted in a future release!"
+            )
+        elif not isinstance(content, dict):
+            message = "Content must be a JSON object."
+            raise SynapseError(HTTPStatus.BAD_REQUEST, message, errcode=Codes.BAD_JSON)
+
         return await self.txns.fetch_or_execute_request(
             request, requester, self._do, requester, room_id
         )