Search in sources :

Example 1 with SimpleApiCallback

use of org.matrix.androidsdk.core.callback.SimpleApiCallback in project matrix-android-sdk by matrix-org.

the class CryptoTest method test29_testAliceAndBobInAEncryptedRoomWithReplyTo.

/**
 * We want to test that the relates_to data are well copied from e2e event to clear event
 *
 * @throws Exception
 */
@Test
public void test29_testAliceAndBobInAEncryptedRoomWithReplyTo() throws Exception {
    Log.e(LOG_TAG, "test08_testAliceAndBobInAEncryptedRoom2");
    Context context = InstrumentationRegistry.getContext();
    CryptoTestData cryptoTestData = mCryptoTestHelper.doE2ETestWithAliceAndBobInARoom(true);
    final MXSession aliceSession = cryptoTestData.getFirstSession();
    final String aliceRoomId = cryptoTestData.getRoomId();
    final MXSession bobSession = cryptoTestData.getSecondSession();
    bobSession.getCrypto().setWarnOnUnknownDevices(false);
    aliceSession.getCrypto().setWarnOnUnknownDevices(false);
    final Room roomFromBobPOV = bobSession.getDataHandler().getRoom(aliceRoomId);
    final Room roomFromAlicePOV = aliceSession.getDataHandler().getRoom(aliceRoomId);
    Assert.assertTrue(roomFromBobPOV.isEncrypted());
    Assert.assertTrue(roomFromAlicePOV.isEncrypted());
    final List<Event> bobReceivedEvents = new ArrayList<>();
    final List<Event> aliceReceivedEvents = new ArrayList<>();
    final int[] nbReceivedMessagesFromAlice = { 0 };
    final int[] nbReceivedMessagesFromBob = { 0 };
    final List<CountDownLatch> list = new ArrayList<>();
    MXEventListener bobEventListener = new MXEventListener() {

        @Override
        public void onLiveEvent(Event event, RoomState roomState) {
            if (TextUtils.equals(event.getType(), Event.EVENT_TYPE_MESSAGE) && !TextUtils.equals(event.getSender(), bobSession.getMyUserId())) {
                bobReceivedEvents.add(event);
                mCryptoTestHelper.checkEncryptedEvent(event, aliceRoomId, mCryptoTestHelper.getMessagesFromAlice().get(nbReceivedMessagesFromAlice[0]), aliceSession);
                nbReceivedMessagesFromAlice[0]++;
                list.get(list.size() - 1).countDown();
            }
        }
    };
    MXEventListener aliceEventListener = new MXEventListener() {

        @Override
        public void onLiveEvent(Event event, RoomState roomState) {
            if (TextUtils.equals(event.getType(), Event.EVENT_TYPE_MESSAGE) && !TextUtils.equals(event.getSender(), aliceSession.getMyUserId())) {
                aliceReceivedEvents.add(event);
                try {
                    // "In reply to" format for body
                    String expectedMessage = "> <" + aliceSession.getMyUserId() + "> " + mCryptoTestHelper.getMessagesFromAlice().get(nbReceivedMessagesFromAlice[0] - 1) + "\n\n" + mCryptoTestHelper.getMessagesFromBob().get(nbReceivedMessagesFromBob[0]);
                    mCryptoTestHelper.checkEncryptedEvent(event, aliceRoomId, expectedMessage, bobSession);
                    nbReceivedMessagesFromBob[0]++;
                    list.get(list.size() - 1).countDown();
                } catch (Exception e) {
                }
            }
        }
    };
    ApiCallback<Void> callback = new SimpleApiCallback<Void>() {

        @Override
        public void onSuccess(Void info) {
        // Ignore
        }
    };
    roomFromBobPOV.addEventListener(bobEventListener);
    roomFromAlicePOV.addEventListener(aliceEventListener);
    list.add(new CountDownLatch(2));
    final Map<String, Object> results = new HashMap<>();
    bobSession.getDataHandler().addListener(new MXEventListener() {

        @Override
        public void onToDeviceEvent(Event event) {
            results.put("onToDeviceEvent", event);
            list.get(0).countDown();
        }
    });
    // Alice sends a first event
    roomFromAlicePOV.sendEvent(mCryptoTestHelper.buildTextEvent(mCryptoTestHelper.getMessagesFromAlice().get(nbReceivedMessagesFromAlice[0]), aliceSession, aliceRoomId), callback);
    mTestHelper.await(list.get(list.size() - 1));
    Assert.assertTrue(results.containsKey("onToDeviceEvent"));
    Assert.assertEquals(1, nbReceivedMessagesFromAlice[0]);
    // Bob reply to Alice event
    Assert.assertTrue(roomFromBobPOV.canReplyTo(bobReceivedEvents.get(0)));
    list.add(new CountDownLatch(1));
    roomFromBobPOV.sendTextMessage(mCryptoTestHelper.getMessagesFromBob().get(nbReceivedMessagesFromBob[0]), null, Message.MSGTYPE_TEXT, bobReceivedEvents.get(0), null);
    mTestHelper.await(list.get(list.size() - 1));
    Assert.assertEquals(1, nbReceivedMessagesFromBob[0]);
    Event event = aliceReceivedEvents.get(0);
    JsonObject json = event.getContentAsJsonObject();
    Assert.assertNotNull(json);
    // Check that the received event contains a formatted body
    Assert.assertTrue(json.has("formatted_body"));
    // Check that the received event contains the relates to field
    Assert.assertTrue(json.has("m.relates_to"));
    RelatesTo relatesTo = (RelatesTo) JsonUtils.toClass(json.get("m.relates_to"), RelatesTo.class);
    Assert.assertNotNull(relatesTo);
    // Check that the event id matches
    Assert.assertEquals(bobReceivedEvents.get(0).eventId, relatesTo.dict.get("event_id"));
    cryptoTestData.clear(context);
}
Also used : Context(android.content.Context) HashMap(java.util.HashMap) CryptoTestData(org.matrix.androidsdk.common.CryptoTestData) ArrayList(java.util.ArrayList) JsonObject(com.google.gson.JsonObject) CountDownLatch(java.util.concurrent.CountDownLatch) MXSession(org.matrix.androidsdk.MXSession) RelatesTo(org.matrix.androidsdk.rest.model.message.RelatesTo) MXEventListener(org.matrix.androidsdk.listeners.MXEventListener) Event(org.matrix.androidsdk.rest.model.Event) JsonObject(com.google.gson.JsonObject) Room(org.matrix.androidsdk.data.Room) SimpleApiCallback(org.matrix.androidsdk.core.callback.SimpleApiCallback) RoomState(org.matrix.androidsdk.data.RoomState) Test(org.junit.Test)

