diff --git a/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java b/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java index 925bb9097d..68fdeef878 100644 --- a/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java +++ b/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java @@ -1027,22 +1027,22 @@ public class PushDecryptJob extends BaseJob implements InjectableType { } } - private boolean isAuthorisationValid(@NonNull PairingAuthorisation authorisation) { + private boolean isValidAuthorisation(@NonNull PairingAuthorisation authorisation) { boolean isSecondaryDevice = TextSecurePreferences.isSecondaryDevice(context); - String ourPubKey = TextSecurePreferences.getLocalNumber(context); - boolean isRequest = authorisation.getType() == PairingAuthorisation.Type.REQUEST; + String userHexEncodedPublicKey = TextSecurePreferences.getLocalNumber(context); + boolean isRequest = (authorisation.getType() == PairingAuthorisation.Type.REQUEST); if (authorisation.getRequestSignature() == null) { - Log.w("Loki", "Received a pairing request with missing request signature. Ignored."); + Log.d("Loki", "Ignoring pairing message without a request signature."); return false; } else if (isRequest && isSecondaryDevice) { - Log.w("Loki", "Received a pairing request while being a secondary device. Ignored."); + Log.d("Loki", "Ignoring pairing message while in slave mode."); return false; - } else if (isRequest && !authorisation.getPrimaryDevicePublicKey().equals(ourPubKey)) { - Log.w("Loki", "Received a pairing request addressed to another pubkey. Ignored."); + } else if (isRequest && !authorisation.getPrimaryDevicePublicKey().equals(userHexEncodedPublicKey)) { + Log.d("Loki", "Ignoring pairing message addressed to another user."); return false; - } else if (isRequest && authorisation.getSecondaryDevicePublicKey().equals(ourPubKey)) { - Log.w("Loki", "Received a pairing request from ourselves. Ignored."); + } else if (isRequest && authorisation.getSecondaryDevicePublicKey().equals(userHexEncodedPublicKey)) { + Log.d("Loki", "Ignoring pairing message from self."); return false; } @@ -1050,19 +1050,19 @@ public class PushDecryptJob extends BaseJob implements InjectableType { } private void handlePairingAuthorisation(@NonNull PairingAuthorisation authorisation, @NonNull SignalServiceEnvelope envelope, @NonNull SignalServiceContent content) { - String ourNumber = TextSecurePreferences.getLocalNumber(context); + String userHexEncodedPublicKey = TextSecurePreferences.getLocalNumber(context); if (authorisation.getType() == PairingAuthorisation.Type.REQUEST) { handlePairingRequest(authorisation, envelope); - } else if (authorisation.getSecondaryDevicePublicKey().equals(ourNumber)) { - // If we were listed as a secondary device, it means we got a confirmation back from the primary device + } else if (authorisation.getSecondaryDevicePublicKey().equals(userHexEncodedPublicKey)) { + // If we were listed as the secondary device, it means we got a confirmation back from the primary device handlePairingAuthorisationForSelf(authorisation, envelope, content); } } private void handlePairingRequest(@NonNull PairingAuthorisation authorisation, @NonNull SignalServiceEnvelope envelope) { - boolean valid = isAuthorisationValid(authorisation); + boolean isValid = isValidAuthorisation(authorisation); DeviceLinkingSession linkingSession = DeviceLinkingSession.Companion.getShared(); - if (valid && linkingSession.isListeningForLinkingRequests()) { + if (isValid && linkingSession.isListeningForLinkingRequests()) { linkingSession.processLinkingRequest(authorisation); } else { // Remove pre key bundle from the user @@ -1072,30 +1072,30 @@ public class PushDecryptJob extends BaseJob implements InjectableType { private void handlePairingAuthorisationForSelf(@NonNull PairingAuthorisation authorisation, @NonNull SignalServiceEnvelope envelope, @NonNull SignalServiceContent content) { if (TextSecurePreferences.isSecondaryDevice(context)) { - Log.w("Loki", "Received an unexpected pairing authorisation (device is already paired as secondary device). Ignoring."); + Log.d("Loki", "Ignoring unexpected pairing authorisation (the device is already paired as a secondary device)."); return; } - if (!isAuthorisationValid(authorisation)) { - Log.w("Loki", "Received invalid pairing authorisation for self. Could not verify signature. Ignoring."); + if (!isValidAuthorisation(authorisation)) { + Log.d("Loki", "Ignoring invalid pairing authorisation."); return; } if (!DeviceLinkingSession.Companion.getShared().isListeningForLinkingRequests()) { - Log.w("Loki", "Received authorisation but device is not is listening."); + Log.d("Loki", "Ignoring pairing authorisation."); return; } // Unimplemented for REQUEST if (authorisation.getType() != PairingAuthorisation.Type.GRANT) { return; } - Log.d("Loki", "Receiving pairing authorisation from: " + authorisation.getPrimaryDevicePublicKey()); + Log.d("Loki", "Receiving pairing authorisation from: " + authorisation.getPrimaryDevicePublicKey() + "."); - // Send out accept event + // Process authorisation DeviceLinkingSession.Companion.getShared().processLinkingAuthorization(authorisation); // Set the current device as secondary and update our authorisations - String ourNumber = TextSecurePreferences.getLocalNumber(context); - DatabaseFactory.getLokiAPIDatabase(context).removePairingAuthorisations(ourNumber); + String userHexEncodedPublicKey = TextSecurePreferences.getLocalNumber(context); + DatabaseFactory.getLokiAPIDatabase(context).removePairingAuthorisations(userHexEncodedPublicKey); DatabaseFactory.getLokiAPIDatabase(context).insertOrUpdatePairingAuthorisation(authorisation); TextSecurePreferences.setIsSecondaryDevice(context, true); @@ -1104,7 +1104,7 @@ public class PushDecryptJob extends BaseJob implements InjectableType { // Propagate the updates to the file server LokiStorageAPI storageAPI = LokiStorageAPI.Companion.getShared(); - if (storageAPI != null) { storageAPI.updateUserDeviceMappings(); } + storageAPI.updateUserDeviceMappings(); // Update display names if (content.senderDisplayName.isPresent() && content.senderDisplayName.get().length() > 0) { @@ -1138,16 +1138,13 @@ public class PushDecryptJob extends BaseJob implements InjectableType { long threadID = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(contactID); LokiThreadFriendRequestStatus threadFriendRequestStatus = lokiThreadDatabase.getFriendRequestStatus(threadID); if (threadFriendRequestStatus == LokiThreadFriendRequestStatus.FRIENDS) { return; } - // If the thread's friend request status is not `FRIENDS`, but we're receiving a message, // it must be a friend request accepted message. Declining a friend request doesn't send a message. lokiThreadDatabase.setFriendRequestStatus(threadID, LokiThreadFriendRequestStatus.FRIENDS); - // Update the last message if needed SmsDatabase messageDatabase = DatabaseFactory.getSmsDatabase(context); LokiMessageDatabase lokiMessageDatabase = DatabaseFactory.getLokiMessageDatabase(context); int messageCount = messageDatabase.getMessageCountForThread(threadID); - long messageID = messageDatabase.getIDForMessageAtIndex(threadID, messageCount - 1); if (messageID > -1 && lokiMessageDatabase.getFriendRequestStatus(messageID) != LokiMessageFriendRequestStatus.REQUEST_ACCEPTED) { lokiMessageDatabase.setFriendRequestStatus(messageID, LokiMessageFriendRequestStatus.REQUEST_ACCEPTED); @@ -1156,13 +1153,11 @@ public class PushDecryptJob extends BaseJob implements InjectableType { private void updateFriendRequestStatusIfNeeded(@NonNull SignalServiceEnvelope envelope, @NonNull SignalServiceContent content, @NonNull SignalServiceDataMessage message) { if (!envelope.isFriendRequest()) { return; } - - // This handles the case where another user sends us a regular message without the authorisation - MultiDeviceUtilKt.shouldAutomaticallyBecomeFriendsWithDevice(content.getSender(), context).success(becomeFriends -> { + // This handles the case where another user sends us a regular message without authorisation + MultiDeviceUtilKt.shouldAutomaticallyBecomeFriendsWithDevice(content.getSender(), context).success( becomeFriends -> { if (becomeFriends) { // Become friends AND update the message they sent becomeFriendsWithContact(content.getSender()); - // Send them an accept message back sendBackgroundMessage(content.getSender()); } else { diff --git a/src/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java b/src/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java index 0cbf5ae98b..dea1068c8f 100644 --- a/src/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java +++ b/src/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java @@ -42,7 +42,6 @@ import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSy import org.whispersystems.signalservice.api.messages.shared.SharedContact; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.push.exceptions.UnregisteredUserException; -import org.whispersystems.signalservice.loki.messaging.LokiMessageFriendRequestStatus; import java.io.FileNotFoundException; import java.io.IOException; @@ -65,11 +64,10 @@ public class PushMediaSendJob extends PushSendJob implements InjectableType { @Inject SignalServiceMessageSender messageSender; - private long messageId; // The message id - private long templateMessageId; // The message id of the message to template this send job from - - // Loki - Multi-device + private long messageId; // The message ID + private long templateMessageId; // The message ID of the message to template this send job from + // Loki - Multi device private Address destination; // Destination to check whether this is another device we're sending to private boolean isFriendRequest; // Whether this is a friend request message private String customFriendRequestMessage; // If this isn't set then we use the message body diff --git a/src/org/thoughtcrime/securesms/jobs/PushTextSendJob.java b/src/org/thoughtcrime/securesms/jobs/PushTextSendJob.java index 4567c58672..4b44f47973 100644 --- a/src/org/thoughtcrime/securesms/jobs/PushTextSendJob.java +++ b/src/org/thoughtcrime/securesms/jobs/PushTextSendJob.java @@ -48,11 +48,10 @@ public class PushTextSendJob extends PushSendJob implements InjectableType { @Inject SignalServiceMessageSender messageSender; - private long messageId; // The message id - private long templateMessageId; // The message id of the message to template this send job from - - // Loki - Multi-device + private long messageId; // The message ID + private long templateMessageId; // The message ID of the message to template this send job from + // Loki - Multi device private Address destination; // Destination to check whether this is another device we're sending to private boolean isFriendRequest; // Whether this is a friend request message private String customFriendRequestMessage; // If this isn't set then we use the message body