Example #1
0
def _setup_matrix(config):
    if config['transport']['matrix'].get('available_servers') is None:
        # fetch list of known servers from raiden-network/raiden-tranport repo
        available_servers_url = DEFAULT_MATRIX_KNOWN_SERVERS[config['environment_type']]
        available_servers = get_matrix_servers(available_servers_url)
        log.debug('Fetching available matrix servers', available_servers=available_servers)
        config['transport']['matrix']['available_servers'] = available_servers

    try:
        transport = MatrixTransport(config['transport']['matrix'])
    except RaidenError as ex:
        click.secho(f'FATAL: {ex}', fg='red')
        sys.exit(1)

    return transport
Example #2
0
    def __init__(
        self,
        private_key: str,
        chain_id: ChainID,
        service_room_suffix: str,
        message_received_callback: Callable[[Message], None],
        address_reachability_changed_callback: Callable[
            [Address, AddressReachability], None] = None,
        servers: List[str] = None,
    ) -> None:
        super().__init__()

        self.private_key = private_key
        self.chain_id = chain_id
        self.service_room_suffix = service_room_suffix
        self.message_received_callback = message_received_callback

        if servers:
            self.available_servers = servers
        else:
            self.available_servers = get_matrix_servers(
                DEFAULT_MATRIX_KNOWN_SERVERS[Environment.
                                             PRODUCTION] if chain_id ==
                1 else DEFAULT_MATRIX_KNOWN_SERVERS[Environment.DEVELOPMENT])

        self.client = make_client(
            servers=self.available_servers,
            http_pool_maxsize=4,
            http_retry_timeout=40,
            http_retry_delay=matrix_http_retry_delay,
        )
        self.broadcast_rooms: List[Room] = []
        self._displayname_cache = DisplayNameCache()
        self._user_manager: Optional[UserAddressManager] = None

        if address_reachability_changed_callback is not None:
            self._user_manager = UserAddressManager(
                client=self.client,
                displayname_cache=self._displayname_cache,
                address_reachability_changed_callback=
                address_reachability_changed_callback,
            )

        self.startup_finished = Event()
        self.rate_limiter = RateLimiter(
            allowed_bytes=MATRIX_RATE_LIMIT_ALLOWED_BYTES,
            reset_interval=MATRIX_RATE_LIMIT_RESET_INTERVAL,
        )
Example #3
0
def _setup_matrix(config):
    if config['transport']['matrix'].get('available_servers') is None:
        # fetch list of known servers from raiden-network/raiden-tranport repo
        available_servers_url = DEFAULT_MATRIX_KNOWN_SERVERS[
            config['environment_type']]
        available_servers = get_matrix_servers(available_servers_url)
        log.debug('Fetching available matrix servers',
                  available_servers=available_servers)
        config['transport']['matrix']['available_servers'] = available_servers

    try:
        transport = MatrixTransport(config['transport']['matrix'])
    except RaidenError as ex:
        click.secho(f'FATAL: {ex}', fg='red')
        sys.exit(1)

    return transport
Example #4
0
File: app.py Project: prime9/raiden
def _setup_matrix(config):
    if config['transport']['matrix'].get('available_servers') is None:
        # fetch list of known servers from raiden-network/raiden-tranport repo
        available_servers_url = DEFAULT_MATRIX_KNOWN_SERVERS[config['environment_type']]
        available_servers = get_matrix_servers(available_servers_url)
        log.debug('Fetching available matrix servers', available_servers=available_servers)
        config['transport']['matrix']['available_servers'] = available_servers

    # Add monitoring service broadcast room if enabled
    if config['services']['monitoring_enabled'] is True:
        config['transport']['matrix']['global_rooms'].append(MONITORING_BROADCASTING_ROOM)

    try:
        transport = MatrixTransport(config['transport']['matrix'])
    except RaidenError as ex:
        click.secho(f'FATAL: {ex}', fg='red')
        sys.exit(1)

    return transport