Example 2 with SimpleApiCallback

use of org.matrix.androidsdk.core.callback.SimpleApiCallback in project matrix-android-sdk by matrix-org.

the class CryptoTest method test08_testAliceAndBobInAEncryptedRoom2.

@Test
public void test08_testAliceAndBobInAEncryptedRoom2() throws Exception {
    Log.e(LOG_TAG, "test08_testAliceAndBobInAEncryptedRoom2");
    Context context = InstrumentationRegistry.getContext();
    CryptoTestData cryptoTestData = mCryptoTestHelper.doE2ETestWithAliceAndBobInARoom(true);
    final MXSession aliceSession = cryptoTestData.getFirstSession();
    final String aliceRoomId = cryptoTestData.getRoomId();
    final MXSession bobSession = cryptoTestData.getSecondSession();
    bobSession.getCrypto().setWarnOnUnknownDevices(false);
    aliceSession.getCrypto().setWarnOnUnknownDevices(false);
    final Room roomFromBobPOV = bobSession.getDataHandler().getRoom(aliceRoomId);
    final Room roomFromAlicePOV = aliceSession.getDataHandler().getRoom(aliceRoomId);
    Assert.assertTrue(roomFromBobPOV.isEncrypted());
    Assert.assertTrue(roomFromAlicePOV.isEncrypted());
    final int[] nbReceivedMessagesFromAlice = { 0 };
    final int[] nbReceivedMessagesFromBob = { 0 };
    final List<CountDownLatch> list = new ArrayList<>();
    MXEventListener bobEventListener = new MXEventListener() {

        @Override
        public void onLiveEvent(Event event, RoomState roomState) {
            if (TextUtils.equals(event.getType(), Event.EVENT_TYPE_MESSAGE) && !TextUtils.equals(event.getSender(), bobSession.getMyUserId())) {
                mCryptoTestHelper.checkEncryptedEvent(event, aliceRoomId, mCryptoTestHelper.getMessagesFromAlice().get(nbReceivedMessagesFromAlice[0]), aliceSession);
                nbReceivedMessagesFromAlice[0]++;
                list.get(list.size() - 1).countDown();
            }
        }
    };
    MXEventListener aliceEventListener = new MXEventListener() {

        @Override
        public void onLiveEvent(Event event, RoomState roomState) {
            if (TextUtils.equals(event.getType(), Event.EVENT_TYPE_MESSAGE) && !TextUtils.equals(event.getSender(), aliceSession.getMyUserId())) {
                mCryptoTestHelper.checkEncryptedEvent(event, aliceRoomId, mCryptoTestHelper.getMessagesFromBob().get(nbReceivedMessagesFromBob[0]), bobSession);
                nbReceivedMessagesFromBob[0]++;
                list.get(list.size() - 1).countDown();
            }
        }
    };
    ApiCallback<Void> callback = new SimpleApiCallback<Void>() {

        @Override
        public void onSuccess(Void info) {
        // Ignored
        }
    };
    roomFromBobPOV.addEventListener(bobEventListener);
    roomFromAlicePOV.addEventListener(aliceEventListener);
    list.add(new CountDownLatch(2));
    final Map<String, Object> results = new HashMap<>();
    bobSession.getDataHandler().addListener(new MXEventListener() {

        @Override
        public void onToDeviceEvent(Event event) {
            results.put("onToDeviceEvent", event);
            list.get(0).countDown();
        }
    });
    roomFromAlicePOV.sendEvent(mCryptoTestHelper.buildTextEvent(mCryptoTestHelper.getMessagesFromAlice().get(nbReceivedMessagesFromAlice[0]), aliceSession, aliceRoomId), callback);
    mTestHelper.await(list.get(list.size() - 1));
    Assert.assertTrue(results.containsKey("onToDeviceEvent"));
    Assert.assertEquals(1, nbReceivedMessagesFromAlice[0]);
    list.add(new CountDownLatch(1));
    roomFromBobPOV.sendEvent(mCryptoTestHelper.buildTextEvent(mCryptoTestHelper.getMessagesFromBob().get(nbReceivedMessagesFromBob[0]), bobSession, aliceRoomId), callback);
    mTestHelper.await(list.get(list.size() - 1));
    Assert.assertEquals(1, nbReceivedMessagesFromBob[0]);
    list.add(new CountDownLatch(1));
    roomFromBobPOV.sendEvent(mCryptoTestHelper.buildTextEvent(mCryptoTestHelper.getMessagesFromBob().get(nbReceivedMessagesFromBob[0]), bobSession, aliceRoomId), callback);
    mTestHelper.await(list.get(list.size() - 1));
    Assert.assertEquals(2, nbReceivedMessagesFromBob[0]);
    list.add(new CountDownLatch(1));
    roomFromBobPOV.sendEvent(mCryptoTestHelper.buildTextEvent(mCryptoTestHelper.getMessagesFromBob().get(nbReceivedMessagesFromBob[0]), bobSession, aliceRoomId), callback);
    mTestHelper.await(list.get(list.size() - 1));
    Assert.assertEquals(3, nbReceivedMessagesFromBob[0]);
    list.add(new CountDownLatch(1));
    roomFromAlicePOV.sendEvent(mCryptoTestHelper.buildTextEvent(mCryptoTestHelper.getMessagesFromAlice().get(nbReceivedMessagesFromAlice[0]), aliceSession, aliceRoomId), callback);
    mTestHelper.await(list.get(list.size() - 1));
    Assert.assertEquals(2, nbReceivedMessagesFromAlice[0]);
    cryptoTestData.clear(context);
}
Also used : Context(android.content.Context) HashMap(java.util.HashMap) CryptoTestData(org.matrix.androidsdk.common.CryptoTestData) ArrayList(java.util.ArrayList) CountDownLatch(java.util.concurrent.CountDownLatch) MXSession(org.matrix.androidsdk.MXSession) MXEventListener(org.matrix.androidsdk.listeners.MXEventListener) Event(org.matrix.androidsdk.rest.model.Event) JsonObject(com.google.gson.JsonObject) Room(org.matrix.androidsdk.data.Room) SimpleApiCallback(org.matrix.androidsdk.core.callback.SimpleApiCallback) RoomState(org.matrix.androidsdk.data.RoomState) Test(org.junit.Test)

