diff --git a/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java b/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java index 562511853e..5cd0aa298a 100644 --- a/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java +++ b/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java @@ -4,7 +4,6 @@ import android.annotation.SuppressLint; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; -import android.os.AsyncTask; import android.os.Build; import android.support.annotation.NonNull; import android.support.annotation.Nullable; @@ -38,7 +37,6 @@ import org.thoughtcrime.securesms.crypto.IdentityKeyUtil; import org.thoughtcrime.securesms.crypto.SecurityEvent; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.crypto.storage.SignalProtocolStoreImpl; -import org.thoughtcrime.securesms.crypto.storage.TextSecureSessionStore; import org.thoughtcrime.securesms.database.Address; import org.thoughtcrime.securesms.database.AttachmentDatabase; import org.thoughtcrime.securesms.database.DatabaseFactory; @@ -59,7 +57,6 @@ import org.thoughtcrime.securesms.database.model.MmsMessageRecord; import org.thoughtcrime.securesms.database.model.SmsMessageRecord; import org.thoughtcrime.securesms.database.model.StickerRecord; import org.thoughtcrime.securesms.dependencies.InjectableType; -import org.thoughtcrime.securesms.groups.GroupManager; import org.thoughtcrime.securesms.groups.GroupMessageProcessor; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; @@ -70,17 +67,15 @@ import org.thoughtcrime.securesms.linkpreview.LinkPreviewUtil; import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.loki.activities.HomeActivity; import org.thoughtcrime.securesms.loki.database.LokiMessageDatabase; -import org.thoughtcrime.securesms.loki.database.LokiPreKeyBundleDatabase; import org.thoughtcrime.securesms.loki.database.LokiThreadDatabase; import org.thoughtcrime.securesms.loki.protocol.ClosedGroupsProtocol; import org.thoughtcrime.securesms.loki.protocol.FriendRequestProtocol; import org.thoughtcrime.securesms.loki.protocol.LokiSessionResetImplementation; import org.thoughtcrime.securesms.loki.protocol.MultiDeviceProtocol; +import org.thoughtcrime.securesms.loki.protocol.SessionManagementProtocol; import org.thoughtcrime.securesms.loki.protocol.SessionMetaProtocol; import org.thoughtcrime.securesms.loki.protocol.SyncMessagesProtocol; -import org.thoughtcrime.securesms.loki.utilities.Broadcaster; import org.thoughtcrime.securesms.loki.utilities.MentionManagerUtilities; -import org.thoughtcrime.securesms.loki.utilities.OpenGroupUtilities; import org.thoughtcrime.securesms.mms.IncomingMediaMessage; import org.thoughtcrime.securesms.mms.MmsException; import org.thoughtcrime.securesms.mms.OutgoingExpirationUpdateMessage; @@ -96,7 +91,6 @@ import org.thoughtcrime.securesms.service.WebRtcCallService; import org.thoughtcrime.securesms.sms.IncomingEncryptedMessage; import org.thoughtcrime.securesms.sms.IncomingEndSessionMessage; import org.thoughtcrime.securesms.sms.IncomingTextMessage; -import org.thoughtcrime.securesms.sms.MessageSender; import org.thoughtcrime.securesms.sms.OutgoingEncryptedMessage; import org.thoughtcrime.securesms.sms.OutgoingEndSessionMessage; import org.thoughtcrime.securesms.sms.OutgoingTextMessage; @@ -106,14 +100,10 @@ import org.thoughtcrime.securesms.util.Hex; import org.thoughtcrime.securesms.util.IdentityUtil; import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.thoughtcrime.securesms.util.Util; import org.whispersystems.libsignal.loki.LokiSessionResetProtocol; -import org.whispersystems.libsignal.loki.LokiSessionResetStatus; -import org.whispersystems.libsignal.state.PreKeyBundle; import org.whispersystems.libsignal.state.SignalProtocolStore; import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceMessageSender; -import org.whispersystems.signalservice.api.messages.SignalServiceAttachment; import org.whispersystems.signalservice.api.messages.SignalServiceContent; import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage; import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage.Preview; @@ -127,11 +117,6 @@ import org.whispersystems.signalservice.api.messages.calls.HangupMessage; import org.whispersystems.signalservice.api.messages.calls.IceUpdateMessage; import org.whispersystems.signalservice.api.messages.calls.OfferMessage; import org.whispersystems.signalservice.api.messages.calls.SignalServiceCallMessage; -import org.whispersystems.signalservice.api.messages.multidevice.ContactsMessage; -import org.whispersystems.signalservice.api.messages.multidevice.DeviceContact; -import org.whispersystems.signalservice.api.messages.multidevice.DeviceContactsInputStream; -import org.whispersystems.signalservice.api.messages.multidevice.DeviceGroup; -import org.whispersystems.signalservice.api.messages.multidevice.DeviceGroupsInputStream; import org.whispersystems.signalservice.api.messages.multidevice.ReadMessage; import org.whispersystems.signalservice.api.messages.multidevice.RequestMessage; import org.whispersystems.signalservice.api.messages.multidevice.SentTranscriptMessage; @@ -140,19 +125,10 @@ import org.whispersystems.signalservice.api.messages.multidevice.StickerPackOper import org.whispersystems.signalservice.api.messages.multidevice.VerifiedMessage; import org.whispersystems.signalservice.api.messages.shared.SharedContact; import org.whispersystems.signalservice.api.push.SignalServiceAddress; -import org.whispersystems.signalservice.loki.api.fileserver.LokiFileServerAPI; -import org.whispersystems.signalservice.loki.api.opengroups.LokiPublicChat; import org.whispersystems.signalservice.loki.crypto.LokiServiceCipher; import org.whispersystems.signalservice.loki.protocol.mentions.MentionsManager; import org.whispersystems.signalservice.loki.protocol.meta.LokiServiceMessage; -import org.whispersystems.signalservice.loki.protocol.multidevice.DeviceLink; -import org.whispersystems.signalservice.loki.protocol.multidevice.DeviceLinkingSession; -import org.whispersystems.signalservice.loki.protocol.sessionmanagement.SessionManagementProtocol; -import org.whispersystems.signalservice.loki.protocol.todo.LokiMessageFriendRequestStatus; -import org.whispersystems.signalservice.loki.protocol.todo.LokiThreadFriendRequestStatus; -import org.whispersystems.signalservice.loki.utilities.PromiseUtil; - -import java.io.InputStream; + import java.security.MessageDigest; import java.security.SecureRandom; import java.util.ArrayList; @@ -162,9 +138,7 @@ import java.util.List; import javax.inject.Inject; -import kotlin.Unit; import network.loki.messenger.R; -import nl.komponents.kovenant.Promise; public class PushDecryptJob extends BaseJob implements InjectableType { @@ -289,7 +263,7 @@ public class PushDecryptJob extends BaseJob implements InjectableType { SignalServiceContent content = cipher.decrypt(envelope); // Loki - Ignore any friend requests from before restoration - if (FriendRequestProtocol.isFriendRequestFromBeforeRestoration(content)) { + if (FriendRequestProtocol.isFriendRequestFromBeforeRestoration(context, content)) { Log.d("Loki", "Ignoring friend request from before restoration."); return; } @@ -300,13 +274,13 @@ public class PushDecryptJob extends BaseJob implements InjectableType { } // Loki - Handle friend request acceptance if needed - FriendRequestProtocol.handleFriendRequestAcceptanceIfNeeded(content); + FriendRequestProtocol.handleFriendRequestAcceptanceIfNeeded(context, content.getSender(), content); // Loki - Handle pre key bundle message if needed - SessionManagementProtocol.handlePreKeyBundleMessageIfNeeded(content); + SessionManagementProtocol.handlePreKeyBundleMessageIfNeeded(context, content); // Loki - Handle session request if needed - SessionManagementProtocol.handleSessionRequestIfNeeded(content); + SessionManagementProtocol.handleSessionRequestIfNeeded(context, content); // Loki - Handle address message if needed if (content.lokiServiceMessage.isPresent()) { @@ -317,17 +291,17 @@ public class PushDecryptJob extends BaseJob implements InjectableType { } // Loki - Handle profile update if needed - SessionMetaProtocol.handleProfileUpdateIfNeeded(content); + SessionMetaProtocol.handleProfileUpdateIfNeeded(context, content); if (content.getDeviceLink().isPresent()) { - MultiDeviceProtocol.handleDeviceLinkMessageIfNeeded(content); + MultiDeviceProtocol.handleDeviceLinkMessageIfNeeded(context, content.getDeviceLink().get(), content); } else if (content.getDataMessage().isPresent()) { SignalServiceDataMessage message = content.getDataMessage().get(); boolean isMediaMessage = message.getAttachments().isPresent() || message.getQuote().isPresent() || message.getSharedContacts().isPresent() || message.getPreviews().isPresent() || message.getSticker().isPresent(); // Loki - Handle unlinking request if needed if (message.isUnlinkingRequest()) { - MultiDeviceProtocol.handleUnlinkingRequest(message); + MultiDeviceProtocol.handleUnlinkingRequestIfNeeded(context, content); } else { // Loki - Don't process session restoration requests or session requests any further if (message.isSessionRestorationRequest() || message.isSessionRequest()) { return; } @@ -369,9 +343,9 @@ public class PushDecryptJob extends BaseJob implements InjectableType { else if (syncMessage.getRead().isPresent()) handleSynchronizeReadMessage(syncMessage.getRead().get(), content.getTimestamp()); else if (syncMessage.getVerified().isPresent()) handleSynchronizeVerifiedMessage(syncMessage.getVerified().get()); else if (syncMessage.getStickerPackOperations().isPresent()) handleSynchronizeStickerPackOperation(syncMessage.getStickerPackOperations().get()); - else if (syncMessage.getContacts().isPresent()) handleContactSyncMessage(syncMessage.getContacts().get()); - else if (syncMessage.getGroups().isPresent()) handleGroupSyncMessage(content, syncMessage.getGroups().get()); - else if (syncMessage.getOpenGroups().isPresent()) handleOpenGroupSyncMessage(syncMessage.getOpenGroups().get()); + else if (syncMessage.getContacts().isPresent()) SyncMessagesProtocol.handleContactSyncMessage(context, content, syncMessage.getContacts().get()); + else if (syncMessage.getGroups().isPresent()) SyncMessagesProtocol.handleGroupSyncMessage(context, content, syncMessage.getGroups().get()); + else if (syncMessage.getOpenGroups().isPresent()) SyncMessagesProtocol.handleOpenGroupSyncMessage(context, content, syncMessage.getOpenGroups().get()); else Log.w(TAG, "Contains no known sync types..."); } else if (content.getCallMessage().isPresent()) { Log.i(TAG, "Got call message..."); @@ -530,7 +504,7 @@ public class PushDecryptJob extends BaseJob implements InjectableType { } if (threadId != null) { - SessionManagementProtocol.handleEndSessionMessage(content); + SessionManagementProtocol.handleEndSessionMessage(context, content); MessageNotifier.updateNotification(context, threadId); } } @@ -688,7 +662,7 @@ public class PushDecryptJob extends BaseJob implements InjectableType { } // Loki - Update profile if needed - SessionMetaProtocol.handleProfileUpdateIfNeeded(content); + SessionMetaProtocol.handleProfileUpdateIfNeeded(context, content); if (threadId != null) { DatabaseFactory.getThreadDatabase(context).setRead(threadId, true);