]> nmode's Git Repositories - signal-cli/commitdiff
Approve join requests instead of just adding the member
authorAsamK <asamk@gmx.de>
Fri, 7 Oct 2022 18:05:49 +0000 (20:05 +0200)
committerAsamK <asamk@gmx.de>
Fri, 7 Oct 2022 19:17:45 +0000 (21:17 +0200)
lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/GroupV2Helper.java

index 90d5d7261fd53113ffd67cc1e4564c3f01fefe5d..a342064ca506ab2cb42896e317f7d11b250f2c83 100644 (file)
@@ -593,8 +593,15 @@ public class GroupHelper {
         }
 
         if (members != null) {
+            final var requestingMembers = new HashSet<>(members);
+            requestingMembers.retainAll(group.getRequestingMembers());
+            if (requestingMembers.size() > 0) {
+                var groupGroupChangePair = groupV2Helper.approveJoinRequestMembers(group, requestingMembers);
+                result = sendUpdateGroupV2Message(group, groupGroupChangePair.first(), groupGroupChangePair.second());
+            }
             final var newMembers = new HashSet<>(members);
             newMembers.removeAll(group.getMembers());
+            newMembers.removeAll(group.getRequestingMembers());
             if (newMembers.size() > 0) {
                 var groupGroupChangePair = groupV2Helper.addMembers(group, newMembers);
                 result = sendUpdateGroupV2Message(group, groupGroupChangePair.first(), groupGroupChangePair.second());
index dd75a8f2bd701c58f337db1677a5c3e0308560b5..09e3ff955aa78efada8b09c0ec42a07040382186 100644 (file)
@@ -287,6 +287,17 @@ class GroupV2Helper {
         return ejectMembers(groupInfoV2, memberUuids);
     }
 
+    Pair<DecryptedGroup, GroupChange> approveJoinRequestMembers(
+            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 approveJoinRequest(groupInfoV2, memberUuids);
+    }
+
     Pair<DecryptedGroup, GroupChange> refuseJoinRequestMembers(
             GroupInfoV2 groupInfoV2, Set<RecipientId> members
     ) throws IOException {
@@ -524,6 +535,13 @@ class GroupV2Helper {
         return commitChange(groupInfoV2, groupOperations.createRemoveInvitationChange(uuidCipherTexts));
     }
 
+    private Pair<DecryptedGroup, GroupChange> approveJoinRequest(
+            GroupInfoV2 groupInfoV2, Set<UUID> uuids
+    ) throws IOException {
+        final GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);
+        return commitChange(groupInfoV2, groupOperations.createApproveGroupJoinRequest(uuids));
+    }
+
     private Pair<DecryptedGroup, GroupChange> refuseJoinRequest(
             GroupInfoV2 groupInfoV2, Set<UUID> uuids
     ) throws IOException {