Example 3 with SimpleApiCallback

use of org.matrix.androidsdk.core.callback.SimpleApiCallback in project matrix-android-sdk by matrix-org.

the class MXSession method markRoomsAsRead.

/**
 * Send the read receipts to the latest room messages.
 *
 * @param roomsIterator the rooms list iterator
 * @param callback      the asynchronous callback
 */
private void markRoomsAsRead(final Iterator roomsIterator, final ApiCallback<Void> callback) {
    if (roomsIterator.hasNext()) {
        Room room = (Room) roomsIterator.next();
        boolean isRequestSent = false;
        if (mNetworkConnectivityReceiver.isConnected()) {
            isRequestSent = room.markAllAsRead(new SimpleApiCallback<Void>(callback) {

                @Override
                public void onSuccess(Void anything) {
                    markRoomsAsRead(roomsIterator, callback);
                }
            });
        } else {
            // update the local data
            room.sendReadReceipt();
        }
        if (!isRequestSent) {
            markRoomsAsRead(roomsIterator, callback);
        }
    } else {
        if (null != callback) {
            new Handler(Looper.getMainLooper()).post(new Runnable() {

                @Override
                public void run() {
                    callback.onSuccess(null);
                }
            });
        }
    }
}
Also used : Handler(android.os.Handler) Room(org.matrix.androidsdk.data.Room) SimpleApiCallback(org.matrix.androidsdk.core.callback.SimpleApiCallback)

