From 997b3c6a2a1f2e9a50fe579ac726677ea0d57d0c Mon Sep 17 00:00:00 2001 From: AsamK Date: Tue, 12 Oct 2021 20:49:41 +0200 Subject: [PATCH] Restrict blocking of group to master device --- lib/src/main/java/org/asamk/signal/manager/Manager.java | 2 +- lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java | 5 ++++- src/main/java/org/asamk/signal/commands/BlockCommand.java | 2 ++ src/main/java/org/asamk/signal/commands/UnblockCommand.java | 2 ++ src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java | 4 ++++ 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/src/main/java/org/asamk/signal/manager/Manager.java b/lib/src/main/java/org/asamk/signal/manager/Manager.java index f529b408..3cfeb4f7 100644 --- a/lib/src/main/java/org/asamk/signal/manager/Manager.java +++ b/lib/src/main/java/org/asamk/signal/manager/Manager.java @@ -184,7 +184,7 @@ public interface Manager extends Closeable { void setGroupBlocked( GroupId groupId, boolean blocked - ) throws GroupNotFoundException, IOException; + ) throws GroupNotFoundException, IOException, NotMasterDeviceException; void setExpirationTimer( RecipientIdentifier.Single recipient, int messageExpirationTimer diff --git a/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java index f88469ac..a14f2d1f 100644 --- a/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java @@ -714,7 +714,10 @@ public class ManagerImpl implements Manager { @Override public void setGroupBlocked( final GroupId groupId, final boolean blocked - ) throws GroupNotFoundException, IOException { + ) throws GroupNotFoundException, IOException, NotMasterDeviceException { + if (!account.isMasterDevice()) { + throw new NotMasterDeviceException(); + } groupHelper.setGroupBlocked(groupId, blocked); // TODO cycle our profile key syncHelper.sendBlockedList(); diff --git a/src/main/java/org/asamk/signal/commands/BlockCommand.java b/src/main/java/org/asamk/signal/commands/BlockCommand.java index 516224f5..1ec1036c 100644 --- a/src/main/java/org/asamk/signal/commands/BlockCommand.java +++ b/src/main/java/org/asamk/signal/commands/BlockCommand.java @@ -52,6 +52,8 @@ public class BlockCommand implements JsonRpcLocalCommand { for (var groupId : CommandUtil.getGroupIds(groupIdStrings)) { try { m.setGroupBlocked(groupId, true); + } catch (NotMasterDeviceException e) { + throw new UserErrorException("This command doesn't work on linked devices."); } catch (GroupNotFoundException e) { logger.warn("Group not found {}: {}", groupId.toBase64(), e.getMessage()); } catch (IOException e) { diff --git a/src/main/java/org/asamk/signal/commands/UnblockCommand.java b/src/main/java/org/asamk/signal/commands/UnblockCommand.java index 7cf209fa..53eab3b3 100644 --- a/src/main/java/org/asamk/signal/commands/UnblockCommand.java +++ b/src/main/java/org/asamk/signal/commands/UnblockCommand.java @@ -51,6 +51,8 @@ public class UnblockCommand implements JsonRpcLocalCommand { for (var groupId : CommandUtil.getGroupIds(groupIdStrings)) { try { m.setGroupBlocked(groupId, false); + } catch (NotMasterDeviceException e) { + throw new UserErrorException("This command doesn't work on linked devices."); } catch (GroupNotFoundException e) { logger.warn("Unknown group id: {}", groupId); } catch (IOException e) { diff --git a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java index 56ecdc55..2cf3c813 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java @@ -405,6 +405,8 @@ public class DbusSignalImpl implements Signal { public void setGroupBlocked(final byte[] groupId, final boolean blocked) { try { m.setGroupBlocked(getGroupId(groupId), blocked); + } catch (NotMasterDeviceException e) { + throw new Error.Failure("This command doesn't work on linked devices."); } catch (GroupNotFoundException e) { throw new Error.GroupNotFound(e.getMessage()); } catch (IOException e) { @@ -1060,6 +1062,8 @@ public class DbusSignalImpl implements Signal { private void setIsBlocked(final boolean isBlocked) { try { m.setGroupBlocked(groupId, isBlocked); + } catch (NotMasterDeviceException e) { + throw new Error.Failure("This command doesn't work on linked devices."); } catch (GroupNotFoundException e) { throw new Error.GroupNotFound(e.getMessage()); } catch (IOException e) { -- 2.50.1