From 6da36fe098c82fa9456ec5c445d6e37cb8e73611 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Wed, 10 May 2023 18:01:01 -0400 Subject: [PATCH] Deprecate the SyncMessage.pniIdentity field. --- .../securesms/jobs/JobManagerFactories.java | 2 +- .../jobs/MultiDevicePniIdentityUpdateJob.java | 104 ------------------ .../messages/MessageContentProcessor.java | 5 - .../messages/SyncMessageProcessor.kt | 2 - .../api/SignalServiceMessageSender.java | 9 -- .../multidevice/SignalServiceSyncMessage.java | 46 -------- .../src/main/proto/SignalService.proto | 7 +- 7 files changed, 2 insertions(+), 173 deletions(-) delete mode 100644 app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDevicePniIdentityUpdateJob.java diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java index 3a1d0ab29e..6a1af870e3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java @@ -139,7 +139,6 @@ public final class JobManagerFactories { put(MultiDeviceKeysUpdateJob.KEY, new MultiDeviceKeysUpdateJob.Factory()); put(MultiDeviceMessageRequestResponseJob.KEY, new MultiDeviceMessageRequestResponseJob.Factory()); put(MultiDeviceOutgoingPaymentSyncJob.KEY, new MultiDeviceOutgoingPaymentSyncJob.Factory()); - put(MultiDevicePniIdentityUpdateJob.KEY, new MultiDevicePniIdentityUpdateJob.Factory()); put(MultiDeviceProfileContentUpdateJob.KEY, new MultiDeviceProfileContentUpdateJob.Factory()); put(MultiDeviceProfileKeyUpdateJob.KEY, new MultiDeviceProfileKeyUpdateJob.Factory()); put(MultiDeviceReadUpdateJob.KEY, new MultiDeviceReadUpdateJob.Factory()); @@ -281,6 +280,7 @@ public final class JobManagerFactories { put("RefreshPreKeysJob", new PreKeysSyncJob.Factory()); put("RecipientChangedNumberJob", new FailingJob.Factory()); put("PushTextSendJob", new IndividualSendJob.Factory()); + put("MultiDevicePniIdentityUpdateJob", new FailingJob.Factory()); }}; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDevicePniIdentityUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDevicePniIdentityUpdateJob.java deleted file mode 100644 index 4d9f24b7d2..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDevicePniIdentityUpdateJob.java +++ /dev/null @@ -1,104 +0,0 @@ -package org.thoughtcrime.securesms.jobs; - - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.google.protobuf.ByteString; - -import org.signal.core.util.logging.Log; -import org.signal.libsignal.protocol.IdentityKeyPair; -import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; -import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.JsonJobData; -import org.thoughtcrime.securesms.jobmanager.Job; -import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; -import org.thoughtcrime.securesms.keyvalue.SignalStore; -import org.thoughtcrime.securesms.net.NotPushRegisteredException; -import org.thoughtcrime.securesms.recipients.Recipient; -import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException; -import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage; -import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException; -import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedException; -import org.whispersystems.signalservice.internal.push.SignalServiceProtos.SyncMessage.PniIdentity; - -import java.io.IOException; -import java.util.concurrent.TimeUnit; - -/** - * As part of the PNI migration, linked devices will need to be told what their PNI identity key is. This job is sent either in response to a request from - * a linked device or as part of a migration when we start using PNIs. - */ -public class MultiDevicePniIdentityUpdateJob extends BaseJob { - - private static final String TAG = Log.tag(MultiDevicePniIdentityUpdateJob.class); - - public static final String KEY = "MultiDevicePniIdentityUpdateJob"; - - public MultiDevicePniIdentityUpdateJob() { - this(new Parameters.Builder() - .setQueue("__MULTI_DEVICE_PNI_IDENTITY_UPDATE_JOB__") - .setMaxInstancesForFactory(1) - .addConstraint(NetworkConstraint.KEY) - .setLifespan(TimeUnit.DAYS.toMillis(1)) - .setMaxAttempts(Parameters.UNLIMITED) - .build()); - } - - private MultiDevicePniIdentityUpdateJob(@NonNull Parameters parameters) { - super(parameters); - } - - @Override - public @Nullable byte[] serialize() { - return null; - } - - @Override - public @NonNull String getFactoryKey() { - return KEY; - } - - @Override - public void onRun() throws IOException, UntrustedIdentityException { - if (!Recipient.self().isRegistered()) { - throw new NotPushRegisteredException(); - } - - if (!TextSecurePreferences.isMultiDevice(context)) { - Log.i(TAG, "Not multi device, aborting..."); - return; - } - - if (SignalStore.account().isLinkedDevice()) { - Log.i(TAG, "Not primary device, aborting..."); - return; - } - - IdentityKeyPair pniIdentityKeyPair = SignalStore.account().getPniIdentityKey(); - SignalServiceSyncMessage syncMessage = SignalServiceSyncMessage.forPniIdentity(PniIdentity.newBuilder() - .setPublicKey(ByteString.copyFrom(pniIdentityKeyPair.getPublicKey().serialize())) - .setPrivateKey(ByteString.copyFrom(pniIdentityKeyPair.getPrivateKey().serialize())) - .build()); - - ApplicationDependencies.getSignalServiceMessageSender().sendSyncMessage(syncMessage, UnidentifiedAccessUtil.getAccessForSync(context)); - } - - @Override - public boolean onShouldRetry(@NonNull Exception e) { - if (e instanceof ServerRejectedException) return false; - return e instanceof PushNetworkException; - } - - @Override - public void onFailure() { - } - - public static final class Factory implements Job.Factory { - @Override - public @NonNull MultiDevicePniIdentityUpdateJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { - return new MultiDevicePniIdentityUpdateJob(parameters); - } - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java index 1731a6353b..28d2f19c92 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java @@ -86,7 +86,6 @@ import org.thoughtcrime.securesms.jobs.MultiDeviceContactSyncJob; import org.thoughtcrime.securesms.jobs.MultiDeviceContactUpdateJob; import org.thoughtcrime.securesms.jobs.MultiDeviceGroupUpdateJob; import org.thoughtcrime.securesms.jobs.MultiDeviceKeysUpdateJob; -import org.thoughtcrime.securesms.jobs.MultiDevicePniIdentityUpdateJob; import org.thoughtcrime.securesms.jobs.MultiDeviceStickerPackSyncJob; import org.thoughtcrime.securesms.jobs.NullMessageSendJob; import org.thoughtcrime.securesms.jobs.PaymentLedgerUpdateJob; @@ -1504,10 +1503,6 @@ public class MessageContentProcessor { if (message.isKeysRequest()) { ApplicationDependencies.getJobManager().add(new MultiDeviceKeysUpdateJob()); } - - if (message.isPniIdentityRequest()) { - ApplicationDependencies.getJobManager().add(new MultiDevicePniIdentityUpdateJob()); - } } private void handleSynchronizeReadMessage(@NonNull SignalServiceContent content, diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt index 7ee57d0968..ad338c6f00 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt @@ -43,7 +43,6 @@ import org.thoughtcrime.securesms.jobs.MultiDeviceContactSyncJob import org.thoughtcrime.securesms.jobs.MultiDeviceContactUpdateJob import org.thoughtcrime.securesms.jobs.MultiDeviceGroupUpdateJob import org.thoughtcrime.securesms.jobs.MultiDeviceKeysUpdateJob -import org.thoughtcrime.securesms.jobs.MultiDevicePniIdentityUpdateJob import org.thoughtcrime.securesms.jobs.MultiDeviceStickerPackSyncJob import org.thoughtcrime.securesms.jobs.PushProcessEarlyMessagesJob import org.thoughtcrime.securesms.jobs.RefreshOwnProfileJob @@ -871,7 +870,6 @@ object SyncMessageProcessor { ApplicationDependencies.getJobManager().add(MultiDeviceStickerPackSyncJob()) } Request.Type.KEYS -> ApplicationDependencies.getJobManager().add(MultiDeviceKeysUpdateJob()) - Request.Type.PNI_IDENTITY -> ApplicationDependencies.getJobManager().add(MultiDevicePniIdentityUpdateJob()) else -> warn(envelopeTimestamp, "Unknown request type: ${message.type}") } } diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java index 4207ff2081..734c8c44f5 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java @@ -688,8 +688,6 @@ public class SignalServiceMessageSender { } else if (message.getRequest().isPresent()) { content = createRequestContent(message.getRequest().get().getRequest()); urgent = message.getRequest().get().isUrgent(); - } else if (message.getPniIdentity().isPresent()) { - content = createPniIdentityContent(message.getPniIdentity().get()); } else if (message.getCallEvent().isPresent()) { content = createCallEventContent(message.getCallEvent().get()); } else { @@ -1651,13 +1649,6 @@ public class SignalServiceMessageSender { return container.setSyncMessage(builder).build(); } - private Content createPniIdentityContent(SyncMessage.PniIdentity proto) { - Content.Builder container = Content.newBuilder(); - SyncMessage.Builder builder = createSyncMessageBuilder().setPniIdentity(proto); - - return container.setSyncMessage(builder).build(); - } - private Content createCallEventContent(SyncMessage.CallEvent proto) { Content.Builder container = Content.newBuilder(); SyncMessage.Builder builder = createSyncMessageBuilder().setCallEvent(proto); diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/SignalServiceSyncMessage.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/SignalServiceSyncMessage.java index ad8b87b599..51b8ef766b 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/SignalServiceSyncMessage.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/SignalServiceSyncMessage.java @@ -9,7 +9,6 @@ package org.whispersystems.signalservice.api.messages.multidevice; import org.whispersystems.signalservice.api.messages.SignalServiceAttachment; import org.whispersystems.signalservice.internal.push.SignalServiceProtos.SyncMessage.CallEvent; -import org.whispersystems.signalservice.internal.push.SignalServiceProtos.SyncMessage.PniIdentity; import java.util.LinkedList; import java.util.List; @@ -33,7 +32,6 @@ public class SignalServiceSyncMessage { private final Optional keys; private final Optional messageRequestResponse; private final Optional outgoingPaymentMessage; - private final Optional pniIdentity; private final Optional> views; private final Optional callEvent; @@ -52,7 +50,6 @@ public class SignalServiceSyncMessage { Optional messageRequestResponse, Optional outgoingPaymentMessage, Optional> views, - Optional pniIdentity, Optional callEvent) { this.sent = sent; @@ -70,7 +67,6 @@ public class SignalServiceSyncMessage { this.messageRequestResponse = messageRequestResponse; this.outgoingPaymentMessage = outgoingPaymentMessage; this.views = views; - this.pniIdentity = pniIdentity; this.callEvent = callEvent; } @@ -90,7 +86,6 @@ public class SignalServiceSyncMessage { Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty()); } @@ -110,7 +105,6 @@ public class SignalServiceSyncMessage { Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty()); } @@ -130,7 +124,6 @@ public class SignalServiceSyncMessage { Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty()); } @@ -150,7 +143,6 @@ public class SignalServiceSyncMessage { Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty()); } @@ -170,7 +162,6 @@ public class SignalServiceSyncMessage { Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty()); } @@ -190,7 +181,6 @@ public class SignalServiceSyncMessage { Optional.empty(), Optional.empty(), Optional.of(views), - Optional.empty(), Optional.empty()); } @@ -210,7 +200,6 @@ public class SignalServiceSyncMessage { Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty()); } @@ -233,7 +222,6 @@ public class SignalServiceSyncMessage { Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty()); } @@ -253,7 +241,6 @@ public class SignalServiceSyncMessage { Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty()); } @@ -273,7 +260,6 @@ public class SignalServiceSyncMessage { Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty()); } @@ -293,7 +279,6 @@ public class SignalServiceSyncMessage { Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty()); } @@ -313,7 +298,6 @@ public class SignalServiceSyncMessage { Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty()); } @@ -333,7 +317,6 @@ public class SignalServiceSyncMessage { Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty()); } @@ -353,7 +336,6 @@ public class SignalServiceSyncMessage { Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty()); } @@ -373,7 +355,6 @@ public class SignalServiceSyncMessage { Optional.of(messageRequestResponse), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty()); } @@ -393,27 +374,6 @@ public class SignalServiceSyncMessage { Optional.empty(), Optional.of(outgoingPaymentMessage), Optional.empty(), - Optional.empty(), - Optional.empty()); - } - - public static SignalServiceSyncMessage forPniIdentity(PniIdentity pniIdentity) { - return new SignalServiceSyncMessage(Optional.empty(), - Optional.empty(), - Optional.empty(), - Optional.empty(), - Optional.empty(), - Optional.empty(), - Optional.empty(), - Optional.empty(), - Optional.empty(), - Optional.empty(), - Optional.empty(), - Optional.empty(), - Optional.empty(), - Optional.empty(), - Optional.empty(), - Optional.of(pniIdentity), Optional.empty()); } @@ -433,7 +393,6 @@ public class SignalServiceSyncMessage { Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.of(callEvent)); } @@ -453,7 +412,6 @@ public class SignalServiceSyncMessage { Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty()); } @@ -517,10 +475,6 @@ public class SignalServiceSyncMessage { return views; } - public Optional getPniIdentity() { - return pniIdentity; - } - public Optional getCallEvent() { return callEvent; } diff --git a/libsignal/service/src/main/proto/SignalService.proto b/libsignal/service/src/main/proto/SignalService.proto index fb6a22f9b9..38da4abb65 100644 --- a/libsignal/service/src/main/proto/SignalService.proto +++ b/libsignal/service/src/main/proto/SignalService.proto @@ -556,11 +556,6 @@ message SyncMessage { optional bytes storageService = 1; } - message PniIdentity { - optional bytes publicKey = 1; - optional bytes privateKey = 2; - } - message MessageRequestResponse { enum Type { UNKNOWN = 0; @@ -650,7 +645,7 @@ message SyncMessage { optional MessageRequestResponse messageRequestResponse = 14; optional OutgoingPayment outgoingPayment = 15; repeated Viewed viewed = 16; - optional PniIdentity pniIdentity = 17; + reserved /*pniIdentity*/ 17; optional PniChangeNumber pniChangeNumber = 18; optional CallEvent callEvent = 19; }