From c837d590abcab60065c81a115dfc37fef9321216 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Thu, 21 Nov 2019 11:10:13 -0500 Subject: [PATCH] Removed RefreshUnidentifiedDeliveryAvailabilityJob. It's been long enough -- it's no longer necessary to check. Also, the service is going to start returning certs no matter what, so at this point it's just an unnecessary network call. --- .../securesms/ApplicationContext.java | 15 --- .../securesms/DeviceListFragment.java | 4 +- .../crypto/UnidentifiedAccessUtil.java | 10 -- .../WorkManagerFactoryMappings.java | 3 +- .../securesms/jobs/JobManagerFactories.java | 2 +- .../securesms/jobs/PushDecryptJob.java | 1 - .../securesms/jobs/PushMediaSendJob.java | 20 ++-- .../securesms/jobs/PushTextSendJob.java | 20 ++-- .../securesms/jobs/RefreshAttributesJob.java | 2 - ...RefreshUnidentifiedDeliveryAbilityJob.java | 103 ------------------ 10 files changed, 22 insertions(+), 158 deletions(-) delete mode 100644 src/org/thoughtcrime/securesms/jobs/RefreshUnidentifiedDeliveryAbilityJob.java diff --git a/src/org/thoughtcrime/securesms/ApplicationContext.java b/src/org/thoughtcrime/securesms/ApplicationContext.java index bae68728e1..7ab5714a75 100644 --- a/src/org/thoughtcrime/securesms/ApplicationContext.java +++ b/src/org/thoughtcrime/securesms/ApplicationContext.java @@ -37,28 +37,21 @@ import org.signal.aesgcmprovider.AesGcmProvider; import org.signal.ringrtc.CallConnectionFactory; import org.thoughtcrime.securesms.components.TypingStatusRepository; import org.thoughtcrime.securesms.components.TypingStatusSender; -import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.dependencies.ApplicationDependencyProvider; import org.thoughtcrime.securesms.gcm.FcmJobService; import org.thoughtcrime.securesms.insights.InsightsOptOut; import org.thoughtcrime.securesms.jobmanager.JobManager; -import org.thoughtcrime.securesms.jobmanager.JobMigrator; -import org.thoughtcrime.securesms.jobmanager.impl.JsonDataSerializer; import org.thoughtcrime.securesms.jobs.CreateSignedPreKeyJob; -import org.thoughtcrime.securesms.jobs.FastJobStorage; import org.thoughtcrime.securesms.jobs.FcmRefreshJob; -import org.thoughtcrime.securesms.jobs.JobManagerFactories; import org.thoughtcrime.securesms.jobs.MultiDeviceContactUpdateJob; import org.thoughtcrime.securesms.jobs.PushNotificationReceiveJob; -import org.thoughtcrime.securesms.jobs.RefreshUnidentifiedDeliveryAbilityJob; import org.thoughtcrime.securesms.logging.AndroidLogger; import org.thoughtcrime.securesms.logging.CustomSignalProtocolLogger; import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.logging.PersistentLogger; import org.thoughtcrime.securesms.logging.UncaughtExceptionLogger; -import org.thoughtcrime.securesms.mediasend.LegacyCameraModels; import org.thoughtcrime.securesms.mediasend.camerax.CameraXUtil; import org.thoughtcrime.securesms.migrations.ApplicationMigrations; import org.thoughtcrime.securesms.notifications.MessageNotifier; @@ -76,7 +69,6 @@ import org.thoughtcrime.securesms.service.RotateSenderCertificateListener; import org.thoughtcrime.securesms.service.RotateSignedPreKeyListener; import org.thoughtcrime.securesms.service.UpdateApkRefreshListener; import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.thoughtcrime.securesms.util.VersionTracker; import org.thoughtcrime.securesms.util.dynamiclanguage.DynamicLanguageContextWrapper; import org.webrtc.voiceengine.WebRtcAudioManager; import org.webrtc.voiceengine.WebRtcAudioUtils; @@ -133,7 +125,6 @@ public class ApplicationContext extends MultiDexApplication implements DefaultLi initializeCircumvention(); initializeRingRtc(); initializePendingMessages(); - initializeUnidentifiedDeliveryAbilityRefresh(); initializeBlobProvider(); initializeCameraX(); NotificationChannels.create(this); @@ -365,12 +356,6 @@ public class ApplicationContext extends MultiDexApplication implements DefaultLi } } - private void initializeUnidentifiedDeliveryAbilityRefresh() { - if (TextSecurePreferences.isMultiDevice(this) && !TextSecurePreferences.isUnidentifiedDeliveryEnabled(this)) { - ApplicationDependencies.getJobManager().add(new RefreshUnidentifiedDeliveryAbilityJob()); - } - } - private void initializeBlobProvider() { AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> { BlobProvider.getInstance().onSessionStart(this); diff --git a/src/org/thoughtcrime/securesms/DeviceListFragment.java b/src/org/thoughtcrime/securesms/DeviceListFragment.java index f3638b7bef..f201a787f4 100644 --- a/src/org/thoughtcrime/securesms/DeviceListFragment.java +++ b/src/org/thoughtcrime/securesms/DeviceListFragment.java @@ -1,5 +1,6 @@ package org.thoughtcrime.securesms; +import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.content.DialogInterface; @@ -13,7 +14,6 @@ import androidx.appcompat.app.AlertDialog; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.devicelist.Device; -import org.thoughtcrime.securesms.jobs.RefreshUnidentifiedDeliveryAbilityJob; import org.thoughtcrime.securesms.logging.Log; import android.view.LayoutInflater; import android.view.View; @@ -162,6 +162,7 @@ public class DeviceListFragment extends ListFragment builder.show(); } + @SuppressLint("StaticFieldLeak") private void handleDisconnectDevice(final long deviceId) { new ProgressDialogAsyncTask(getActivity(), R.string.DeviceListActivity_unlinking_device_no_ellipsis, @@ -171,7 +172,6 @@ public class DeviceListFragment extends ListFragment protected Void doInBackground(Void... params) { try { accountManager.removeDevice(deviceId); - ApplicationDependencies.getJobManager().add(new RefreshUnidentifiedDeliveryAbilityJob()); } catch (IOException e) { Log.w(TAG, e); Toast.makeText(getActivity(), R.string.DeviceListActivity_network_failed, Toast.LENGTH_LONG).show(); diff --git a/src/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java b/src/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java index 3e70430219..611abfeda4 100644 --- a/src/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java +++ b/src/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java @@ -40,11 +40,6 @@ public class UnidentifiedAccessUtil { public static Optional getAccessFor(@NonNull Context context, @NonNull Recipient recipient) { - if (!TextSecurePreferences.isUnidentifiedDeliveryEnabled(context)) { - Log.i(TAG, "Unidentified delivery is disabled. [other]"); - return Optional.absent(); - } - try { byte[] theirUnidentifiedAccessKey = getTargetUnidentifiedAccessKey(recipient); byte[] ourUnidentifiedAccessKey = getSelfUnidentifiedAccessKey(context); @@ -79,11 +74,6 @@ public class UnidentifiedAccessUtil { } public static Optional getAccessForSync(@NonNull Context context) { - if (!TextSecurePreferences.isUnidentifiedDeliveryEnabled(context)) { - Log.i(TAG, "Unidentified delivery is disabled. [self]"); - return Optional.absent(); - } - try { byte[] ourUnidentifiedAccessKey = getSelfUnidentifiedAccessKey(context); byte[] ourUnidentifiedAccessCertificate = Recipient.self().isUuidSupported() ? TextSecurePreferences.getUnidentifiedAccessCertificate(context) diff --git a/src/org/thoughtcrime/securesms/jobmanager/workmanager/WorkManagerFactoryMappings.java b/src/org/thoughtcrime/securesms/jobmanager/workmanager/WorkManagerFactoryMappings.java index 8bdc8caa78..37497602d8 100644 --- a/src/org/thoughtcrime/securesms/jobmanager/workmanager/WorkManagerFactoryMappings.java +++ b/src/org/thoughtcrime/securesms/jobmanager/workmanager/WorkManagerFactoryMappings.java @@ -30,7 +30,6 @@ import org.thoughtcrime.securesms.jobs.PushNotificationReceiveJob; import org.thoughtcrime.securesms.jobs.PushTextSendJob; import org.thoughtcrime.securesms.jobs.RefreshAttributesJob; import org.thoughtcrime.securesms.jobs.RefreshPreKeysJob; -import org.thoughtcrime.securesms.jobs.RefreshUnidentifiedDeliveryAbilityJob; import org.thoughtcrime.securesms.jobs.RequestGroupInfoJob; import org.thoughtcrime.securesms.jobs.RetrieveProfileAvatarJob; import org.thoughtcrime.securesms.jobs.RetrieveProfileJob; @@ -80,7 +79,7 @@ public class WorkManagerFactoryMappings { put(PushTextSendJob.class.getName(), PushTextSendJob.KEY); put(RefreshAttributesJob.class.getName(), RefreshAttributesJob.KEY); put(RefreshPreKeysJob.class.getName(), RefreshPreKeysJob.KEY); - put(RefreshUnidentifiedDeliveryAbilityJob.class.getName(), RefreshUnidentifiedDeliveryAbilityJob.KEY); + put("RefreshUnidentifiedDeliveryAbilityJob", FailingJob.KEY); put(RequestGroupInfoJob.class.getName(), RequestGroupInfoJob.KEY); put(RetrieveProfileAvatarJob.class.getName(), RetrieveProfileAvatarJob.KEY); put(RetrieveProfileJob.class.getName(), RetrieveProfileJob.KEY); diff --git a/src/org/thoughtcrime/securesms/jobs/JobManagerFactories.java b/src/org/thoughtcrime/securesms/jobs/JobManagerFactories.java index 9ba1d777c8..8902eb5fd1 100644 --- a/src/org/thoughtcrime/securesms/jobs/JobManagerFactories.java +++ b/src/org/thoughtcrime/securesms/jobs/JobManagerFactories.java @@ -67,7 +67,6 @@ public final class JobManagerFactories { put(RefreshAttributesJob.KEY, new RefreshAttributesJob.Factory()); put(RefreshOwnProfileJob.KEY, new RefreshOwnProfileJob.Factory()); put(RefreshPreKeysJob.KEY, new RefreshPreKeysJob.Factory()); - put(RefreshUnidentifiedDeliveryAbilityJob.KEY, new RefreshUnidentifiedDeliveryAbilityJob.Factory()); put(RequestGroupInfoJob.KEY, new RequestGroupInfoJob.Factory()); put(RetrieveProfileAvatarJob.KEY, new RetrieveProfileAvatarJob.Factory()); put(RetrieveProfileJob.KEY, new RetrieveProfileJob.Factory()); @@ -99,6 +98,7 @@ public final class JobManagerFactories { put("PushContentReceiveJob", new FailingJob.Factory()); put("AttachmentUploadJob", new FailingJob.Factory()); put("MmsSendJob", new FailingJob.Factory()); + put("RefreshUnidentifiedDeliveryAbilityJob", new FailingJob.Factory()); }}; } diff --git a/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java b/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java index 57876da4cc..54cd4b7753 100644 --- a/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java +++ b/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java @@ -632,7 +632,6 @@ public class PushDecryptJob extends BaseJob { { if (message.isContactsRequest()) { ApplicationDependencies.getJobManager().add(new MultiDeviceContactUpdateJob(true)); - ApplicationDependencies.getJobManager().add(new RefreshUnidentifiedDeliveryAbilityJob()); } if (message.isGroupsRequest()) { diff --git a/src/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java b/src/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java index d5af6e1d34..ea15ed963a 100644 --- a/src/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java +++ b/src/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java @@ -133,17 +133,15 @@ public class PushMediaSendJob extends PushSendJob { DatabaseFactory.getMmsSmsDatabase(context).incrementReadReceiptCount(id, System.currentTimeMillis()); } - if (TextSecurePreferences.isUnidentifiedDeliveryEnabled(context)) { - if (unidentified && accessMode == UnidentifiedAccessMode.UNKNOWN && profileKey == null) { - log(TAG, "Marking recipient as UD-unrestricted following a UD send."); - DatabaseFactory.getRecipientDatabase(context).setUnidentifiedAccessMode(recipient.getId(), UnidentifiedAccessMode.UNRESTRICTED); - } else if (unidentified && accessMode == UnidentifiedAccessMode.UNKNOWN) { - log(TAG, "Marking recipient as UD-enabled following a UD send."); - DatabaseFactory.getRecipientDatabase(context).setUnidentifiedAccessMode(recipient.getId(), UnidentifiedAccessMode.ENABLED); - } else if (!unidentified && accessMode != UnidentifiedAccessMode.DISABLED) { - log(TAG, "Marking recipient as UD-disabled following a non-UD send."); - DatabaseFactory.getRecipientDatabase(context).setUnidentifiedAccessMode(recipient.getId(), UnidentifiedAccessMode.DISABLED); - } + if (unidentified && accessMode == UnidentifiedAccessMode.UNKNOWN && profileKey == null) { + log(TAG, "Marking recipient as UD-unrestricted following a UD send."); + DatabaseFactory.getRecipientDatabase(context).setUnidentifiedAccessMode(recipient.getId(), UnidentifiedAccessMode.UNRESTRICTED); + } else if (unidentified && accessMode == UnidentifiedAccessMode.UNKNOWN) { + log(TAG, "Marking recipient as UD-enabled following a UD send."); + DatabaseFactory.getRecipientDatabase(context).setUnidentifiedAccessMode(recipient.getId(), UnidentifiedAccessMode.ENABLED); + } else if (!unidentified && accessMode != UnidentifiedAccessMode.DISABLED) { + log(TAG, "Marking recipient as UD-disabled following a non-UD send."); + DatabaseFactory.getRecipientDatabase(context).setUnidentifiedAccessMode(recipient.getId(), UnidentifiedAccessMode.DISABLED); } if (message.getExpiresIn() > 0 && !message.isExpirationUpdate()) { diff --git a/src/org/thoughtcrime/securesms/jobs/PushTextSendJob.java b/src/org/thoughtcrime/securesms/jobs/PushTextSendJob.java index 8bececeb85..0b4d518eb9 100644 --- a/src/org/thoughtcrime/securesms/jobs/PushTextSendJob.java +++ b/src/org/thoughtcrime/securesms/jobs/PushTextSendJob.java @@ -95,17 +95,15 @@ public class PushTextSendJob extends PushSendJob { DatabaseFactory.getMmsSmsDatabase(context).incrementReadReceiptCount(id, System.currentTimeMillis()); } - if (TextSecurePreferences.isUnidentifiedDeliveryEnabled(context)) { - if (unidentified && accessMode == UnidentifiedAccessMode.UNKNOWN && profileKey == null) { - log(TAG, "Marking recipient as UD-unrestricted following a UD send."); - DatabaseFactory.getRecipientDatabase(context).setUnidentifiedAccessMode(recipient.getId(), UnidentifiedAccessMode.UNRESTRICTED); - } else if (unidentified && accessMode == UnidentifiedAccessMode.UNKNOWN) { - log(TAG, "Marking recipient as UD-enabled following a UD send."); - DatabaseFactory.getRecipientDatabase(context).setUnidentifiedAccessMode(recipient.getId(), UnidentifiedAccessMode.ENABLED); - } else if (!unidentified && accessMode != UnidentifiedAccessMode.DISABLED) { - log(TAG, "Marking recipient as UD-disabled following a non-UD send."); - DatabaseFactory.getRecipientDatabase(context).setUnidentifiedAccessMode(recipient.getId(), UnidentifiedAccessMode.DISABLED); - } + if (unidentified && accessMode == UnidentifiedAccessMode.UNKNOWN && profileKey == null) { + log(TAG, "Marking recipient as UD-unrestricted following a UD send."); + DatabaseFactory.getRecipientDatabase(context).setUnidentifiedAccessMode(recipient.getId(), UnidentifiedAccessMode.UNRESTRICTED); + } else if (unidentified && accessMode == UnidentifiedAccessMode.UNKNOWN) { + log(TAG, "Marking recipient as UD-enabled following a UD send."); + DatabaseFactory.getRecipientDatabase(context).setUnidentifiedAccessMode(recipient.getId(), UnidentifiedAccessMode.ENABLED); + } else if (!unidentified && accessMode != UnidentifiedAccessMode.DISABLED) { + log(TAG, "Marking recipient as UD-disabled following a non-UD send."); + DatabaseFactory.getRecipientDatabase(context).setUnidentifiedAccessMode(recipient.getId(), UnidentifiedAccessMode.DISABLED); } if (record.getExpiresIn() > 0) { diff --git a/src/org/thoughtcrime/securesms/jobs/RefreshAttributesJob.java b/src/org/thoughtcrime/securesms/jobs/RefreshAttributesJob.java index 081bec3c46..f4bb2b5024 100644 --- a/src/org/thoughtcrime/securesms/jobs/RefreshAttributesJob.java +++ b/src/org/thoughtcrime/securesms/jobs/RefreshAttributesJob.java @@ -54,8 +54,6 @@ public class RefreshAttributesJob extends BaseJob { SignalServiceAccountManager signalAccountManager = ApplicationDependencies.getSignalServiceAccountManager(); signalAccountManager.setAccountAttributes(null, registrationId, fetchesMessages, pin, unidentifiedAccessKey, universalUnidentifiedAccess); - - ApplicationDependencies.getJobManager().add(new RefreshUnidentifiedDeliveryAbilityJob()); } @Override diff --git a/src/org/thoughtcrime/securesms/jobs/RefreshUnidentifiedDeliveryAbilityJob.java b/src/org/thoughtcrime/securesms/jobs/RefreshUnidentifiedDeliveryAbilityJob.java deleted file mode 100644 index 988412ea35..0000000000 --- a/src/org/thoughtcrime/securesms/jobs/RefreshUnidentifiedDeliveryAbilityJob.java +++ /dev/null @@ -1,103 +0,0 @@ -package org.thoughtcrime.securesms.jobs; - -import androidx.annotation.NonNull; - -import org.thoughtcrime.securesms.crypto.ProfileKeyUtil; -import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; -import org.thoughtcrime.securesms.jobmanager.Job; -import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; -import org.thoughtcrime.securesms.logging.Log; -import org.thoughtcrime.securesms.service.IncomingMessageObserver; -import org.thoughtcrime.securesms.util.Base64; -import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.whispersystems.libsignal.util.guava.Optional; -import org.whispersystems.signalservice.api.SignalServiceMessagePipe; -import org.whispersystems.signalservice.api.SignalServiceMessageReceiver; -import org.whispersystems.signalservice.api.crypto.ProfileCipher; -import org.whispersystems.signalservice.api.profiles.SignalServiceProfile; -import org.whispersystems.signalservice.api.push.SignalServiceAddress; -import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException; - -import java.io.IOException; - -public class RefreshUnidentifiedDeliveryAbilityJob extends BaseJob { - - public static final String KEY = "RefreshUnidentifiedDeliveryAbilityJob"; - - private static final String TAG = RefreshUnidentifiedDeliveryAbilityJob.class.getSimpleName(); - - public RefreshUnidentifiedDeliveryAbilityJob() { - this(new Job.Parameters.Builder() - .addConstraint(NetworkConstraint.KEY) - .setMaxAttempts(10) - .build()); - } - - private RefreshUnidentifiedDeliveryAbilityJob(@NonNull Job.Parameters parameters) { - super(parameters); - } - - @Override - public @NonNull Data serialize() { - return Data.EMPTY; - } - - @Override - public @NonNull String getFactoryKey() { - return KEY; - } - - @Override - public void onRun() throws Exception { - byte[] profileKey = ProfileKeyUtil.getProfileKey(context); - SignalServiceAddress address = new SignalServiceAddress(Optional.of(TextSecurePreferences.getLocalUuid(context)), Optional.of(TextSecurePreferences.getLocalNumber(context))); - SignalServiceProfile profile = retrieveProfile(address); - - boolean enabled = profile.getUnidentifiedAccess() != null && isValidVerifier(profileKey, profile.getUnidentifiedAccess()); - - TextSecurePreferences.setIsUnidentifiedDeliveryEnabled(context, enabled); - Log.i(TAG, "Set UD status to: " + enabled); - } - - @Override - public void onCanceled() { - } - - @Override - protected boolean onShouldRetry(@NonNull Exception exception) { - return exception instanceof PushNetworkException; - } - - private SignalServiceProfile retrieveProfile(@NonNull SignalServiceAddress address) throws IOException { - SignalServiceMessageReceiver receiver = ApplicationDependencies.getSignalServiceMessageReceiver(); - SignalServiceMessagePipe pipe = IncomingMessageObserver.getPipe(); - - if (pipe != null) { - try { - return pipe.getProfile(address, Optional.absent()); - } catch (IOException e) { - Log.w(TAG, e); - } - } - - return receiver.retrieveProfile(address, Optional.absent()); - } - - private boolean isValidVerifier(@NonNull byte[] profileKey, @NonNull String verifier) { - ProfileCipher profileCipher = new ProfileCipher(profileKey); - try { - return profileCipher.verifyUnidentifiedAccess(Base64.decode(verifier)); - } catch (IOException e) { - Log.w(TAG, e); - return false; - } - } - - public static class Factory implements Job.Factory { - @Override - public @NonNull RefreshUnidentifiedDeliveryAbilityJob create(@NonNull Parameters parameters, @NonNull Data data) { - return new RefreshUnidentifiedDeliveryAbilityJob(parameters); - } - } -}