summary refs log tree commit diff
path: root/synapse/handlers/_base.py
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2014-12-03 16:07:21 +0000
committerErik Johnston <erik@matrix.org>2014-12-03 16:07:21 +0000
commit75b4329aaad400abcee4b23e9c88ff845e0d73c7 (patch)
treeb2e947686ad0cf166e9dbcd8a5a3ac50555f862f /synapse/handlers/_base.py
parentMerge branch 'develop' of github.com:matrix-org/synapse into events_refactor (diff)
downloadsynapse-75b4329aaad400abcee4b23e9c88ff845e0d73c7.tar.xz
WIP for new way of managing events.
Diffstat (limited to 'synapse/handlers/_base.py')
-rw-r--r--synapse/handlers/_base.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/synapse/handlers/_base.py b/synapse/handlers/_base.py
index 15adc9dc2c..a45715bf60 100644
--- a/synapse/handlers/_base.py
+++ b/synapse/handlers/_base.py
@@ -21,6 +21,8 @@ from synapse.crypto.event_signing import add_hashes_and_signatures
 from synapse.api.events.room import RoomMemberEvent
 from synapse.api.constants import Membership
 
+from synapse.events.snapshot import EventSnapshot, EventContext
+
 import logging
 
 
@@ -57,6 +59,55 @@ class BaseHandler(object):
             )
 
     @defer.inlineCallbacks
+    def _handle_new_client_event(self, builder):
+        latest_ret = yield self.store.get_latest_events_in_room(
+            builder.room_id,
+        )
+
+        depth = max([d for _, _, d in latest_ret])
+        prev_events = [(e, h) for e, h, _ in latest_ret]
+
+        group, curr_state = yield self.state_handler.resolve_state_groups(
+            [e for e, _ in prev_events]
+        )
+
+        snapshot = EventSnapshot(
+            prev_events=prev_events,
+            depth=depth,
+            current_state=curr_state,
+            current_state_group=group,
+        )
+
+        builder.prev_events = prev_events
+        builder.depth = depth
+
+        auth_events = yield self.auth.get_event_auth(builder, curr_state)
+
+        builder.update_event_key("auth_events", auth_events)
+
+        add_hashes_and_signatures(
+            builder, self.server_name, self.signing_key
+        )
+
+        event = builder.build()
+
+        auth_ids = zip(*auth_events)[0]
+        curr_auth_events = {
+            k: v
+            for k, v in curr_state
+            if v.event_id in auth_ids
+        }
+
+        context = EventContext(
+            current_state=curr_state,
+            auth_events=curr_auth_events,
+        )
+
+        self.auth.check(event, auth_events=context.auth_events)
+
+
+
+    @defer.inlineCallbacks
     def _on_new_room_event(self, event, snapshot, extra_destinations=[],
                            extra_users=[], suppress_auth=False,
                            do_invite_host=None):