From: AsamK Date: Fri, 7 Oct 2022 18:05:49 +0000 (+0200) Subject: Approve join requests instead of just adding the member X-Git-Tag: v0.11.4~26 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/1424a2980fcfcc9373fa4bb4611eff2e3fb18294 Approve join requests instead of just adding the member --- diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java index 90d5d726..a342064c 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java @@ -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()); diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/GroupV2Helper.java b/lib/src/main/java/org/asamk/signal/manager/helper/GroupV2Helper.java index dd75a8f2..09e3ff95 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/GroupV2Helper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/GroupV2Helper.java @@ -287,6 +287,17 @@ class GroupV2Helper { return ejectMembers(groupInfoV2, memberUuids); } + Pair approveJoinRequestMembers( + GroupInfoV2 groupInfoV2, Set 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 refuseJoinRequestMembers( GroupInfoV2 groupInfoV2, Set members ) throws IOException { @@ -524,6 +535,13 @@ class GroupV2Helper { return commitChange(groupInfoV2, groupOperations.createRemoveInvitationChange(uuidCipherTexts)); } + private Pair approveJoinRequest( + GroupInfoV2 groupInfoV2, Set uuids + ) throws IOException { + final GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2); + return commitChange(groupInfoV2, groupOperations.createApproveGroupJoinRequest(uuids)); + } + private Pair refuseJoinRequest( GroupInfoV2 groupInfoV2, Set uuids ) throws IOException {