summary refs log tree commit diff
path: root/synapse
diff options
context:
space:
mode:
authorMark Haines <mark.haines@matrix.org>2016-03-14 14:16:41 +0000
committerMark Haines <mark.haines@matrix.org>2016-03-14 14:16:41 +0000
commit398cd1edfbefa207e44047bd63adcdcc6e859f2e (patch)
treeba196ebb4f83dd936661e96b0bcf8f8c5fe8209a /synapse
parentMerge pull request #642 from matrix-org/erikj/logout (diff)
downloadsynapse-398cd1edfbefa207e44047bd63adcdcc6e859f2e.tar.xz
Fix regression where synapse checked whether push rules were valid JSON before the compatibility hack that handled clients sending invalid JSON
Diffstat (limited to 'synapse')
-rw-r--r--synapse/http/servlet.py21
-rw-r--r--synapse/rest/client/v1/push_rule.py4
2 files changed, 19 insertions, 6 deletions
diff --git a/synapse/http/servlet.py b/synapse/http/servlet.py
index 1996f8b136..1c8bd8666f 100644
--- a/synapse/http/servlet.py
+++ b/synapse/http/servlet.py
@@ -119,13 +119,13 @@ def parse_string(request, name, default=None, required=False,
             return default
 
 
-def parse_json_object_from_request(request):
-    """Parse a JSON object from the body of a twisted HTTP request.
+def parse_json_value_from_request(request):
+    """Parse a JSON value from the body of a twisted HTTP request.
 
     :param request: the twisted HTTP request.
+    :returns: The JSON value.
     :raises
-        SynapseError if the request body couldn't be decoded as JSON or
-            if it wasn't a JSON object.
+        SynapseError if the request body couldn't be decoded as JSON.
     """
     try:
         content_bytes = request.content.read()
@@ -137,6 +137,19 @@ def parse_json_object_from_request(request):
     except simplejson.JSONDecodeError:
         raise SynapseError(400, "Content not JSON.", errcode=Codes.NOT_JSON)
 
+    return content
+
+
+def parse_json_object_from_request(request):
+    """Parse a JSON object from the body of a twisted HTTP request.
+
+    :param request: the twisted HTTP request.
+    :raises
+        SynapseError if the request body couldn't be decoded as JSON or
+            if it wasn't a JSON object.
+    """
+    content = parse_json_value_from_request(request)
+
     if type(content) != dict:
         message = "Content must be a JSON object."
         raise SynapseError(400, message, errcode=Codes.BAD_JSON)
diff --git a/synapse/rest/client/v1/push_rule.py b/synapse/rest/client/v1/push_rule.py
index b5695d427a..02d837ee6a 100644
--- a/synapse/rest/client/v1/push_rule.py
+++ b/synapse/rest/client/v1/push_rule.py
@@ -25,7 +25,7 @@ from synapse.storage.push_rule import (
 from synapse.push.clientformat import format_push_rules_for_user
 from synapse.push.baserules import BASE_RULE_IDS
 from synapse.push.rulekinds import PRIORITY_CLASS_MAP
-from synapse.http.servlet import parse_json_object_from_request
+from synapse.http.servlet import parse_json_value_from_request
 
 
 class PushRuleRestServlet(ClientV1RestServlet):
@@ -51,7 +51,7 @@ class PushRuleRestServlet(ClientV1RestServlet):
         if '/' in spec['rule_id'] or '\\' in spec['rule_id']:
             raise SynapseError(400, "rule_id may not contain slashes")
 
-        content = parse_json_object_from_request(request)
+        content = parse_json_value_from_request(request)
 
         user_id = requester.user.to_string()