Fix bug preventing adding and inviting by phone number.

This commit is contained in:
Cody Henthorne
2022-03-17 14:20:44 -04:00
parent 798f3a7b0e
commit 9d28caac00
15 changed files with 158 additions and 140 deletions

View File

@@ -132,6 +132,20 @@ public final class DecryptedGroupUtil {
return uuidList;
}
public static Set<UUID> bannedMembersToUuidSet(Collection<DecryptedBannedMember> membersList) {
Set<UUID> uuidSet = new HashSet<>(membersList.size());
for (DecryptedBannedMember member : membersList) {
UUID uuid = toUuid(member);
if (!UuidUtil.UNKNOWN_UUID.equals(uuid)) {
uuidSet.add(uuid);
}
}
return uuidSet;
}
public static UUID toUuid(DecryptedMember member) {
return toUuid(member.getUuid());
}
@@ -140,6 +154,10 @@ public final class DecryptedGroupUtil {
return toUuid(member.getUuid());
}
public static UUID toUuid(DecryptedBannedMember member) {
return toUuid(member.getUuid());
}
private static UUID toUuid(ByteString memberUuid) {
return UuidUtil.fromByteStringOrUnknown(memberUuid);
}

View File

@@ -160,10 +160,13 @@ public final class GroupsV2Operations {
return GroupChange.Actions.newBuilder().setModifyDescription(createModifyGroupDescriptionAction(description));
}
public GroupChange.Actions.Builder createModifyGroupMembershipChange(Set<GroupCandidate> membersToAdd, UUID selfUuid) {
public GroupChange.Actions.Builder createModifyGroupMembershipChange(Set<GroupCandidate> membersToAdd, Set<UUID> bannedMembers, UUID selfUuid) {
final GroupOperations groupOperations = forGroup(groupSecretParams);
GroupChange.Actions.Builder actions = createUnbanUuidsChange(membersToAdd.stream().map(GroupCandidate::getUuid).collect(Collectors.toSet()));
Set<UUID> membersToUnban = membersToAdd.stream().map(GroupCandidate::getUuid).filter(bannedMembers::contains).collect(Collectors.toSet());
GroupChange.Actions.Builder actions = membersToUnban.isEmpty() ? GroupChange.Actions.newBuilder()
: createUnbanUuidsChange(membersToUnban);
for (GroupCandidate credential : membersToAdd) {
Member.Role newMemberRole = Member.Role.DEFAULT;
@@ -479,7 +482,7 @@ public final class GroupsV2Operations {
* <p>
* Also, if you know it's version 0, do not verify because changes for version 0
* are not signed, but should be empty.
* @return {@link Optional#absent} if the epoch for the change is higher that this code can decrypt.
* @return {@link Optional#empty()} if the epoch for the change is higher that this code can decrypt.
*/
public Optional<DecryptedGroupChange> decryptChange(GroupChange groupChange, boolean verifySignature)
throws InvalidProtocolBufferException, VerificationFailedException, InvalidGroupStateException

View File

@@ -95,7 +95,7 @@ public final class GroupsV2Operations_decrypt_change_Test {
ProfileKey profileKey = newProfileKey();
GroupCandidate groupCandidate = groupCandidate(newMember, profileKey);
assertDecryption(groupOperations.createModifyGroupMembershipChange(Collections.singleton(groupCandidate), self)
assertDecryption(groupOperations.createModifyGroupMembershipChange(Collections.singleton(groupCandidate), Collections.emptySet(), self)
.setRevision(10),
DecryptedGroupChange.newBuilder()
.setRevision(10)
@@ -103,8 +103,7 @@ public final class GroupsV2Operations_decrypt_change_Test {
.setRole(Member.Role.DEFAULT)
.setProfileKey(ByteString.copyFrom(profileKey.serialize()))
.setJoinedAtRevision(10)
.setUuid(UuidUtil.toByteString(newMember)))
.addDeleteBannedMembers(DecryptedBannedMember.newBuilder().setUuid(UuidUtil.toByteString(newMember)).build()));
.setUuid(UuidUtil.toByteString(newMember))));
}
@Test
@@ -131,7 +130,7 @@ public final class GroupsV2Operations_decrypt_change_Test {
ProfileKey profileKey = newProfileKey();
GroupCandidate groupCandidate = groupCandidate(newMember, profileKey);
assertDecryption(groupOperations.createModifyGroupMembershipChange(Collections.singleton(groupCandidate), self)
assertDecryption(groupOperations.createModifyGroupMembershipChange(Collections.singleton(groupCandidate), Collections.emptySet(), self)
.setRevision(10),
DecryptedGroupChange.newBuilder()
.setRevision(10)
@@ -139,8 +138,7 @@ public final class GroupsV2Operations_decrypt_change_Test {
.setRole(Member.Role.DEFAULT)
.setProfileKey(ByteString.copyFrom(profileKey.serialize()))
.setJoinedAtRevision(10)
.setUuid(UuidUtil.toByteString(newMember)))
.addDeleteBannedMembers(DecryptedBannedMember.newBuilder().setUuid(UuidUtil.toByteString(newMember)).build()));
.setUuid(UuidUtil.toByteString(newMember))));
}
@Test(expected = InvalidGroupStateException.class)
@@ -222,7 +220,7 @@ public final class GroupsV2Operations_decrypt_change_Test {
UUID newMember = UUID.randomUUID();
GroupCandidate groupCandidate = groupCandidate(newMember);
assertDecryption(groupOperations.createModifyGroupMembershipChange(Collections.singleton(groupCandidate), self)
assertDecryption(groupOperations.createModifyGroupMembershipChange(Collections.singleton(groupCandidate), Collections.emptySet(), self)
.setRevision(13),
DecryptedGroupChange.newBuilder()
.setRevision(13)
@@ -230,8 +228,7 @@ public final class GroupsV2Operations_decrypt_change_Test {
.setAddedByUuid(UuidUtil.toByteString(self))
.setUuidCipherText(groupOperations.encryptUuid(newMember))
.setRole(Member.Role.DEFAULT)
.setUuid(UuidUtil.toByteString(newMember)))
.addDeleteBannedMembers(DecryptedBannedMember.newBuilder().setUuid(UuidUtil.toByteString(newMember)).build()));
.setUuid(UuidUtil.toByteString(newMember))));
}
@Test