diff --git a/synapse/api/auth.py b/synapse/api/auth.py
index 2b0475543d..cd0deeb0e6 100644
--- a/synapse/api/auth.py
+++ b/synapse/api/auth.py
@@ -24,7 +24,7 @@ from synapse.api.events.room import (
RoomJoinRulesEvent, RoomCreateEvent, RoomAliasesEvent,
)
from synapse.util.logutils import log_function
-from syutil.base64util import encode_base64
+from synapse.util.async import run_on_reactor
import logging
@@ -351,29 +351,31 @@ class Auth(object):
return self.store.is_server_admin(user)
@defer.inlineCallbacks
- def add_auth_events(self, event):
- if event.type == RoomCreateEvent.TYPE:
- event.auth_events = []
+ def add_auth_events(self, builder, context):
+ yield run_on_reactor()
+
+ if builder.type == RoomCreateEvent.TYPE:
+ builder.auth_events = []
return
- auth_events = []
+ auth_ids = []
key = (RoomPowerLevelsEvent.TYPE, "", )
- power_level_event = event.old_state_events.get(key)
+ power_level_event = context.current_state.get(key)
if power_level_event:
- auth_events.append(power_level_event.event_id)
+ auth_ids.append(power_level_event.event_id)
key = (RoomJoinRulesEvent.TYPE, "", )
- join_rule_event = event.old_state_events.get(key)
+ join_rule_event = context.current_state.get(key)
- key = (RoomMemberEvent.TYPE, event.user_id, )
- member_event = event.old_state_events.get(key)
+ key = (RoomMemberEvent.TYPE, builder.user_id, )
+ member_event = context.current_state.get(key)
key = (RoomCreateEvent.TYPE, "", )
- create_event = event.old_state_events.get(key)
+ create_event = context.current_state.get(key)
if create_event:
- auth_events.append(create_event.event_id)
+ auth_ids.append(create_event.event_id)
if join_rule_event:
join_rule = join_rule_event.content.get("join_rule")
@@ -381,29 +383,29 @@ class Auth(object):
else:
is_public = False
- if event.type == RoomMemberEvent.TYPE:
- e_type = event.content["membership"]
+ if builder.type == RoomMemberEvent.TYPE:
+ e_type = builder.content["membership"]
if e_type in [Membership.JOIN, Membership.INVITE]:
if join_rule_event:
- auth_events.append(join_rule_event.event_id)
+ auth_ids.append(join_rule_event.event_id)
if member_event and not is_public:
- auth_events.append(member_event.event_id)
+ auth_ids.append(member_event.event_id)
elif member_event:
if member_event.content["membership"] == Membership.JOIN:
- auth_events.append(member_event.event_id)
+ auth_ids.append(member_event.event_id)
- hashes = yield self.store.get_event_reference_hashes(
- auth_events
+ auth_events_entries = yield self.store.add_event_hashes(
+ auth_ids
)
- hashes = [
- {
- k: encode_base64(v) for k, v in h.items()
- if k == "sha256"
- }
- for h in hashes
- ]
- event.auth_events = zip(auth_events, hashes)
+
+ builder.auth_events = auth_events_entries
+
+ context.auth_events = {
+ k: v
+ for k, v in context.current_state.items()
+ if v.event_id in auth_ids
+ }
@log_function
def _can_send_event(self, event, auth_events):
diff --git a/synapse/api/constants.py b/synapse/api/constants.py
index 3cafff0e32..7e8c892b64 100644
--- a/synapse/api/constants.py
+++ b/synapse/api/constants.py
@@ -59,3 +59,12 @@ class LoginType(object):
EMAIL_URL = u"m.login.email.url"
EMAIL_IDENTITY = u"m.login.email.identity"
RECAPTCHA = u"m.login.recaptcha"
+
+
+class EventTypes(object):
+ Member = "m.room.member"
+ Create = "m.room.create"
+ JoinRules = "m.room.join_rules"
+ PowerLevels = "m.room.power_levels"
+ Aliases = "m.room.aliases"
+ Redaction = "m.room.redaction"
diff --git a/synapse/api/events/factory.py b/synapse/api/events/factory.py
index a1ec708a81..1b84e2b445 100644
--- a/synapse/api/events/factory.py
+++ b/synapse/api/events/factory.py
@@ -58,7 +58,7 @@ class EventFactory(object):
local_part = str(int(self.clock.time())) + i + random_string(5)
- e_id = EventID.create_local(local_part, self.hs)
+ e_id = EventID.create(local_part, self.hs.hostname)
return e_id.to_string()
|