Remove UUIDs from GV1 membership lists.

This commit is contained in:
Greyson Parrelli
2020-07-27 16:37:08 -04:00
parent 1ab61beeb9
commit 5c110ca359
10 changed files with 60 additions and 59 deletions

View File

@@ -36,6 +36,7 @@ import org.whispersystems.signalservice.internal.push.SignalServiceProtos.GroupC
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@@ -122,12 +123,15 @@ final class GroupManagerV1 {
RecipientId groupRecipientId = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromGroupId(groupId);
Recipient groupRecipient = Recipient.resolved(groupRecipientId);
List<GroupContext.Member> uuidMembers = new LinkedList<>();
List<String> e164Members = new LinkedList<>();
List<GroupContext.Member> uuidMembers = new ArrayList<>(members.size());
List<String> e164Members = new ArrayList<>(members.size());
for (RecipientId member : members) {
Recipient recipient = Recipient.resolved(member);
uuidMembers.add(GroupV1MessageProcessor.createMember(RecipientUtil.toSignalServiceAddress(context, recipient)));
if (recipient.hasE164()) {
e164Members.add(recipient.requireE164());
uuidMembers.add(GroupV1MessageProcessor.createMember(recipient.requireE164()));
}
}
GroupContext.Builder groupContextBuilder = GroupContext.newBuilder()
@@ -135,7 +139,9 @@ final class GroupManagerV1 {
.setType(GroupContext.Type.UPDATE)
.addAllMembersE164(e164Members)
.addAllMembers(uuidMembers);
if (groupName != null) groupContextBuilder.setName(groupName);
GroupContext groupContext = groupContextBuilder.build();
if (avatar != null) {

View File

@@ -101,7 +101,7 @@ public final class GroupV1MessageProcessor {
if (group.getMembers().isPresent()) {
for (SignalServiceAddress member : group.getMembers().get()) {
members.add(Recipient.externalPush(context, member).getId());
members.add(Recipient.externalGV1Member(context, member).getId());
}
}
@@ -131,8 +131,10 @@ public final class GroupV1MessageProcessor {
Set<RecipientId> recordMembers = new HashSet<>(groupRecord.getMembers());
Set<RecipientId> messageMembers = new HashSet<>();
for (SignalServiceAddress messageMember : group.getMembers().get()) {
messageMembers.add(Recipient.externalPush(context, messageMember).getId());
if (group.getMembers().isPresent()) {
for (SignalServiceAddress messageMember : group.getMembers().get()) {
messageMembers.add(Recipient.externalGV1Member(context, messageMember).getId());
}
}
Set<RecipientId> addedMembers = new HashSet<>(messageMembers);
@@ -150,18 +152,19 @@ public final class GroupV1MessageProcessor {
database.updateMembers(id, new LinkedList<>(unionMembers));
builder.clearMembers();
builder.clearMembersE164();
for (RecipientId addedMember : addedMembers) {
Recipient recipient = Recipient.resolved(addedMember);
if (recipient.getE164().isPresent()) {
builder.addMembersE164(recipient.getE164().get());
builder.addMembersE164(recipient.requireE164());
builder.addMembers(createMember(recipient.requireE164()));
}
builder.addMembers(createMember(RecipientUtil.toSignalServiceAddress(context, recipient)));
}
} else {
builder.clearMembers();
builder.clearMembersE164();
}
if (missingMembers.size() > 0) {
@@ -287,6 +290,8 @@ public final class GroupV1MessageProcessor {
.map(a -> a.getNumber().get())
.toList());
builder.addAllMembers(Stream.of(group.getMembers().get())
.filter(address -> address.getNumber().isPresent())
.map(address -> address.getNumber().get())
.map(GroupV1MessageProcessor::createMember)
.toList());
}
@@ -294,17 +299,9 @@ public final class GroupV1MessageProcessor {
return builder;
}
public static GroupContext.Member createMember(SignalServiceAddress address) {
public static GroupContext.Member createMember(@NonNull String e164) {
GroupContext.Member.Builder member = GroupContext.Member.newBuilder();
if (address.getUuid().isPresent()) {
member.setUuid(address.getUuid().get().toString());
}
if (address.getNumber().isPresent()) {
member.setE164(address.getNumber().get());
}
member.setE164(e164);
return member.build();
}
}