Skip to content
Snippets Groups Projects
Commit a3e332af authored by Erik Johnston's avatar Erik Johnston
Browse files

Don't bail out of joining if we encounter a rejected event

parent 46780551
No related branches found
No related tags found
No related merge requests found
...@@ -38,7 +38,7 @@ def check_auth(auth, auth_chain, events): ...@@ -38,7 +38,7 @@ def check_auth(auth, auth_chain, events):
print "Failed:", e.event_id, e.type, e.state_key print "Failed:", e.event_id, e.type, e.state_key
print "Auth_events:", auth_events print "Auth_events:", auth_events
print ex print ex
print json.dumps(e.get_dict(), sort_keys=True, indent=4) # print json.dumps(e.get_dict(), sort_keys=True, indent=4)
# raise # raise
print "Success:", e.event_id, e.type, e.state_key print "Success:", e.event_id, e.type, e.state_key
......
...@@ -649,8 +649,6 @@ class FederationHandler(BaseHandler): ...@@ -649,8 +649,6 @@ class FederationHandler(BaseHandler):
# FIXME # FIXME
pass pass
self._check_auth_tree(auth_chain, event)
event_stream_id, max_stream_id = yield self._persist_auth_tree( event_stream_id, max_stream_id = yield self._persist_auth_tree(
auth_chain, state, event auth_chain, state, event
) )
...@@ -1001,7 +999,16 @@ class FederationHandler(BaseHandler): ...@@ -1001,7 +999,16 @@ class FederationHandler(BaseHandler):
is_new_state=(not outliers and not backfilled), is_new_state=(not outliers and not backfilled),
) )
def _check_auth_tree(self, auth_events, event): @defer.inlineCallbacks
def _persist_auth_tree(self, auth_events, state, event):
events_to_context = {}
for e in auth_events:
ctx = yield self.state_handler.compute_event_context(
e, outlier=True,
)
events_to_context[e.event_id] = ctx
e.internal_metadata.outlier = True
event_map = { event_map = {
e.event_id: e e.event_id: e
for e in auth_events for e in auth_events
...@@ -1021,17 +1028,17 @@ class FederationHandler(BaseHandler): ...@@ -1021,17 +1028,17 @@ class FederationHandler(BaseHandler):
if create_event: if create_event:
a[(EventTypes.Create, "")] = create_event a[(EventTypes.Create, "")] = create_event
self.auth.check(e, auth_events=a) try:
self.auth.check(e, auth_events=a)
except AuthError:
logger.warn(
"Rejecting %s because %s",
event.event_id, e.msg
)
@defer.inlineCallbacks if e == event:
def _persist_auth_tree(self, auth_events, state, event): raise
events_to_context = {} events_to_context[e.event_id].rejected = RejectedReason.AUTH_ERROR
for e in auth_events:
ctx = yield self.state_handler.compute_event_context(
e, outlier=True,
)
events_to_context[e.event_id] = ctx
e.internal_metadata.outlier = True
yield self.store.persist_events( yield self.store.persist_events(
[ [
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment