]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/helper/GroupV2Helper.java
Implement setting group permissions
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / helper / GroupV2Helper.java
index b8e7566f28c3287ac67aff06e191cf0e9a6bbe66..06bfdcdac84c7eb0282f551e98d6de82a8f67cfd 100644 (file)
@@ -4,6 +4,7 @@ import com.google.protobuf.InvalidProtocolBufferException;
 
 import org.asamk.signal.manager.groups.GroupLinkPassword;
 import org.asamk.signal.manager.groups.GroupLinkState;
+import org.asamk.signal.manager.groups.GroupPermission;
 import org.asamk.signal.manager.groups.GroupUtils;
 import org.asamk.signal.manager.storage.groups.GroupInfoV2;
 import org.asamk.signal.manager.storage.recipients.Profile;
@@ -314,6 +315,26 @@ public class GroupV2Helper {
         return commitChange(groupInfoV2, change);
     }
 
+    public Pair<DecryptedGroup, GroupChange> setEditDetailsPermission(
+            GroupInfoV2 groupInfoV2, GroupPermission permission
+    ) throws IOException {
+        final GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);
+
+        final var accessRequired = toAccessControl(permission);
+        final var change = groupOperations.createChangeAttributesRights(accessRequired);
+        return commitChange(groupInfoV2, change);
+    }
+
+    public Pair<DecryptedGroup, GroupChange> setAddMemberPermission(
+            GroupInfoV2 groupInfoV2, GroupPermission permission
+    ) throws IOException {
+        final GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);
+
+        final var accessRequired = toAccessControl(permission);
+        final var change = groupOperations.createChangeMembershipRights(accessRequired);
+        return commitChange(groupInfoV2, change);
+    }
+
     public GroupChange joinGroup(
             GroupMasterKey groupMasterKey,
             GroupLinkPassword groupLinkPassword,
@@ -390,6 +411,17 @@ public class GroupV2Helper {
         }
     }
 
+    private AccessControl.AccessRequired toAccessControl(final GroupPermission permission) {
+        switch (permission) {
+            case EVERY_MEMBER:
+                return AccessControl.AccessRequired.MEMBER;
+            case ONLY_ADMINS:
+                return AccessControl.AccessRequired.ADMINISTRATOR;
+            default:
+                throw new AssertionError();
+        }
+    }
+
     private GroupsV2Operations.GroupOperations getGroupOperations(final GroupInfoV2 groupInfoV2) {
         final var groupSecretParams = GroupSecretParams.deriveFromMasterKey(groupInfoV2.getMasterKey());
         return groupsV2Operations.forGroup(groupSecretParams);