mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-24 13:08:46 +00:00
Fix bug preventing adding and inviting by phone number.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user