diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 182e115713..ccced9814e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -471,11 +471,6 @@ - - - - - diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index 33f52d3a74..2d48567afc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -52,7 +52,6 @@ import org.thoughtcrime.securesms.jobs.FastJobStorage; import org.thoughtcrime.securesms.jobs.JobManagerFactories; import org.thoughtcrime.securesms.jobs.PushContentReceiveJob; 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; @@ -83,7 +82,6 @@ import org.thoughtcrime.securesms.service.ExpiringMessageManager; import org.thoughtcrime.securesms.service.IncomingMessageObserver; import org.thoughtcrime.securesms.service.KeyCachingService; import org.thoughtcrime.securesms.service.LocalBackupListener; -import org.thoughtcrime.securesms.service.RotateSenderCertificateListener; import org.thoughtcrime.securesms.service.UpdateApkRefreshListener; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; @@ -225,7 +223,6 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc initializePeriodicTasks(); initializeWebRtc(); initializePendingMessages(); - initializeUnidentifiedDeliveryAbilityRefresh(); initializeBlobProvider(); } @@ -374,7 +371,6 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc private void initializePeriodicTasks() { LocalBackupListener.schedule(this); - RotateSenderCertificateListener.schedule(this); BackgroundPollWorker.schedulePeriodic(this); // Loki if (BuildConfig.PLAY_STORE_DISABLED) { @@ -425,12 +421,6 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc } } - private void initializeUnidentifiedDeliveryAbilityRefresh() { - if (TextSecurePreferences.isMultiDevice(this) && !TextSecurePreferences.isUnidentifiedDeliveryEnabled(this)) { - jobManager.add(new RefreshUnidentifiedDeliveryAbilityJob()); - } - } - private void initializeBlobProvider() { AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> { BlobProvider.getInstance().onSessionStart(this); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java index d343c2a4c1..3b4f95802c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java @@ -227,7 +227,9 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper { if (oldVersion < lokiV19_REFACTOR2) { deleteJobRecords(db, "RefreshAttributesJob", - "RotateProfileKeyJob" + "RotateProfileKeyJob", + "RefreshUnidentifiedDeliveryAbilityJob", + "RotateCertificateJob" ); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/dependencies/SignalCommunicationModule.java b/app/src/main/java/org/thoughtcrime/securesms/dependencies/SignalCommunicationModule.java index 9f6f51044b..e4d58c761d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/SignalCommunicationModule.java +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/SignalCommunicationModule.java @@ -22,10 +22,8 @@ import org.thoughtcrime.securesms.jobs.PushGroupUpdateJob; import org.thoughtcrime.securesms.jobs.PushMediaSendJob; import org.thoughtcrime.securesms.jobs.PushNotificationReceiveJob; import org.thoughtcrime.securesms.jobs.PushTextSendJob; -import org.thoughtcrime.securesms.jobs.RefreshUnidentifiedDeliveryAbilityJob; import org.thoughtcrime.securesms.jobs.RequestGroupInfoJob; import org.thoughtcrime.securesms.jobs.RetrieveProfileAvatarJob; -import org.thoughtcrime.securesms.jobs.RotateCertificateJob; import org.thoughtcrime.securesms.jobs.SendDeliveryReceiptJob; import org.thoughtcrime.securesms.jobs.SendReadReceiptJob; import org.thoughtcrime.securesms.jobs.StickerDownloadJob; @@ -59,9 +57,7 @@ import network.loki.messenger.BuildConfig; RetrieveProfileAvatarJob.class, SendReadReceiptJob.class, AppProtectionPreferenceFragment.class, - RotateCertificateJob.class, SendDeliveryReceiptJob.class, - RefreshUnidentifiedDeliveryAbilityJob.class, TypingSendJob.class, AttachmentUploadJob.class, PushDecryptJob.class, @@ -88,17 +84,6 @@ public class SignalCommunicationModule { } - @Provides - synchronized SignalServiceAccountManager provideSignalAccountManager() { - if (this.accountManager == null) { - this.accountManager = new SignalServiceAccountManager(networkAccess.getConfiguration(context), - new DynamicCredentialsProvider(context), - BuildConfig.USER_AGENT); - } - - return this.accountManager; - } - @Provides public synchronized SignalServiceMessageSender provideSignalMessageSender() { if (this.messageSender == null) { 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 3cc50b068d..894617587f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java @@ -44,10 +44,8 @@ public final class JobManagerFactories { put(PushMediaSendJob.KEY, new PushMediaSendJob.Factory()); put(PushNotificationReceiveJob.KEY, new PushNotificationReceiveJob.Factory()); put(PushTextSendJob.KEY, new PushTextSendJob.Factory()); - put(RefreshUnidentifiedDeliveryAbilityJob.KEY, new RefreshUnidentifiedDeliveryAbilityJob.Factory()); put(RequestGroupInfoJob.KEY, new RequestGroupInfoJob.Factory()); put(RetrieveProfileAvatarJob.KEY, new RetrieveProfileAvatarJob.Factory(application)); - put(RotateCertificateJob.KEY, new RotateCertificateJob.Factory()); put(SendDeliveryReceiptJob.KEY, new SendDeliveryReceiptJob.Factory()); put(SendReadReceiptJob.KEY, new SendReadReceiptJob.Factory()); put(SmsReceiveJob.KEY, new SmsReceiveJob.Factory()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshUnidentifiedDeliveryAbilityJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshUnidentifiedDeliveryAbilityJob.java deleted file mode 100644 index 56376fe0e5..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshUnidentifiedDeliveryAbilityJob.java +++ /dev/null @@ -1,105 +0,0 @@ -package org.thoughtcrime.securesms.jobs; - -import androidx.annotation.NonNull; - -import org.thoughtcrime.securesms.crypto.ProfileKeyUtil; -import org.thoughtcrime.securesms.dependencies.InjectableType; -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.session.libsignal.libsignal.util.guava.Optional; -import org.session.libsignal.service.api.SignalServiceMessagePipe; -import org.session.libsignal.service.api.SignalServiceMessageReceiver; -import org.session.libsignal.service.api.crypto.ProfileCipher; -import org.session.libsignal.service.api.profiles.SignalServiceProfile; -import org.session.libsignal.service.api.push.SignalServiceAddress; -import org.session.libsignal.service.api.push.exceptions.PushNetworkException; - -import java.io.IOException; - -import javax.inject.Inject; - -public class RefreshUnidentifiedDeliveryAbilityJob extends BaseJob implements InjectableType { - - public static final String KEY = "RefreshUnidentifiedDeliveryAbilityJob"; - - private static final String TAG = RefreshUnidentifiedDeliveryAbilityJob.class.getSimpleName(); - - @Inject SignalServiceMessageReceiver receiver; - - 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); - SignalServiceProfile profile = retrieveProfile(TextSecurePreferences.getLocalNumber(context)); - - 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 String number) throws IOException { - SignalServiceMessagePipe pipe = IncomingMessageObserver.getPipe(); - - if (pipe != null) { - try { - return pipe.getProfile(new SignalServiceAddress(number), Optional.absent()); - } catch (IOException e) { - Log.w(TAG, e); - } - } - - return receiver.retrieveProfile(new SignalServiceAddress(number), 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); - } - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RotateCertificateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RotateCertificateJob.java deleted file mode 100644 index 911e87b27e..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RotateCertificateJob.java +++ /dev/null @@ -1,83 +0,0 @@ -package org.thoughtcrime.securesms.jobs; - - -import android.content.Context; -import androidx.annotation.NonNull; - -import org.thoughtcrime.securesms.dependencies.InjectableType; -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.session.libsignal.service.api.SignalServiceAccountManager; -import org.session.libsignal.service.api.push.exceptions.PushNetworkException; - -import java.io.IOException; -import java.util.concurrent.TimeUnit; - -import javax.inject.Inject; - -@SuppressWarnings("WeakerAccess") -public class RotateCertificateJob extends BaseJob implements InjectableType { - - public static final String KEY = "RotateCertificateJob"; - - private static final String TAG = RotateCertificateJob.class.getSimpleName(); - - @Inject SignalServiceAccountManager accountManager; - - public RotateCertificateJob(Context context) { - this(new Job.Parameters.Builder() - .setQueue("__ROTATE_SENDER_CERTIFICATE__") - .addConstraint(NetworkConstraint.KEY) - .setLifespan(TimeUnit.DAYS.toMillis(1)) - .setMaxAttempts(Parameters.UNLIMITED) - .build()); - setContext(context); - } - - private RotateCertificateJob(@NonNull Job.Parameters parameters) { - super(parameters); - } - - @Override - public @NonNull Data serialize() { - return Data.EMPTY; - } - - @Override - public @NonNull String getFactoryKey() { - return KEY; - } - - @Override - public void onAdded() {} - - @Override - public void onRun() throws IOException { - // Loki - Do nothing - /* - synchronized (RotateCertificateJob.class) { - byte[] certificate = accountManager.getSenderCertificate(); - TextSecurePreferences.setUnidentifiedAccessCertificate(context, certificate); - } - */ - } - - @Override - public boolean onShouldRetry(@NonNull Exception e) { - return e instanceof PushNetworkException; - } - - @Override - public void onCanceled() { - Log.w(TAG, "Failed to rotate sender certificate!"); - } - - public static final class Factory implements Job.Factory { - @Override - public @NonNull RotateCertificateJob create(@NonNull Parameters parameters, @NonNull Data data) { - return new RotateCertificateJob(parameters); - } - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/JoinPublicChatActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/JoinPublicChatActivity.kt index c6eb0d25e7..eb03b219ea 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/JoinPublicChatActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/JoinPublicChatActivity.kt @@ -20,6 +20,7 @@ import kotlinx.coroutines.withContext import network.loki.messenger.R import org.thoughtcrime.securesms.BaseActionBarActivity import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity +import org.thoughtcrime.securesms.logging.Log import org.thoughtcrime.securesms.loki.fragments.ScanQRCodeWrapperFragment import org.thoughtcrime.securesms.loki.fragments.ScanQRCodeWrapperFragmentDelegate import org.thoughtcrime.securesms.loki.utilities.OpenGroupUtilities @@ -73,6 +74,7 @@ class JoinPublicChatActivity : PassphraseRequiredActionBarActivity(), ScanQRCode try { OpenGroupUtilities.addGroup(this@JoinPublicChatActivity, url, channel) } catch (e: Exception) { + Log.e("JoinPublicChatActivity", "Fialed to join open group.", e) withContext(Dispatchers.Main) { hideLoader() Toast.makeText(this@JoinPublicChatActivity, R.string.activity_join_public_chat_error, Toast.LENGTH_SHORT).show() diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/RotateSenderCertificateListener.java b/app/src/main/java/org/thoughtcrime/securesms/service/RotateSenderCertificateListener.java deleted file mode 100644 index d4d0c560a3..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/service/RotateSenderCertificateListener.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.thoughtcrime.securesms.service; - - -import android.content.Context; -import android.content.Intent; - -import org.thoughtcrime.securesms.ApplicationContext; -import org.thoughtcrime.securesms.jobs.RotateCertificateJob; -import org.thoughtcrime.securesms.util.TextSecurePreferences; - -import java.util.concurrent.TimeUnit; - -public class RotateSenderCertificateListener extends PersistentAlarmManagerListener { - - private static final long INTERVAL = TimeUnit.DAYS.toMillis(1); - - @Override - protected long getNextScheduledExecutionTime(Context context) { - return TextSecurePreferences.getUnidentifiedAccessCertificateRotationTime(context); - } - - @Override - protected long onAlarm(Context context, long scheduledTime) { - ApplicationContext.getInstance(context) - .getJobManager() - .add(new RotateCertificateJob(context)); - - long nextTime = System.currentTimeMillis() + INTERVAL; - TextSecurePreferences.setUnidentifiedAccessCertificateRotationTime(context, nextTime); - - return nextTime; - } - - public static void schedule(Context context) { - new RotateSenderCertificateListener().onReceive(context, new Intent()); - } - -}