diff --git a/raiden/network/transport/matrix/client.py b/raiden/network/transport/matrix/client.py index 183fe48afd5..e36e30f6b73 100644 --- a/raiden/network/transport/matrix/client.py +++ b/raiden/network/transport/matrix/client.py @@ -5,7 +5,7 @@ from functools import wraps from itertools import repeat from typing import Any, Callable, Container, Dict, Iterable, Iterator, List, Optional, Tuple -from urllib.parse import quote, urlparse +from urllib.parse import quote from uuid import UUID, uuid4 import gevent @@ -54,6 +54,7 @@ def __init__(self, client: "GMatrixClient", room_id: str) -> None: super().__init__(client, room_id) self._members: Dict[str, User] = {} self.aliases: List[str] + self.canonical_alias: str def get_joined_members(self, force_resync: bool = False) -> List[User]: """ Return a list of members of this room. """ @@ -81,38 +82,39 @@ def _rmmembers(self, user_id: str) -> None: self._members.pop(user_id, None) def __repr__(self) -> str: - return f"" + return f"" - def update_local_aliases(self) -> bool: - """ Fetch server local aliases for the room. + def update_local_alias(self) -> bool: + """ Fetch the server local canonical alias for the room. This is an optimization over the general `update_aliases()` method which fetches the entire room state (which can be large in Raiden) and then discards all non-alias events. - Unfortunately due to a limitation in the Matrix API it's not possible to query for all - aliases of a room. Only aliases for a specific server can be fetched, see: - https://github.com/matrix-org/synapse/issues/6908 + With MSC2432[1] implemented only ``m.room.canonical_alias`` events exist. + They represent the server local canonical_alias. - Since in Raiden we always have server local aliases set, this method is sufficient for our - use case. + Since in Raiden broadcast rooms always have server a local alias set, this method is + sufficient for our use case. + + [1] https://github.com/matrix-org/matrix-doc/pull/2432 Returns: - boolean: True if the aliases changed, False if not + boolean: True if the canonical_alias changed, False if not """ - server_name = urlparse(self.client.api.base_url).netloc changed = False try: response = self.client.api.get_room_state_type( - self.room_id, "m.room.aliases", server_name + self.room_id, "m.room.canonical_alias", "" ) except MatrixRequestError: return False - if "aliases" in response: - if self.aliases != response["aliases"]: - self.aliases = response["aliases"] - changed = True + server_sent_alias = response.get("alias") + if server_sent_alias is not None and self.canonical_alias != server_sent_alias: + self.canonical_alias = server_sent_alias + changed = True + return changed @@ -235,6 +237,22 @@ def answer(self, room_id: RoomID, answer: Dict[str, str]) -> None: room_id=room_id, text_content=json.dumps(answer), msgtype="m.call.answer" ) + def get_aliases(self, room_id: str) -> Dict[str, Any]: + """ + Perform GET /rooms/{room_id}/aliases. + + Requires Synapse >= 1.11.0 which implements the (as of yet) unstable MSC2432 room alias + semantics change. + """ + return self._send( + "GET", + f"/rooms/{room_id}/aliases", + api_path="/_matrix/client/unstable/org.matrix.msc2432", + ) + + def __repr__(self) -> str: + return f"" + class GMatrixClient(MatrixClient): """ Gevent-compliant MatrixClient subclass """ @@ -535,8 +553,8 @@ def _mkroom(self, room_id: str) -> Room: if room_id not in self.rooms: self.rooms[room_id] = Room(self, room_id) room = self.rooms[room_id] - if not room.aliases: - room.update_local_aliases() + if not room.canonical_alias: + room.update_local_alias() return room def get_user_presence(self, user_id: str) -> Optional[str]: diff --git a/raiden/network/transport/matrix/transport.py b/raiden/network/transport/matrix/transport.py index 75fb2ed9da5..6e01c9d77ab 100644 --- a/raiden/network/transport/matrix/transport.py +++ b/raiden/network/transport/matrix/transport.py @@ -834,7 +834,10 @@ def _initialize_first_sync(self) -> None: self._set_room_id_for_address(partner_address[0], room.room_id) self.log.debug( - "Found room", room=room, aliases=room.aliases, members=room.get_joined_members() + "Found room", + room=room, + canonical_alias=room.canonical_alias, + members=room.get_joined_members(), ) def _leave_unexpected_rooms( @@ -853,7 +856,7 @@ def to_string_representation(partner: Optional[Address]) -> str: self.log.warning( "Leaving Room", reason=reason, - room_aliases=room.aliases, + canonical_alias=room.canonical_alias, room_id=room.room_id, partners=[to_string_representation(partner) for partner in partners], ) @@ -1070,7 +1073,7 @@ def _handle_invite(self, room_id: RoomID, state: dict) -> None: self.log.debug( "Joined from invite", room_id=room_id, - aliases=room.aliases, + canonical_alias=room.canonical_alias, inviting_address=to_checksum_address(peer_address), ) @@ -1081,7 +1084,7 @@ def _handle_invite(self, room_id: RoomID, state: dict) -> None: def _handle_member_join(self, room: Room) -> None: if self._is_broadcast_room(room): raise AssertionError( - f"Broadcast room events should be filtered in syncs: {room.aliases}." + f"Broadcast room events should be filtered in syncs: {room.canonical_alias}." f"Joined Broadcast Rooms: {list(self._broadcast_rooms.keys())}" f"Should be joined to: {self._config.broadcast_rooms}" ) @@ -1142,7 +1145,7 @@ def _handle_text(self, room: Room, message: MatrixMessage) -> List[Message]: if self._is_broadcast_room(room): # This must not happen. Nodes must not listen on broadcast rooms. raise RuntimeError( - f"Received message in broadcast room {room.aliases[0]}. Sending user: {user}" + f"Received message in broadcast room {room.canonical_alias}. Sending user: {user}" ) if not self._address_mgr.is_address_known(peer_address): @@ -1532,10 +1535,9 @@ def create_web_rtc_channel(self, partner_address: Address) -> None: del self._web_rtc_manager.address_to_rtc_partners[partner_address] def _is_broadcast_room(self, room: Room) -> bool: - return any( - suffix in room_alias - for suffix in self._config.broadcast_rooms - for room_alias in room.aliases + has_alias = room.canonical_alias is not None + return has_alias and any( + suffix in room.canonical_alias for suffix in self._config.broadcast_rooms ) def _user_presence_changed(self, user: User, _presence: UserPresence) -> None: diff --git a/raiden/network/transport/matrix/utils.py b/raiden/network/transport/matrix/utils.py index 690b95016c1..6aac348422a 100644 --- a/raiden/network/transport/matrix/utils.py +++ b/raiden/network/transport/matrix/utils.py @@ -648,7 +648,7 @@ def first_login(client: GMatrixClient, signer: Signer, username: str, cap_str: s # Disabling sync because login is done before the transport is fully # initialized, i.e. the inventory rooms don't have the callbacks installed. - client.login(username, password, sync=False) + client.login(username, password, sync=False, device_id="raiden") # Because this is the first login, the display name has to be set, this # prevents the impersonation mentioned above. subsequent calls will reuse diff --git a/raiden/network/transport/utils.py b/raiden/network/transport/utils.py index 84777978df3..fe5548b0810 100644 --- a/raiden/network/transport/utils.py +++ b/raiden/network/transport/utils.py @@ -1,4 +1,4 @@ -from raiden.utils.typing import Iterator +from typing import Iterator def timeout_exponential_backoff(retries: int, timeout: float, maximum: float) -> Iterator[float]: diff --git a/raiden/tests/integration/network/transport/test_matrix_transport_assumptions.py b/raiden/tests/integration/network/transport/test_matrix_transport_assumptions.py index b692ffa1ea6..50b51bdda37 100644 --- a/raiden/tests/integration/network/transport/test_matrix_transport_assumptions.py +++ b/raiden/tests/integration/network/transport/test_matrix_transport_assumptions.py @@ -170,8 +170,8 @@ def test_assumption_user_goes_offline_if_sync_is_not_called_within_35s(local_mat assert len(tracker3.address_presence) == 0, msg_no_sync room: Room = client1.create_room("test", is_public=True) - client2.join_room(room.aliases[0]) - client3.join_room(room.aliases[0]) + client2.join_room(room.canonical_alias) + client3.join_room(room.canonical_alias) client1.blocking_sync(timeout_ms=SHORT_TIMEOUT_MS, latency_ms=SHORT_TIMEOUT_MS) client2.blocking_sync(timeout_ms=SHORT_TIMEOUT_MS, latency_ms=SHORT_TIMEOUT_MS) @@ -224,7 +224,7 @@ def test_assumption_user_is_online_while_sync_is_blocking(local_matrix_servers): client2.add_presence_listener(tracker2.presence_listener) room: Room = client1.create_room("test", is_public=True) - client2.join_room(room.aliases[0]) + client2.join_room(room.canonical_alias) client2.blocking_sync(timeout_ms=SHORT_TIMEOUT_MS, latency_ms=SHORT_TIMEOUT_MS) client1.blocking_sync(timeout_ms=SHORT_TIMEOUT_MS, latency_ms=SHORT_TIMEOUT_MS) @@ -312,7 +312,7 @@ def test_assumption_cannot_override_room_alias(local_matrix_servers): for local_server in local_matrix_servers[1:]: client = new_client(ignore_messages, ignore_member_join, local_server) assert public_room.room_id not in client.rooms - client.join_room(public_room.aliases[0]) + client.join_room(public_room.canonical_alias) assert public_room.room_id in client.rooms alias_on_current_server = f"#{room_alias_prefix}:{local_server.netloc}" diff --git a/raiden/tests/utils/transport.py b/raiden/tests/utils/transport.py index 92e7a87c347..61b1857015f 100644 --- a/raiden/tests/utils/transport.py +++ b/raiden/tests/utils/transport.py @@ -1,3 +1,4 @@ +import json import logging import os import re @@ -6,7 +7,7 @@ from collections import defaultdict from contextlib import ExitStack, contextmanager from datetime import datetime -from itertools import chain +from json.decoder import JSONDecodeError from pathlib import Path from subprocess import DEVNULL, STDOUT from tempfile import mkdtemp @@ -20,7 +21,6 @@ from requests.packages.urllib3.exceptions import InsecureRequestWarning from structlog import get_logger from synapse.handlers.auth import AuthHandler -from twisted.internet import defer from raiden.constants import Environment from raiden.messages.abstract import Message @@ -31,7 +31,8 @@ from raiden.transfer.identifiers import QueueIdentifier from raiden.utils.http import EXECUTOR_IO, HTTPExecutor from raiden.utils.signer import recover -from raiden.utils.typing import Iterable, Port, Signature +from raiden.utils.typing import Iterable, Port +from raiden_contracts.utils.type_aliases import Signature log = get_logger(__name__) @@ -94,22 +95,15 @@ def setup_broadcast_room(servers: List["ParsedURL"], broadcast_room_name: str) - client = new_client(ignore_messages, ignore_member_join, server) # A user must join the room to create the room in the federated server - room = client.join_room(room.aliases[0]) + room = client.join_room(room.canonical_alias) - # Since #5892 `join_room()` only populates server-local aliases but we need all here - room.update_aliases() server_name = server.netloc alias = f"#{broadcast_room_name}:{server_name}" msg = "Setting up the room alias must not fail, otherwise the test can not run." assert room.add_room_alias(alias), msg - room_state = client.api.get_room_state(room.room_id) - all_aliases = chain.from_iterable( - event["content"]["aliases"] - for event in room_state - if event["type"] == "m.room.aliases" - ) + all_aliases = client.api.get_aliases(room.room_id).get("aliases", []) msg = "The new alias must be added, otherwise the Raiden node won't be able to find it." assert alias in all_aliases, msg @@ -145,59 +139,68 @@ def __getattr__(self, item): class AdminUserAuthProvider: __version__ = "0.1" - def __init__(self, config, account_handler): + def __init__(self, config, account_handler) -> None: # type: ignore self.account_handler = account_handler self.log = logging.getLogger(__name__) - self.credentials = config["admin_credentials"] + if "credentials_file" in config: + credentials_file = Path(config["credentials_file"]) + if not credentials_file.exists(): + raise AssertionError(f"Credentials file '{credentials_file}' is missing.") + try: + self.credentials = json.loads(credentials_file.read_text()) + except (JSONDecodeError, UnicodeDecodeError, OSError) as ex: + raise AssertionError( + f"Could not read credentials file '{credentials_file}': {ex}" + ) from ex + elif "admin_credentials" in config: + self.credentials = config["admin_credentials"] + else: + raise AssertionError( + "Either 'credentials_file' or 'admin_credentials' must be specified in " + "auth provider config." + ) msg = "Keys 'username' and 'password' expected in credentials." assert "username" in self.credentials, msg assert "password" in self.credentials, msg - @defer.inlineCallbacks - def check_password(self, user_id: str, password: str): + async def check_password(self, user_id: str, password: str) -> bool: if not password: self.log.error("No password provided, user=%r", user_id) - defer.returnValue(False) + return False username = user_id.partition(":")[0].strip("@") if username == self.credentials["username"] and password == self.credentials["password"]: self.log.info("Logging in well known admin user") - user_exists = yield self.account_handler.check_user_exists(user_id) + user_exists = await self.account_handler.check_user_exists(user_id) if not user_exists: self.log.info("First well known admin user login, registering: user=%r", user_id) - user_id = yield self.account_handler._hs.get_registration_handler().register_user( + await self.account_handler._hs.get_registration_handler().register_user( localpart=username, admin=True ) - _, access_token = yield self.account_handler.register_device(user_id) - yield user_id, access_token - defer.returnValue(True) - - self.log.error("Unknown user '%s', ignoring.", user_id) - defer.returnValue(False) + return True + return False @staticmethod - def parse_config(config): + def parse_config(config: Any) -> Any: return config -# Used from within synapse during tests class EthAuthProvider: __version__ = "0.1" _user_re = re.compile(r"^@(0x[0-9a-f]{40}):(.+)$") _password_re = re.compile(r"^0x[0-9a-f]{130}$") - def __init__(self, config, account_handler): + def __init__(self, config, account_handler) -> None: # type: ignore self.account_handler = account_handler self.config = config self.hs_hostname = self.account_handler._hs.hostname self.log = logging.getLogger(__name__) - @defer.inlineCallbacks - def check_password(self, user_id, password): + async def check_password(self, user_id: str, password: str) -> bool: if not password: self.log.error("no password provided, user=%r", user_id) - defer.returnValue(False) + return False if not self._password_re.match(password): self.log.error( @@ -205,7 +208,7 @@ def check_password(self, user_id, password): "lowercase, 65-bytes hash. user=%r", user_id, ) - defer.returnValue(False) + return False signature = Signature(unhexlify(password[2:])) @@ -216,7 +219,7 @@ def check_password(self, user_id, password): "lowercase address. user=%r", user_id, ) - defer.returnValue(False) + return False user_addr_hex = user_match.group(1) user_addr = unhexlify(user_addr_hex[2:]) @@ -226,19 +229,20 @@ def check_password(self, user_id, password): self.log.error( "invalid account password/signature. user=%r, signer=%r", user_id, rec_addr ) - defer.returnValue(False) + return False localpart = user_id.split(":", 1)[0][1:] self.log.info("eth login! valid signature. user=%r", user_id) - if not (yield self.account_handler.check_user_exists(user_id)): - self.log.info("first user login, registering: user=%r", user_id) - yield self.account_handler.register(localpart=localpart) + if not (await self.account_handler.check_user_exists(user_id)): + self.log.info("First login, creating new user: user=%r", user_id) + registered_user_id = await self.account_handler.register_user(localpart=localpart) + await self.account_handler.register_device(registered_user_id, device_id="raiden") - defer.returnValue(True) + return True @staticmethod - def parse_config(config): + def parse_config(config: Any) -> Any: return config @@ -248,10 +252,11 @@ class NoTLSFederationMonkeyPatchProvider: This is used by the integration tests to avoid the need for tls certificates. It's implemented as an auth provider since that's a handy way to inject code into the - synapse process. + Synapse process. - It works by replacing ``synapse.crypto.context_factory.ClientTLSOptionsFactory`` with an - object that returns ``None`` when instantiated. + It works by replacing ``synapse.crypto.context_factory.FederationPolicyForHTTPS`` with an + object that returns ``None`` when instantiated which causes a non-TLS socket to be used + inside the Synapse federation machinery. """ __version__ = "0.1" @@ -267,7 +272,7 @@ def __init__( # pylint: disable=unused-argument ) -> None: pass - def check_password( # pylint: disable=unused-argument,no-self-use + async def check_password( # pylint: disable=unused-argument,no-self-use self, user_id: str, password: str ) -> bool: return False @@ -276,7 +281,7 @@ def check_password( # pylint: disable=unused-argument,no-self-use def parse_config(config: Dict[str, Any]) -> Dict[str, Any]: from synapse.crypto import context_factory - context_factory.ClientTLSOptionsFactory = NoTLSFederationMonkeyPatchProvider.NoTLSFactory + context_factory.FederationPolicyForHTTPS = NoTLSFederationMonkeyPatchProvider.NoTLSFactory return config diff --git a/requirements/requirements-ci.txt b/requirements/requirements-ci.txt index fc9f0dba729..fd0597b98e7 100644 --- a/requirements/requirements-ci.txt +++ b/requirements/requirements-ci.txt @@ -11,6 +11,7 @@ altgraph==0.16.1 # via macholib, pyinstaller aniso8601==7.0.0 # via -r requirements-dev.txt, flask-restful apipkg==1.5 # via -r requirements-dev.txt, execnet appdirs==1.4.3 # via -r requirements-dev.txt, black +appnope==0.1.0 # via -r requirements-dev.txt, ipython asn1crypto==1.3.0 # via -r requirements-dev.txt, coincurve astroid==2.4.2 # via -r requirements-dev.txt, pylint astunparse==1.6.2 # via -r requirements-dev.txt, sphinxcontrib-httpexample @@ -26,7 +27,7 @@ black==19.10b0 # via -r requirements-dev.txt bleach==3.1.4 # via -r requirements-dev.txt, matrix-synapse, readme-renderer bump2version==1.0.0 # via -r requirements-dev.txt cachetools==4.1.1 # via -r requirements-dev.txt -canonicaljson==1.1.4 # via -r requirements-dev.txt, matrix-synapse, signedjson +canonicaljson==1.4.0 # via -r requirements-dev.txt, matrix-synapse, signedjson certifi==2019.3.9 # via -r requirements-dev.txt, requests cffi==1.12.3 # via -r requirements-dev.txt, aiortc, bcrypt, coincurve, cryptography, pylibsrtp, pynacl chardet==3.0.4 # via -r requirements-dev.txt, requests @@ -39,7 +40,6 @@ coverage==5.3 # via -r requirements-dev.txt crc32c==2.0 # via -r requirements-dev.txt, aiortc cryptography==2.9.2 # via -r requirements-dev.txt, aiortc, pyopenssl, service-identity cytoolz==0.10.1 # via -r requirements-dev.txt, eth-keyfile, eth-utils -daemonize==2.5.0 # via -r requirements-dev.txt, matrix-synapse decorator==4.4.0 # via -r requirements-dev.txt, ipython, networkx, traitlets docutils==0.14 # via -r requirements-dev.txt, readme-renderer, sphinx, sphinxcontrib-httpexample eth-abi==2.1.0 # via -r requirements-dev.txt, eth-account, raiden-contracts, web3 @@ -72,7 +72,7 @@ hyperlink==19.0.0 # via -r requirements-dev.txt, twisted hypothesis==5.35.2 # via -r requirements-dev.txt idna==2.8 # via -r requirements-dev.txt, hyperlink, matrix-synapse, requests, twisted imagesize==1.1.0 # via -r requirements-dev.txt, sphinx -importlib-metadata==1.7.0 # via -r requirements-dev.txt, pluggy +importlib-metadata==1.7.0 # via -r requirements-dev.txt, flake8, flake8-comprehensions, jsonschema, pluggy, pytest incremental==17.5.0 # via -r requirements-dev.txt, treq, twisted iniconfig==1.0.1 # via -r requirements-dev.txt, pytest ipfshttpclient==0.6.0.post1 # via -r requirements-dev.txt, web3 @@ -85,14 +85,14 @@ jinja2==2.10.1 # via -r requirements-dev.txt, flask, matrix-synapse, jsonschema==3.2.0 # via -r requirements-dev.txt, matrix-synapse, web3 lazy-object-proxy==1.4.1 # via -r requirements-dev.txt, astroid lru-dict==1.1.6 # via -r requirements-dev.txt, web3 -macholib==1.14 # via -r requirements-ci.in +macholib==1.14 # via -r requirements-ci.in, pyinstaller markupsafe==1.1.1 # via -r requirements-dev.txt, jinja2 marshmallow-dataclass==6.0.0 # via -r requirements-dev.txt marshmallow-enum==1.5.1 # via -r requirements-dev.txt marshmallow-polyfield==5.9 # via -r requirements-dev.txt marshmallow==3.8.0 # via -r requirements-dev.txt, marshmallow-dataclass, marshmallow-enum, marshmallow-polyfield matrix-client==0.3.2 # via -r requirements-dev.txt -matrix-synapse==1.10.1 # via -r requirements-dev.txt +matrix-synapse==1.19.1 # via -r requirements-dev.txt mccabe==0.6.1 # via -r requirements-dev.txt, flake8, pylint mirakuru==2.1.2 # via -r requirements-dev.txt more-itertools==7.0.0 # via -r requirements-dev.txt, pytest @@ -135,6 +135,7 @@ pygments==2.6.1 # via -r requirements-dev.txt, ipython, pdbpp, readme- pyhamcrest==1.9.0 # via -r requirements-dev.txt, twisted pyinstaller-hooks-contrib==2020.7 # via pyinstaller pyinstaller==4.0 # via -r requirements-ci.in +pylibsrtp==0.6.6 # via -r requirements-dev.txt, aiortc pylint==2.6.0 # via -r requirements-dev.txt pymacaroons==0.13.0 # via -r requirements-dev.txt, matrix-synapse pynacl==1.3.0 # via -r requirements-dev.txt, matrix-synapse, pymacaroons, signedjson @@ -165,7 +166,7 @@ semver==2.8.1 # via -r requirements-dev.txt, raiden-contracts service-identity==18.1.0 # via -r requirements-dev.txt, matrix-synapse, twisted signedjson==1.1 # via -r requirements-dev.txt, matrix-synapse simplejson==3.16.0 # via -r requirements-dev.txt, canonicaljson -six==1.12.0 # via -r requirements-dev.txt, astroid, astunparse, automat, bcrypt, bleach, canonicaljson, cryptography, flake8-tuple, flask-cors, flask-restful, jsonschema, matrix-synapse, multiaddr, packaging, parsimonious, pip-tools, protobuf, pyhamcrest, pymacaroons, pynacl, pyopenssl, pyrsistent, python-dateutil, readme-renderer, responses, sphinxcontrib-httpdomain, structlog, traitlets, treq +six==1.12.0 # via -r requirements-dev.txt, astroid, astunparse, automat, bcrypt, bleach, cryptography, flake8-tuple, flask-cors, flask-restful, jsonschema, multiaddr, packaging, parsimonious, pip-tools, protobuf, pyhamcrest, pymacaroons, pynacl, pyopenssl, pyrsistent, python-dateutil, readme-renderer, responses, sphinxcontrib-httpdomain, structlog, traitlets, treq snowballstemmer==1.2.1 # via -r requirements-dev.txt, sphinx sortedcontainers==2.1.0 # via -r requirements-dev.txt, hypothesis, matrix-synapse sphinx-rtd-theme==0.5.0 # via -r requirements-dev.txt @@ -185,8 +186,8 @@ toolz==0.9.0 # via -r requirements-dev.txt, cytoolz traitlets==4.3.2 # via -r requirements-dev.txt, ipython treq==18.6.0 # via -r requirements-dev.txt, matrix-synapse twisted[tls]==20.3.0 # via -r requirements-dev.txt, matrix-synapse, treq -typed-ast==1.4.0 # via -r requirements-dev.txt, black, mypy -typing-extensions==3.7.4.3 # via -r requirements-dev.txt, matrix-synapse, mypy, signedjson +typed-ast==1.4.0 # via -r requirements-dev.txt, astroid, black, mypy +typing-extensions==3.7.4.3 # via -r requirements-dev.txt, matrix-synapse, mypy, signedjson, web3 typing-inspect==0.4.0 # via -r requirements-dev.txt, marshmallow-dataclass unpaddedbase64==1.1.0 # via -r requirements-dev.txt, matrix-synapse, signedjson urllib3==1.25.3 # via -r requirements-dev.txt, requests diff --git a/requirements/requirements-dev.in b/requirements/requirements-dev.in index 2b3537429c3..f0a4184fe32 100644 --- a/requirements/requirements-dev.in +++ b/requirements/requirements-dev.in @@ -44,4 +44,4 @@ coverage bump2version # Test support -matrix-synapse<1.11 +matrix-synapse==1.19.1 diff --git a/requirements/requirements-dev.txt b/requirements/requirements-dev.txt index fa03c803ad7..05fe1973047 100644 --- a/requirements/requirements-dev.txt +++ b/requirements/requirements-dev.txt @@ -25,7 +25,7 @@ black==19.10b0 # via -r requirements-dev.in bleach==3.1.4 # via matrix-synapse, readme-renderer bump2version==1.0.0 # via -r requirements-dev.in cachetools==4.1.1 # via -r requirements.txt -canonicaljson==1.1.4 # via matrix-synapse, signedjson +canonicaljson==1.4.0 # via matrix-synapse, signedjson certifi==2019.3.9 # via -r requirements-docs.txt, -r requirements.txt, requests cffi==1.12.3 # via -r requirements.txt, aiortc, bcrypt, coincurve, cryptography, pylibsrtp, pynacl chardet==3.0.4 # via -r requirements-docs.txt, -r requirements.txt, requests @@ -38,7 +38,6 @@ coverage==5.3 # via -r requirements-dev.in crc32c==2.0 # via -r requirements.txt, aiortc cryptography==2.9.2 # via -r requirements.txt, aiortc, pyopenssl, service-identity cytoolz==0.10.1 # via -r requirements.txt, eth-keyfile, eth-utils -daemonize==2.5.0 # via matrix-synapse decorator==4.4.0 # via -r requirements.txt, ipython, networkx, traitlets docutils==0.14 # via -r requirements-docs.txt, readme-renderer, sphinx, sphinxcontrib-httpexample eth-abi==2.1.0 # via -r requirements.txt, eth-account, raiden-contracts, web3 @@ -71,7 +70,7 @@ hyperlink==19.0.0 # via twisted hypothesis==5.35.2 # via -r requirements-dev.in idna==2.8 # via -r requirements-docs.txt, -r requirements.txt, hyperlink, matrix-synapse, requests, twisted imagesize==1.1.0 # via -r requirements-docs.txt, sphinx -importlib-metadata==1.7.0 # via pluggy +importlib-metadata==1.7.0 # via -r requirements.txt, flake8, flake8-comprehensions, jsonschema, pluggy, pytest incremental==17.5.0 # via treq, twisted iniconfig==1.0.1 # via pytest ipfshttpclient==0.6.0.post1 # via -r requirements.txt, web3 @@ -90,7 +89,7 @@ marshmallow-enum==1.5.1 # via -r requirements.txt marshmallow-polyfield==5.9 # via -r requirements.txt marshmallow==3.8.0 # via -r requirements.txt, marshmallow-dataclass, marshmallow-enum, marshmallow-polyfield matrix-client==0.3.2 # via -r requirements.txt -matrix-synapse==1.10.1 # via -r requirements-dev.in +matrix-synapse==1.19.1 # via -r requirements-dev.in mccabe==0.6.1 # via flake8, pylint mirakuru==2.1.2 # via -r requirements.txt more-itertools==7.0.0 # via pytest @@ -132,7 +131,7 @@ pyflakes==2.2.0 # via flake8 pygments==2.6.1 # via -r requirements-docs.txt, ipython, pdbpp, readme-renderer, sphinx pyhamcrest==1.9.0 # via twisted pylibsrtp==0.6.6 # via -r requirements.txt, aiortc -pylint==2.6.0 # via -r requirements-dev.in +pylint==2.6.0 # via -r requirements-dev.in pymacaroons==0.13.0 # via matrix-synapse pynacl==1.3.0 # via matrix-synapse, pymacaroons, signedjson pyopenssl==19.0.0 # via matrix-synapse, twisted @@ -159,7 +158,7 @@ semver==2.8.1 # via -r requirements.txt, raiden-contracts service-identity==18.1.0 # via matrix-synapse, twisted signedjson==1.1 # via matrix-synapse simplejson==3.16.0 # via canonicaljson -six==1.12.0 # via -r requirements-docs.txt, -r requirements.txt, astroid, astunparse, automat, bcrypt, bleach, canonicaljson, cryptography, flake8-tuple, flask-cors, flask-restful, jsonschema, matrix-synapse, multiaddr, packaging, parsimonious, pip-tools, protobuf, pyhamcrest, pymacaroons, pynacl, pyopenssl, pyrsistent, readme-renderer, responses, sphinxcontrib-httpdomain, structlog, traitlets, treq +six==1.12.0 # via -r requirements-docs.txt, -r requirements.txt, astroid, astunparse, automat, bcrypt, bleach, cryptography, flake8-tuple, flask-cors, flask-restful, jsonschema, multiaddr, packaging, parsimonious, pip-tools, protobuf, pyhamcrest, pymacaroons, pynacl, pyopenssl, pyrsistent, readme-renderer, responses, sphinxcontrib-httpdomain, structlog, traitlets, treq snowballstemmer==1.2.1 # via -r requirements-docs.txt, sphinx sortedcontainers==2.1.0 # via hypothesis, matrix-synapse sphinx-rtd-theme==0.5.0 # via -r requirements-docs.txt @@ -179,8 +178,8 @@ toolz==0.9.0 # via -r requirements.txt, cytoolz traitlets==4.3.2 # via ipython treq==18.6.0 # via matrix-synapse twisted[tls]==20.3.0 # via matrix-synapse, treq -typed-ast==1.4.0 # via black, mypy -typing-extensions==3.7.4.3 # via -r requirements.txt, matrix-synapse, mypy, signedjson +typed-ast==1.4.0 # via astroid, black, mypy +typing-extensions==3.7.4.3 # via -r requirements.txt, matrix-synapse, mypy, signedjson, web3 typing-inspect==0.4.0 # via -r requirements.txt, marshmallow-dataclass unpaddedbase64==1.1.0 # via matrix-synapse, signedjson urllib3==1.25.3 # via -r requirements-docs.txt, -r requirements.txt, requests @@ -193,7 +192,7 @@ werkzeug==1.0.1 # via -r requirements.txt, flask wheel==0.33.4 # via -r requirements-docs.txt, astunparse wmctrl==0.3 # via pdbpp wrapt==1.11.1 # via astroid -zipp==3.1.0 # via importlib-metadata +zipp==3.1.0 # via -r requirements.txt, importlib-metadata zope.event==4.4 # via -r requirements.txt, gevent zope.interface==5.1.0 # via -r requirements.txt, gevent, twisted diff --git a/requirements/requirements.txt b/requirements/requirements.txt index f8af7618a8a..c586e3f6e81 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -10,7 +10,6 @@ aniso8601==7.0.0 # via flask-restful asn1crypto==1.3.0 # via coincurve attrs==19.3.0 # via jsonschema av==8.0.2 # via aiortc -backcall==0.1.0 # via ipython base58==2.0.0 # via multiaddr bitarray==1.2.1 # via eth-account cachetools==4.1.1 # via -r requirements.in @@ -42,6 +41,7 @@ greenlet==0.4.16 # via gevent guppy3==3.0.10.post1 # via -r requirements.in hexbytes==0.2.0 # via eth-account, eth-rlp, web3 idna==2.8 # via requests +importlib-metadata==1.7.0 # via jsonschema ipfshttpclient==0.6.0.post1 # via web3 itsdangerous==1.1.0 # via flask jinja2==2.10.1 # via flask @@ -68,7 +68,6 @@ py-solc==3.2.0 # via raiden-contracts pycparser==2.19 # via cffi pycryptodome==3.8.2 # via eth-hash, eth-keyfile pyee==7.0.2 # via aiortc -pygments==2.6.1 # via ipython pylibsrtp==0.6.6 # via aiortc pyrsistent==0.15.7 # via jsonschema pysha3==1.0.2 # via -r requirements.in @@ -79,17 +78,18 @@ requests==2.24.0 # via -r requirements.in, ipfshttpclient, matrix-clien rlp==1.1.0 # via eth-account, eth-rlp, raiden-contracts semantic-version==2.6.0 # via py-solc semver==2.8.1 # via raiden-contracts -six==1.12.0 # via flask-cors, flask-restful, jsonschema, multiaddr, parsimonious, protobuf, pyrsistent, structlog +six==1.12.0 # via cryptography, flask-cors, flask-restful, jsonschema, multiaddr, parsimonious, protobuf, pyrsistent, structlog structlog==20.1.0 # via -r requirements.in toml==0.10.1 # via -r requirements.in toolz==0.9.0 # via cytoolz -typing-extensions==3.7.4.3 # via -r requirements.in +typing-extensions==3.7.4.3 # via -r requirements.in, web3 typing-inspect==0.4.0 # via marshmallow-dataclass urllib3==1.25.3 # via requests varint==1.0.2 # via multiaddr web3==5.12.1 # via -r requirements.in, raiden-contracts websockets==8.1 # via web3 werkzeug==1.0.1 # via flask +zipp==3.1.0 # via importlib-metadata zope.event==4.4 # via gevent zope.interface==5.1.0 # via gevent