Example 4 with SimpleApiCallback

use of org.matrix.androidsdk.core.callback.SimpleApiCallback in project matrix-android-sdk by matrix-org.

the class MediaScanRestClient method getServerPublicKey.

/**
 * Get the current public curve25519 key that the AV server is advertising.
 * Read the value from cache if any
 *
 * @param callback on success callback containing the server public key
 */
public void getServerPublicKey(final ApiCallback<String> callback) {
    if (mMxStore == null) {
        callback.onUnexpectedError(new Exception("MxStore not configured"));
        return;
    }
    // Check in cache
    String keyFromCache = mMxStore.getAntivirusServerPublicKey();
    if (keyFromCache != null) {
        callback.onSuccess(keyFromCache);
    } else {
        mApi.getServerPublicKey().enqueue(new RestAdapterCallback<>("getServerPublicKey", null, new SimpleApiCallback<MediaScanPublicKeyResult>(callback) {

            @Override
            public void onSuccess(MediaScanPublicKeyResult info) {
                // Store the key in cache for next times
                mMxStore.setAntivirusServerPublicKey(info.mCurve25519PublicKey);
                // Note: for some reason info.mCurve25519PublicKey may be null
                if (info.mCurve25519PublicKey != null) {
                    callback.onSuccess(info.mCurve25519PublicKey);
                } else {
                    callback.onUnexpectedError(new Exception("Unable to get server public key from Json"));
                }
            }

            @Override
            public void onMatrixError(MatrixError e) {
                // Old Antivirus scanner instance will return a 404
                if (e.mStatus == HttpURLConnection.HTTP_NOT_FOUND) {
                    // On 404 consider the public key is not available, so do not encrypt body
                    mMxStore.setAntivirusServerPublicKey("");
                    callback.onSuccess("");
                } else {
                    super.onMatrixError(e);
                }
            }
        }, null));
    }
}
Also used : MatrixError(org.matrix.androidsdk.core.model.MatrixError) OlmException(org.matrix.olm.OlmException) SimpleApiCallback(org.matrix.androidsdk.core.callback.SimpleApiCallback) MediaScanPublicKeyResult(org.matrix.androidsdk.rest.model.MediaScanPublicKeyResult)

