Skip to content

Commit

Permalink
Ignore contacts that don't have a phone number.
Browse files Browse the repository at this point in the history
  • Loading branch information
greyson-signal committed Jun 1, 2020
1 parent c39751f commit 989b071
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 3 deletions.
Expand Up @@ -18,6 +18,7 @@
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.SetUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
Expand Down Expand Up @@ -231,7 +232,7 @@ public final class StorageSyncHelper {
public static @NonNull MergeResult resolveConflict(@NonNull Collection<SignalStorageRecord> remoteOnlyRecords,
@NonNull Collection<SignalStorageRecord> localOnlyRecords)
{
List<SignalContactRecord> remoteOnlyContacts = Stream.of(remoteOnlyRecords).filter(r -> r.getContact().isPresent()).map(r -> r.getContact().get()).toList();
List<SignalContactRecord> remoteOnlyContacts = Stream.of(remoteOnlyRecords).filter(r -> r.getContact().isPresent() && isValidContact(r.getContact().get())).map(r -> r.getContact().get()).toList();
List<SignalContactRecord> localOnlyContacts = Stream.of(localOnlyRecords).filter(r -> r.getContact().isPresent()).map(r -> r.getContact().get()).toList();

List<SignalGroupV1Record> remoteOnlyGroupV1 = Stream.of(remoteOnlyRecords).filter(r -> r.getGroupV1().isPresent()).map(r -> r.getGroupV1().get()).toList();
Expand All @@ -240,7 +241,7 @@ public final class StorageSyncHelper {
List<SignalGroupV2Record> remoteOnlyGroupV2 = Stream.of(remoteOnlyRecords).filter(r -> r.getGroupV2().isPresent()).map(r -> r.getGroupV2().get()).toList();
List<SignalGroupV2Record> localOnlyGroupV2 = Stream.of(localOnlyRecords).filter(r -> r.getGroupV2().isPresent()).map(r -> r.getGroupV2().get()).toList();

List<SignalStorageRecord> remoteOnlyUnknowns = Stream.of(remoteOnlyRecords).filter(SignalStorageRecord::isUnknown).toList();
List<SignalStorageRecord> remoteOnlyUnknowns = Stream.of(remoteOnlyRecords).filter(r -> r.isUnknown() || (r.getContact().isPresent() && !isValidContact(r.getContact().get()))).toList();
List<SignalStorageRecord> localOnlyUnknowns = Stream.of(localOnlyRecords).filter(SignalStorageRecord::isUnknown).toList();

List<SignalAccountRecord> remoteOnlyAccount = Stream.of(remoteOnlyRecords).filter(r -> r.getAccount().isPresent()).map(r -> r.getAccount().get()).toList();
Expand Down Expand Up @@ -440,6 +441,10 @@ public static void scheduleRoutineSync() {
}
}

private static boolean isValidContact(@NonNull SignalContactRecord contact) {
return FeatureFlags.uuids() || contact.getAddress().getNumber().isPresent();
}

public static final class KeyDifferenceResult {
private final List<StorageId> remoteOnlyKeys;
private final List<StorageId> localOnlyKeys;
Expand Down
Expand Up @@ -15,6 +15,7 @@
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.storage.StorageSyncHelper.KeyDifferenceResult;
import org.thoughtcrime.securesms.storage.StorageSyncHelper.MergeResult;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.whispersystems.libsignal.util.guava.Optional;
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
import org.whispersystems.signalservice.api.storage.SignalAccountRecord;
Expand Down Expand Up @@ -47,7 +48,7 @@
import static org.thoughtcrime.securesms.testutil.TestHelpers.setOf;

@RunWith(PowerMockRunner.class)
@PrepareForTest({ Recipient.class })
@PrepareForTest({ Recipient.class, FeatureFlags.class})
public final class StorageSyncHelperTest {

private static final UUID UUID_A = UuidUtil.parseOrThrow("ebef429e-695e-4f51-bcc4-526a60ac68c7");
Expand Down Expand Up @@ -76,6 +77,7 @@ public void setup() {
mockStatic(Recipient.class);
when(Recipient.self()).thenReturn(SELF);
Log.initialize(new Log.Logger[0]);
mockStatic(FeatureFlags.class);
}

@Test
Expand Down Expand Up @@ -242,6 +244,8 @@ public void resolveConflict_unknowns() {

@Test
public void resolveConflict_complex() {
when(FeatureFlags.uuids()).thenReturn(true);

SignalContactRecord remote1 = contact(1, UUID_A, null, "a");
SignalContactRecord local1 = contact(2, UUID_A, E164_A, "a");

Expand Down

0 comments on commit 989b071

Please sign in to comment.