Example #5
0
def _load_environment(environment_file: IO) -> EnvironmentConfig:
    """Load the environment JSON file and process matrix server list

    Nodes can be assigned to fixed matrix servers. To allow this, we must
    download the list of matrix severs.
    """
    environment = json.load(environment_file)
    assert isinstance(environment, dict)

    matrix_server_list = environment.pop(
        "matrix_server_list",
        DEFAULT_MATRIX_KNOWN_SERVERS[Environment(environment["environment_type"])],
    )
    matrix_servers: Sequence[URI] = get_matrix_servers(matrix_server_list)  # type: ignore
    if len(matrix_servers) < 4:
        matrix_servers = list(islice(cycle(matrix_servers), 4))

    return EnvironmentConfig(
        matrix_servers=matrix_servers,
        environment_file_name=environment_file.name,
        **environment,
    )
Example #6
0
    def setup_matrix(self,
                     service_room_suffix: str) -> Tuple[GMatrixClient, Room]:
        available_servers_url = DEFAULT_MATRIX_KNOWN_SERVERS[
            Environment.DEVELOPMENT]
        available_servers = get_matrix_servers(available_servers_url)

        def _http_retry_delay() -> Iterable[float]:
            # below constants are defined in raiden.app.App.DEFAULT_CONFIG
            return udp_utils.timeout_exponential_backoff(
                DEFAULT_TRANSPORT_RETRIES_BEFORE_BACKOFF,
                int(DEFAULT_TRANSPORT_MATRIX_RETRY_INTERVAL / 5),
                int(DEFAULT_TRANSPORT_MATRIX_RETRY_INTERVAL),
            )

        client = make_client(
            servers=available_servers,
            http_pool_maxsize=4,
            http_retry_timeout=40,
            http_retry_delay=_http_retry_delay,
        )

        try:
            login_or_register(
                client,
                signer=LocalSigner(private_key=decode_hex(self.private_key)))
        except (MatrixRequestError, ValueError):
            raise ConnectionError('Could not login/register to matrix.')

        try:
            room_name = make_room_alias(self.chain_id, service_room_suffix)
            monitoring_room = join_global_room(client=client,
                                               name=room_name,
                                               servers=available_servers)
        except (MatrixRequestError, TransportError):
            raise ConnectionError(
                'Could not join monitoring broadcasting room.')

        return client, monitoring_room
Example #7
0
    def __init__(
        self,
        private_key: str,
        chain_id: ChainID,
        service_room_suffix: str,
        message_received_callback: Callable[[Message], None],
        address_reachability_changed_callback: Callable[
            [Address, AddressReachability], None] = None,
    ) -> None:
        super().__init__()

        self.private_key = private_key
        self.chain_id = chain_id
        self.service_room_suffix = service_room_suffix
        self.message_received_callback = message_received_callback

        self.available_servers = get_matrix_servers(
            DEFAULT_MATRIX_KNOWN_SERVERS[Environment.DEVELOPMENT])

        self.client = make_client(
            servers=self.available_servers,
            http_pool_maxsize=4,
            http_retry_timeout=40,
            http_retry_delay=matrix_http_retry_delay,
        )
        self.broadcast_room: Optional[Room] = None
        self.user_manager: Optional[UserAddressManager] = None

        if address_reachability_changed_callback is not None:
            self.user_manager = UserAddressManager(
                client=self.client,
                get_user_callable=self._get_user,
                address_reachability_changed_callback=
                address_reachability_changed_callback,
            )

        self.startup_finished = Event()
Example #8
0
    def __init__(
        self,
        username: str,
        password: str,
        own_server_name: str,
        known_servers_url: Optional[str] = None,
    ):
        self._username = username
        self._password = password
        self._own_server_name = own_server_name

        if known_servers_url is None:
            known_servers_url = DEFAULT_MATRIX_KNOWN_SERVERS[Environment.PRODUCTION]

        self._known_servers: Dict[str, str] = {
            urlparse(server_url).netloc: server_url
            for server_url in get_matrix_servers(
                known_servers_url, server_list_type=ServerListType.ALL_SERVERS
            )
        }

        self._first_server_name = list(self._known_servers.keys())[0]
        self._is_first_server = own_server_name == self._first_server_name
        self._apis: Dict[str, GMatrixHttpApi] = self._connect_all()

        if own_server_name not in self._apis:
            RuntimeError(f"Could not connect to own matrix server.")

        self._own_api = self._apis[own_server_name]
        log.debug(
            "Room ensurer initialized",
            own_server_name=own_server_name,
            known_servers=self._known_servers.keys(),
            first_server_name=self._first_server_name,
            is_first_server=self._is_first_server,
        )