diff --git a/synapse/api/auth.py b/synapse/api/auth.py
index a5c6964707..6c2d3db26e 100644
--- a/synapse/api/auth.py
+++ b/synapse/api/auth.py
@@ -70,6 +70,7 @@ class Auth(object):
logger.debug("Denying! %s", event)
return allowed
+ self.check_event_sender_in_room(event)
self._can_send_event(event)
if event.type == RoomPowerLevelsEvent.TYPE:
@@ -83,8 +84,10 @@ class Auth(object):
else:
raise AuthError(500, "Unknown event: %s" % event)
except AuthError as e:
- logger.info("Event auth check failed on event %s with msg: %s",
- event, e.msg)
+ logger.info(
+ "Event auth check failed on event %s with msg: %s",
+ event, e.msg
+ )
logger.info("Denying! %s", event)
if raises:
raise e
@@ -277,7 +280,7 @@ class Auth(object):
default=[""]
)[0]
if user and access_token and ip_addr:
- self.store.insert_client_ip(
+ yield self.store.insert_client_ip(
user=user,
access_token=access_token,
device_id=user_info["device_id"],
@@ -349,7 +352,8 @@ class Auth(object):
if event.type == RoomMemberEvent.TYPE:
e_type = event.content["membership"]
if e_type in [Membership.JOIN, Membership.INVITE]:
- auth_events.append(join_rule_event.event_id)
+ if join_rule_event:
+ auth_events.append(join_rule_event.event_id)
if member_event and not is_public:
auth_events.append(member_event.event_id)
@@ -405,7 +409,9 @@ class Auth(object):
if user_level < send_level:
raise AuthError(
- 403, "You don't have permission to post that to the room"
+ 403,
+ "You don't have permission to post that to the room. " +
+ "user_level (%d) < send_level (%d)" % (user_level, send_level)
)
return True
diff --git a/synapse/api/events/__init__.py b/synapse/api/events/__init__.py
index f1e53f23ab..1d8bed2906 100644
--- a/synapse/api/events/__init__.py
+++ b/synapse/api/events/__init__.py
@@ -13,7 +13,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from synapse.api.errors import SynapseError, Codes
from synapse.util.jsonobject import JsonEncodedObject
@@ -118,66 +117,6 @@ class SynapseEvent(JsonEncodedObject):
"""
raise NotImplementedError("get_content_template not implemented.")
- def check_json(self, content, raises=True):
- """Checks the given JSON content abides by the rules of the template.
-
- Args:
- content : A JSON object to check.
- raises: True to raise a SynapseError if the check fails.
- Returns:
- True if the content passes the template. Returns False if the check
- fails and raises=False.
- Raises:
- SynapseError if the check fails and raises=True.
- """
- # recursively call to inspect each layer
- err_msg = self._check_json(content, self.get_content_template())
- if err_msg:
- if raises:
- raise SynapseError(400, err_msg, Codes.BAD_JSON)
- else:
- return False
- else:
- return True
-
- def _check_json(self, content, template):
- """Check content and template matches.
-
- If the template is a dict, each key in the dict will be validated with
- the content, else it will just compare the types of content and
- template. This basic type check is required because this function will
- be recursively called and could be called with just strs or ints.
-
- Args:
- content: The content to validate.
- template: The validation template.
- Returns:
- str: An error message if the validation fails, else None.
- """
- if type(content) != type(template):
- return "Mismatched types: %s" % template
-
- if type(template) == dict:
- for key in template:
- if key not in content:
- return "Missing %s key" % key
-
- if type(content[key]) != type(template[key]):
- return "Key %s is of the wrong type (got %s, want %s)" % (
- key, type(content[key]), type(template[key]))
-
- if type(content[key]) == dict:
- # we must go deeper
- msg = self._check_json(content[key], template[key])
- if msg:
- return msg
- elif type(content[key]) == list:
- # make sure each item type in content matches the template
- for entry in content[key]:
- msg = self._check_json(entry, template[key][0])
- if msg:
- return msg
-
class SynapseStateEvent(SynapseEvent):
|