Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Merge branch 'develop' of github.com:matrix-org/synapse into erikj/fi…
Browse files Browse the repository at this point in the history
…xup_devices_stream
  • Loading branch information
erikjohnston committed Mar 2, 2020
2 parents e53744c + b29474e commit 65a941d
Show file tree
Hide file tree
Showing 13 changed files with 55 additions and 40 deletions.
7 changes: 1 addition & 6 deletions .buildkite/scripts/test_old_deps.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,7 @@
set -ex

apt-get update
apt-get install -y python3.5 python3.5-dev python3-pip libxml2-dev libxslt-dev zlib1g-dev

# workaround for /~https://github.com/jaraco/zipp/issues/40
python3.5 -m pip install 'setuptools>=34.4.0'

python3.5 -m pip install tox
apt-get install -y python3.5 python3.5-dev python3-pip libxml2-dev libxslt-dev zlib1g-dev tox

export LANG="C.UTF-8"

Expand Down
2 changes: 1 addition & 1 deletion INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -418,7 +418,7 @@ so, you will need to edit `homeserver.yaml`, as follows:
for having Synapse automatically provision and renew federation
certificates through ACME can be found at [ACME.md](docs/ACME.md).
Note that, as pointed out in that document, this feature will not
work with installs set up after November 2020.
work with installs set up after November 2019.

If you are using your own certificate, be sure to use a `.pem` file that
includes the full certificate chain including any intermediate certificates
Expand Down
1 change: 0 additions & 1 deletion changelog.d/6910.bugfix

This file was deleted.

1 change: 1 addition & 0 deletions changelog.d/6995.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add some type annotations to the federation base & client classes.
1 change: 1 addition & 0 deletions changelog.d/7015.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Change date in INSTALL.md#tls-certificates for last date of getting TLS certificates to November 2019.
1 change: 1 addition & 0 deletions changelog.d/7018.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix py35-old CI by using native tox package.
1 change: 1 addition & 0 deletions changelog.d/7019.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Port `synapse.handlers.presence` to async/await.
3 changes: 1 addition & 2 deletions contrib/docker/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,9 @@ services:
restart: unless-stopped
# See the readme for a full documentation of the environment settings
environment:
- SYNAPSE_CONFIG_PATH=/etc/homeserver.yaml
- SYNAPSE_CONFIG_PATH=/data/homeserver.yaml
volumes:
# You may either store all the files in a local folder
- ./matrix-config/homeserver.yaml:/etc/homeserver.yaml
- ./files:/data
# .. or you may split this between different storage points
# - ./files:/data
Expand Down
2 changes: 1 addition & 1 deletion contrib/grafana/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Using the Synapse Grafana dashboard

0. Set up Prometheus and Grafana. Out of scope for this readme. Useful documentation about using Grafana with Prometheus: http://docs.grafana.org/features/datasources/prometheus/
1. Have your Prometheus scrape your Synapse. /~https://github.com/matrix-org/synapse/blob/master/docs/metrics-howto.rst
1. Have your Prometheus scrape your Synapse. /~https://github.com/matrix-org/synapse/blob/master/docs/metrics-howto.md
2. Import dashboard into Grafana. Download `synapse.json`. Import it to Grafana and select the correct Prometheus datasource. http://docs.grafana.org/reference/export_import/
3. Set up additional recording rules
60 changes: 37 additions & 23 deletions synapse/federation/federation_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,13 @@
# limitations under the License.
import logging
from collections import namedtuple
from typing import Iterable, List

import six

from twisted.internet import defer
from twisted.internet.defer import DeferredList
from twisted.internet.defer import Deferred, DeferredList
from twisted.python.failure import Failure

from synapse.api.constants import MAX_DEPTH, EventTypes, Membership
from synapse.api.errors import Codes, SynapseError
Expand All @@ -29,6 +31,7 @@
RoomVersion,
)
from synapse.crypto.event_signing import check_event_content_hash
from synapse.crypto.keyring import Keyring
from synapse.events import EventBase, make_event_from_dict
from synapse.events.utils import prune_event
from synapse.http.servlet import assert_params_in_dict
Expand Down Expand Up @@ -56,7 +59,12 @@ def __init__(self, hs):

@defer.inlineCallbacks
def _check_sigs_and_hash_and_fetch(
self, origin, pdus, room_version, outlier=False, include_none=False
self,
origin: str,
pdus: List[EventBase],
room_version: str,
outlier: bool = False,
include_none: bool = False,
):
"""Takes a list of PDUs and checks the signatures and hashs of each
one. If a PDU fails its signature check then we check if we have it in
Expand All @@ -69,11 +77,11 @@ def _check_sigs_and_hash_and_fetch(
a new list.
Args:
origin (str)
pdu (list)
room_version (str)
outlier (bool): Whether the events are outliers or not
include_none (str): Whether to include None in the returned list
origin
pdu
room_version
outlier: Whether the events are outliers or not
include_none: Whether to include None in the returned list
for events that have failed their checks
Returns:
Expand All @@ -82,7 +90,7 @@ def _check_sigs_and_hash_and_fetch(
deferreds = self._check_sigs_and_hashes(room_version, pdus)

@defer.inlineCallbacks
def handle_check_result(pdu, deferred):
def handle_check_result(pdu: EventBase, deferred: Deferred):
try:
res = yield make_deferred_yieldable(deferred)
except SynapseError:
Expand All @@ -96,8 +104,10 @@ def handle_check_result(pdu, deferred):

if not res and pdu.origin != origin:
try:
# This should not exist in the base implementation, until
# this is fixed, ignore it for typing. See issue #6997.
res = yield defer.ensureDeferred(
self.get_pdu(
self.get_pdu( # type: ignore
destinations=[pdu.origin],
event_id=pdu.event_id,
room_version=room_version,
Expand Down Expand Up @@ -127,21 +137,23 @@ def handle_check_result(pdu, deferred):
else:
return [p for p in valid_pdus if p]

def _check_sigs_and_hash(self, room_version, pdu):
def _check_sigs_and_hash(self, room_version: str, pdu: EventBase) -> Deferred:
return make_deferred_yieldable(
self._check_sigs_and_hashes(room_version, [pdu])[0]
)

def _check_sigs_and_hashes(self, room_version, pdus):
def _check_sigs_and_hashes(
self, room_version: str, pdus: List[EventBase]
) -> List[Deferred]:
"""Checks that each of the received events is correctly signed by the
sending server.
Args:
room_version (str): The room version of the PDUs
pdus (list[FrozenEvent]): the events to be checked
room_version: The room version of the PDUs
pdus: the events to be checked
Returns:
list[Deferred]: for each input event, a deferred which:
For each input event, a deferred which:
* returns the original event if the checks pass
* returns a redacted version of the event (if the signature
matched but the hash did not)
Expand All @@ -152,7 +164,7 @@ def _check_sigs_and_hashes(self, room_version, pdus):

