Beispiel #1
0
async def async_client_pair(tempdir, loop):
    ALICE_ID = "@alice:example.org"
    ALICE_DEVICE = "JLAFKJWSCS"

    BOB_ID = "@bob:example.org"
    BOB_DEVICE = "ASDFOEAK"

    config = AsyncClientConfig(max_timeouts=3)
    alice = AsyncClient(
        "https://example.org",
        ALICE_ID,
        ALICE_DEVICE,
        tempdir,
        config=config,
    )
    bob = AsyncClient(
        "https://example.org",
        BOB_ID,
        BOB_DEVICE,
        tempdir,
        config=config,
    )

    await alice.receive_response(
        LoginResponse(ALICE_ID, ALICE_DEVICE, "alice_1234"))
    await bob.receive_response(LoginResponse(BOB_ID, BOB_DEVICE, "bob_1234"))

    yield (alice, bob)

    await alice.close()
    await bob.close()
Beispiel #2
0
    def test_session_sharing(self, alice_client, async_client, aioresponse):
        loop = asyncio.get_event_loop()
        async_client.receive_response(
            LoginResponse.from_dict(self.login_response))
        assert async_client.logged_in

        async_client.receive_response(self.encryption_sync_response)

        alice_client.load_store()
        alice_device = OlmDevice(
            ALICE_ID,
            ALICE_DEVICE_ID,
            alice_client.olm.account.identity_keys["ed25519"],
            alice_client.olm.account.identity_keys["curve25519"],
        )

        async_client.device_store.add(alice_device)
        async_client.verify_device(alice_device)

        missing = async_client.get_missing_sessions(TEST_ROOM_ID)
        assert ALICE_ID in missing
        assert ALICE_DEVICE_ID in missing[ALICE_ID]

        to_share = alice_client.olm.share_keys()

        one_time_key = list(to_share["one_time_keys"].items())[0]

        key_claim_dict = {
            "one_time_keys": {
                ALICE_ID: {
                    ALICE_DEVICE_ID: {
                        one_time_key[0]: one_time_key[1]
                    },
                },
            },
            "failures": {},
        }

        aioresponse.post(
            "https://example.org/_matrix/client/r0/keys/claim?access_token=abc123",
            status=200,
            payload=key_claim_dict)

        aioresponse.put(
            "https://example.org/_matrix/client/r0/sendToDevice/m.room.encrypted/1?access_token=abc123",
            status=200,
            payload={})

        with pytest.raises(KeyError):
            session = async_client.olm.outbound_group_sessions[TEST_ROOM_ID]

        response = loop.run_until_complete(
            async_client.share_group_session(TEST_ROOM_ID, "1"))

        session = async_client.olm.outbound_group_sessions[TEST_ROOM_ID]
        assert session.shared

        assert isinstance(response, ShareGroupSessionResponse)
        assert not async_client.get_missing_sessions(TEST_ROOM_ID)
        assert async_client.olm.session_store.get(alice_device.curve25519)
Beispiel #3
0
 def login_response(self):
     return LoginResponse.from_dict({
         "access_token": "abc123",
         "device_id": "DEVICEID",
         "home_server": "example.org",
         "user_id": "@example:example.org",
     })
 def test_matrix_nio_backend_serve_once_not_logged_in_has_not_synced_error_sync(
         self):
     backend = matrix_nio.MatrixNioBackend(self.bot_config)
     backend.client = nio.AsyncClient("test.matrix.org",
                                      user="******",
                                      device_id="test_device")
     backend.client.access_token = True
     user_id = "@example:localhost"
     login_response = LoginResponse.from_dict({
         "user_id": user_id,
         "device_id": "device_id",
         "access_token": "12345",
     })
     login_response_mock = mock.Mock(
         return_value=aiounittest.futurized(login_response))
     backend.client.login_raw = login_response_mock
     sync_mock = mock.Mock(return_value=aiounittest.futurized(
         ErrorResponse.from_dict({
             "errcode": "ERROR_SYNCING",
             "error": "Error syncing",
             "retry_after_ms": 10000
         })))
     backend.client.sync = sync_mock
     with self.assertRaises(ValueError):
         backend.serve_once()
     sync_mock.assert_called_once_with(full_state=True)
 def test_matrix_nio_backend_serve_once_not_logged_in_has_synced(self):
     backend = matrix_nio.MatrixNioBackend(self.bot_config)
     backend.client = nio.AsyncClient("test.matrix.org",
                                      user="******",
                                      device_id="test_device")
     backend.has_synced = True
     user_id = "@example:localhost"
     login_response = LoginResponse.from_dict({
         "user_id": user_id,
         "device_id": "device_id",
         "access_token": "12345",
     })
     login_response_mock = mock.Mock(
         return_value=aiounittest.futurized(login_response))
     backend.client.login_raw = login_response_mock
     test_name = "Test Name"
     backend.client.get_profile = mock.Mock(
         return_value=aiounittest.futurized(
             ProfileGetResponse.from_dict(
                 {
                     "displayname": test_name,
                     "avatar_url": "http://test.org/avatar.png"
                 })))
     sync_forever_mock = mock.Mock(return_value=aiounittest.futurized(True))
     backend.client.sync_forever = sync_forever_mock
     backend.serve_once()
     sync_forever_mock.assert_called_once_with(30000, full_state=True)
     backend.client.get_profile.assert_called_once_with(user_id)
     login_response_mock.assert_called_once_with(
         self.bot_config.BOT_IDENTITY["auth_dict"])
Beispiel #6
0
    def test_key_claiming(self, alice_client, async_client, aioresponse):
        loop = asyncio.get_event_loop()
        async_client.receive_response(
            LoginResponse.from_dict(self.login_response))
        assert async_client.logged_in

        async_client.receive_response(self.encryption_sync_response)

        alice_client.load_store()
        alice_device = OlmDevice(
            ALICE_ID,
            ALICE_DEVICE_ID,
            alice_client.olm.account.identity_keys["ed25519"],
            alice_client.olm.account.identity_keys["curve25519"],
        )

        async_client.device_store.add(alice_device)

        missing = async_client.get_missing_sessions(TEST_ROOM_ID)
        assert ALICE_ID in missing
        assert ALICE_DEVICE_ID in missing[ALICE_ID]

        to_share = alice_client.olm.share_keys()

        one_time_key = list(to_share["one_time_keys"].items())[0]

        key_claim_dict = {
            "one_time_keys": {
                ALICE_ID: {
                    ALICE_DEVICE_ID: {
                        one_time_key[0]: one_time_key[1]
                    },
                },
            },
            "failures": {},
        }

        aioresponse.post(
            "https://example.org/_matrix/client/r0/keys/claim?access_token=abc123",
            status=200,
            payload=key_claim_dict)

        response = loop.run_until_complete(async_client.keys_claim(missing))

        assert isinstance(response, KeysClaimResponse)
        assert not async_client.get_missing_sessions(TEST_ROOM_ID)
        assert async_client.olm.session_store.get(alice_device.curve25519)
Beispiel #7
0
 def login_response(self):
     return LoginResponse("@ephemeral:example.org", "DEVICEID", "abc123")