+ public Pair<DecryptedGroup, GroupChange> resetGroupLinkPassword(GroupInfoV2 groupInfoV2) throws IOException {
+ final GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);
+ final var newGroupLinkPassword = GroupLinkPassword.createNew().serialize();
+ final var change = groupOperations.createModifyGroupLinkPasswordChange(newGroupLinkPassword);
+ return commitChange(groupInfoV2, change);
+ }
+
+ public Pair<DecryptedGroup, GroupChange> setGroupLinkState(
+ GroupInfoV2 groupInfoV2, GroupLinkState state
+ ) throws IOException {
+ final GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);
+
+ final var accessRequired = toAccessControl(state);
+ final var requiresNewPassword = state != GroupLinkState.DISABLED && groupInfoV2.getGroup()
+ .getInviteLinkPassword()
+ .isEmpty();
+
+ final var change = requiresNewPassword ? groupOperations.createModifyGroupLinkPasswordAndRightsChange(
+ GroupLinkPassword.createNew().serialize(),
+ accessRequired) : groupOperations.createChangeJoinByLinkRights(accessRequired);
+ return commitChange(groupInfoV2, change);
+ }
+