mirror of
https://github.com/element-hq/synapse.git
synced 2024-11-26 19:47:05 +03:00
Move sig check out of _handle_new_pdu
When we receive PDUs via `get_missing_events`, we have already checked their sigs, so there is no need to do it again.
This commit is contained in:
parent
3406333a58
commit
e8b1721290
1 changed files with 36 additions and 12 deletions
|
@ -165,7 +165,7 @@ class FederationServer(FederationBase):
|
||||||
)
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
yield self._handle_new_pdu(transaction.origin, pdu)
|
yield self._handle_received_pdu(transaction.origin, pdu)
|
||||||
results.append({})
|
results.append({})
|
||||||
except FederationError as e:
|
except FederationError as e:
|
||||||
self.send_failure(e, transaction.origin)
|
self.send_failure(e, transaction.origin)
|
||||||
|
@ -496,9 +496,44 @@ class FederationServer(FederationBase):
|
||||||
destination=None,
|
destination=None,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
|
def _handle_received_pdu(self, origin, pdu):
|
||||||
|
""" Process a PDU received in a federation /send/ transaction.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
origin (str): server which sent the pdu
|
||||||
|
pdu (FrozenEvent): received pdu
|
||||||
|
|
||||||
|
Returns (Deferred): completes with None
|
||||||
|
Raises: FederationError if the signatures / hash do not match
|
||||||
|
"""
|
||||||
|
# Check signature.
|
||||||
|
try:
|
||||||
|
pdu = yield self._check_sigs_and_hash(pdu)
|
||||||
|
except SynapseError as e:
|
||||||
|
raise FederationError(
|
||||||
|
"ERROR",
|
||||||
|
e.code,
|
||||||
|
e.msg,
|
||||||
|
affected=pdu.event_id,
|
||||||
|
)
|
||||||
|
|
||||||
|
yield self._handle_new_pdu(origin, pdu, get_missing=True)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
@log_function
|
@log_function
|
||||||
def _handle_new_pdu(self, origin, pdu, get_missing=True):
|
def _handle_new_pdu(self, origin, pdu, get_missing=True):
|
||||||
|
""" Process a PDU received via a federation /send/ transaction, or
|
||||||
|
via backfill of missing prev_events
|
||||||
|
|
||||||
|
Args:
|
||||||
|
origin (str): server which initiated the /send/ transaction. Will
|
||||||
|
be used to fetch missing events or state.
|
||||||
|
pdu (FrozenEvent): received PDU
|
||||||
|
get_missing (bool): True if we should fetch missing prev_events
|
||||||
|
|
||||||
|
Returns (Deferred): completes with None
|
||||||
|
"""
|
||||||
|
|
||||||
# We reprocess pdus when we have seen them only as outliers
|
# We reprocess pdus when we have seen them only as outliers
|
||||||
existing = yield self._get_persisted_pdu(
|
existing = yield self._get_persisted_pdu(
|
||||||
|
@ -518,17 +553,6 @@ class FederationServer(FederationBase):
|
||||||
logger.debug("Already seen pdu %s", pdu.event_id)
|
logger.debug("Already seen pdu %s", pdu.event_id)
|
||||||
return
|
return
|
||||||
|
|
||||||
# Check signature.
|
|
||||||
try:
|
|
||||||
pdu = yield self._check_sigs_and_hash(pdu)
|
|
||||||
except SynapseError as e:
|
|
||||||
raise FederationError(
|
|
||||||
"ERROR",
|
|
||||||
e.code,
|
|
||||||
e.msg,
|
|
||||||
affected=pdu.event_id,
|
|
||||||
)
|
|
||||||
|
|
||||||
state = None
|
state = None
|
||||||
|
|
||||||
auth_chain = []
|
auth_chain = []
|
||||||
|
|
Loading…
Reference in a new issue