ctx = LoggingContext.current_context()

def callback(_, pdu):
def callback(_, pdu: EventBase):
with PreserveLoggingContext(ctx):
if not check_event_content_hash(pdu):
# let's try to distinguish between failures because the event was
Expand Down Expand Up @@ -189,7 +201,7 @@ def callback(_, pdu):

return pdu

def errback(failure, pdu):
def errback(failure: Failure, pdu: EventBase):
failure.trap(SynapseError)
with PreserveLoggingContext(ctx):
logger.warning(
Expand All @@ -215,16 +227,18 @@ class PduToCheckSig(
pass


def _check_sigs_on_pdus(keyring, room_version, pdus):
def _check_sigs_on_pdus(
keyring: Keyring, room_version: str, pdus: Iterable[EventBase]
) -> List[Deferred]:
"""Check that the given events are correctly signed
Args:
keyring (synapse.crypto.Keyring): keyring object to do the checks
room_version (str): the room version of the PDUs
pdus (Collection[EventBase]): the events to be checked
keyring: keyring object to do the checks
room_version: the room version of the PDUs
pdus: the events to be checked
Returns:
List[Deferred]: a Deferred for each event in pdus, which will either succeed if
A Deferred for each event in pdus, which will either succeed if
the signatures are valid, or fail (with a SynapseError) if not.
"""

Expand Down Expand Up @@ -329,7 +343,7 @@ def event_err(e, pdu_to_check):
return [_flatten_deferred_list(p.deferreds) for p in pdus_to_check]


def _flatten_deferred_list(deferreds):
def _flatten_deferred_list(deferreds: List[Deferred]) -> Deferred:
"""Given a list of deferreds, either return the single deferred,
combine into a DeferredList, or return an already resolved deferred.
"""
Expand All @@ -341,7 +355,7 @@ def _flatten_deferred_list(deferreds):
return defer.succeed(None)


def _is_invite_via_3pid(event):
def _is_invite_via_3pid(event: EventBase) -> bool:
return (
event.type == EventTypes.Member
and event.membership == Membership.INVITE
Expand Down
10 changes: 5 additions & 5 deletions synapse/federation/federation_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ def claim_client_keys(self, destination, content, timeout):

async def backfill(
self, dest: str, room_id: str, limit: int, extremities: Iterable[str]
) -> List[EventBase]:
) -> Optional[List[EventBase]]:
"""Requests some more historic PDUs for the given room from the
given destination server.
Expand All @@ -199,9 +199,9 @@ async def backfill(
"""
logger.debug("backfill extrem=%s", extremities)

# If there are no extremeties then we've (probably) reached the start.
# If there are no extremities then we've (probably) reached the start.
if not extremities:
return
return None

transaction_data = await self.transport_layer.backfill(
dest, room_id, extremities, limit
Expand Down Expand Up @@ -284,7 +284,7 @@ async def get_pdu(
pdu_list = [
event_from_pdu_json(p, room_version, outlier=outlier)
for p in transaction_data["pdus"]
]
] # type: List[EventBase]

if pdu_list and pdu_list[0]:
pdu = pdu_list[0]
Expand Down Expand Up @@ -615,7 +615,7 @@ async def send_request(destination) -> Dict[str, Any]:
]
if auth_chain_create_events != [create_event.event_id]:
raise InvalidResponseError(
"Unexpected create event(s) in auth chain"
"Unexpected create event(s) in auth chain: %s"
% (auth_chain_create_events,)
)

Expand Down
4 changes: 3 additions & 1 deletion synapse/storage/data_stores/main/state_deltas.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@

import logging

from twisted.internet import defer

from synapse.storage._base import SQLBaseStore

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -56,7 +58,7 @@ def get_current_state_deltas(self, prev_stream_id: int, max_stream_id: int):
# if the CSDs haven't changed between prev_stream_id and now, we
# know for certain that they haven't changed between prev_stream_id and
# max_stream_id.
return max_stream_id, []
return defer.succeed((max_stream_id, []))

def get_current_state_deltas_txn(txn):
# First we calculate the max stream id that will give us less than
Expand Down
2 changes: 2 additions & 0 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,8 @@ commands = mypy \
synapse/appservice \
synapse/config \
synapse/events/spamcheck.py \
synapse/federation/federation_base.py \
synapse/federation/federation_client.py \
synapse/federation/sender \
synapse/federation/transport \
synapse/handlers/presence.py \
Expand Down

0 comments on commit 65a941d

Please sign in to comment.