Example 5 with SimpleApiCallback

use of org.matrix.androidsdk.core.callback.SimpleApiCallback in project matrix-android-sdk by matrix-org.

the class ProfileRestClient method refreshTokens.

/**
 * Refresh access/refresh tokens, using the current refresh token.
 *
 * @param refreshToken the refreshToken
 * @param callback     the callback success and failure callback
 */
public void refreshTokens(final String refreshToken, final ApiCallback<TokenRefreshResponse> callback) {
    final String description = "refreshTokens";
    TokenRefreshParams params = new TokenRefreshParams();
    params.refresh_token = refreshToken;
    mApi.tokenRefresh(params).enqueue(new RestAdapterCallback<TokenRefreshResponse>(description, mUnsentEventsManager, new SimpleApiCallback<TokenRefreshResponse>(callback) {

        @Override
        public void onSuccess(TokenRefreshResponse info) {
            setAccessToken(info.accessToken);
            if (null != callback) {
                callback.onSuccess(info);
            }
        }
    }, null) {
    });
}
Also used : TokenRefreshParams(org.matrix.androidsdk.rest.model.login.TokenRefreshParams) TokenRefreshResponse(org.matrix.androidsdk.rest.model.login.TokenRefreshResponse) SimpleApiCallback(org.matrix.androidsdk.core.callback.SimpleApiCallback)

Aggregations

SimpleApiCallback (org.matrix.androidsdk.core.callback.SimpleApiCallback)17 ArrayList (java.util.ArrayList)7 MatrixError (org.matrix.androidsdk.core.model.MatrixError)5 Room (org.matrix.androidsdk.data.Room)5 List (java.util.List)4 CountDownLatch (java.util.concurrent.CountDownLatch)4 RoomState (org.matrix.androidsdk.data.RoomState)4 Event (org.matrix.androidsdk.rest.model.Event)4 HashMap (java.util.HashMap)3 ApiCallback (org.matrix.androidsdk.core.callback.ApiCallback)3 Context (android.content.Context)2 JsonObject (com.google.gson.JsonObject)2 Test (org.junit.Test)2 MXSession (org.matrix.androidsdk.MXSession)2 CryptoTestData (org.matrix.androidsdk.common.CryptoTestData)2 MXCryptoError (org.matrix.androidsdk.crypto.MXCryptoError)2 EventTimeline (org.matrix.androidsdk.data.timeline.EventTimeline)2 MXEventListener (org.matrix.androidsdk.listeners.MXEventListener)2 IdentityServerRequest3PIDValidationParams (org.matrix.androidsdk.rest.model.IdentityServerRequest3PIDValidationParams)2 IdentityServerRequestTokenResponse (org.matrix.androidsdk.rest.model.IdentityServerRequestTokenResponse)2