Implement refuse group join requests

This commit is contained in:
AsamK 2022-10-07 19:49:43 +02:00
parent 489fb2ac22
commit c9c8af42c2
2 changed files with 24 additions and 0 deletions

View file

@ -618,6 +618,12 @@ public class GroupHelper {
var groupGroupChangePair = groupV2Helper.revokeInvitedMembers(group, pendingRemoveMembers); var groupGroupChangePair = groupV2Helper.revokeInvitedMembers(group, pendingRemoveMembers);
result = sendUpdateGroupV2Message(group, groupGroupChangePair.first(), groupGroupChangePair.second()); result = sendUpdateGroupV2Message(group, groupGroupChangePair.first(), groupGroupChangePair.second());
} }
var requestingRemoveMembers = new HashSet<>(removeMembers);
requestingRemoveMembers.retainAll(group.getRequestingMembers());
if (requestingRemoveMembers.size() > 0) {
var groupGroupChangePair = groupV2Helper.refuseJoinRequestMembers(group, requestingRemoveMembers);
result = sendUpdateGroupV2Message(group, groupGroupChangePair.first(), groupGroupChangePair.second());
}
} }
if (admins != null) { if (admins != null) {

View file

@ -287,6 +287,17 @@ class GroupV2Helper {
return ejectMembers(groupInfoV2, memberUuids); return ejectMembers(groupInfoV2, memberUuids);
} }
Pair<DecryptedGroup, GroupChange> refuseJoinRequestMembers(
GroupInfoV2 groupInfoV2, Set<RecipientId> members
) throws IOException {
final var memberUuids = members.stream()
.map(context.getRecipientHelper()::resolveSignalServiceAddress)
.map(SignalServiceAddress::getServiceId)
.map(ServiceId::uuid)
.collect(Collectors.toSet());
return refuseJoinRequest(groupInfoV2, memberUuids);
}
Pair<DecryptedGroup, GroupChange> revokeInvitedMembers( Pair<DecryptedGroup, GroupChange> revokeInvitedMembers(
GroupInfoV2 groupInfoV2, Set<RecipientId> members GroupInfoV2 groupInfoV2, Set<RecipientId> members
) throws IOException { ) throws IOException {
@ -513,6 +524,13 @@ class GroupV2Helper {
return commitChange(groupInfoV2, groupOperations.createRemoveInvitationChange(uuidCipherTexts)); return commitChange(groupInfoV2, groupOperations.createRemoveInvitationChange(uuidCipherTexts));
} }
private Pair<DecryptedGroup, GroupChange> refuseJoinRequest(
GroupInfoV2 groupInfoV2, Set<UUID> uuids
) throws IOException {
final GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);
return commitChange(groupInfoV2, groupOperations.createRefuseGroupJoinRequest(uuids, false, List.of()));
}
private Pair<DecryptedGroup, GroupChange> ejectMembers( private Pair<DecryptedGroup, GroupChange> ejectMembers(
GroupInfoV2 groupInfoV2, Set<UUID> uuids GroupInfoV2 groupInfoV2, Set<UUID> uuids
) throws IOException { ) throws IOException {