]> nmode's Git Repositories - signal-cli/commitdiff
Implement refuse group join requests
authorAsamK <asamk@gmx.de>
Fri, 7 Oct 2022 17:49:43 +0000 (19:49 +0200)
committerAsamK <asamk@gmx.de>
Fri, 7 Oct 2022 17:49:43 +0000 (19:49 +0200)
lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/GroupV2Helper.java

index 3f8740d92707184d97a7fe5c2b2f72843e8abcd1..be57d19b8be2964935bc50bed8fc878a65aede64 100644 (file)
@@ -618,6 +618,12 @@ public class GroupHelper {
                 var groupGroupChangePair = groupV2Helper.revokeInvitedMembers(group, pendingRemoveMembers);
                 result = sendUpdateGroupV2Message(group, groupGroupChangePair.first(), groupGroupChangePair.second());
             }
                 var groupGroupChangePair = groupV2Helper.revokeInvitedMembers(group, pendingRemoveMembers);
                 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) {
index b59eddcc2cf9e834cf921d9fd81fb1e7c63dcce5..dd75a8f2bd701c58f337db1677a5c3e0308560b5 100644 (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(
             GroupInfoV2 groupInfoV2, Set<RecipientId> members
     ) throws IOException {
     Pair<DecryptedGroup, GroupChange> revokeInvitedMembers(
             GroupInfoV2 groupInfoV2, Set<RecipientId> members
     ) 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(
             GroupInfoV2 groupInfoV2, Set<UUID> uuids
     ) throws IOException {
     private Pair<DecryptedGroup, GroupChange> ejectMembers(
             GroupInfoV2 groupInfoV2, Set<UUID> uuids
     ) throws IOException {