X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/1058e33f1208e1ca284d3fd4760380d68093741f..7c7fc76a649678e9f77f1fcaeaaf4efdf9cc3cd9:/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java diff --git a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java index e6ec70d9..725df8b1 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java @@ -4,6 +4,8 @@ import org.asamk.Signal; import org.asamk.signal.BaseConfig; import org.asamk.signal.manager.Manager; import org.asamk.signal.manager.api.AttachmentInvalidException; +import org.asamk.signal.manager.api.CaptchaRejectedException; +import org.asamk.signal.manager.api.DeviceLimitExceededException; import org.asamk.signal.manager.api.DeviceLinkUrl; import org.asamk.signal.manager.api.GroupId; import org.asamk.signal.manager.api.GroupInviteLinkUrl; @@ -76,10 +78,13 @@ public class DbusSignalImpl implements Signal, AutoCloseable { private DbusReceiveMessageHandler dbusMessageHandler; private int subscriberCount; - private final static Logger logger = LoggerFactory.getLogger(DbusSignalImpl.class); + private static final Logger logger = LoggerFactory.getLogger(DbusSignalImpl.class); public DbusSignalImpl( - final Manager m, DBusConnection connection, final String objectPath, final boolean noReceiveOnStart + final Manager m, + DBusConnection connection, + final String objectPath, + final boolean noReceiveOnStart ) { this.m = m; this.connection = connection; @@ -159,8 +164,10 @@ public class DbusSignalImpl implements Signal, AutoCloseable { m.submitRateLimitRecaptchaChallenge(challenge, captcha); } catch (IOException e) { throw new Error.Failure("Submit challenge error: " + e.getMessage()); + } catch (CaptchaRejectedException e) { + throw new Error.Failure( + "Captcha rejected, it may be outdated, already used or solved from a different IP address."); } - } @Override @@ -186,7 +193,7 @@ public class DbusSignalImpl implements Signal, AutoCloseable { try { var deviceLinkUrl = DeviceLinkUrl.parseDeviceLinkUri(new URI(uri)); m.addDeviceLink(deviceLinkUrl); - } catch (IOException | InvalidDeviceLinkException e) { + } catch (IOException | InvalidDeviceLinkException | DeviceLimitExceededException e) { throw new Error.Failure(e.getClass().getSimpleName() + " Add device link failed. " + e.getMessage()); } catch (NotPrimaryDeviceException e) { throw new Error.Failure("This command doesn't work on linked devices."); @@ -225,19 +232,21 @@ public class DbusSignalImpl implements Signal, AutoCloseable { } @Override - public long sendMessage(final String message, final List attachments, final List recipients) { + public long sendMessage(final String messageText, final List attachments, final List recipients) { try { - final var results = m.sendMessage(new Message(message, - attachments, - List.of(), - Optional.empty(), - Optional.empty(), - List.of(), - Optional.empty(), - List.of()), - getSingleRecipientIdentifiers(recipients, m.getSelfNumber()).stream() - .map(RecipientIdentifier.class::cast) - .collect(Collectors.toSet())); + final var message = new Message(messageText, + attachments, + false, + List.of(), + Optional.empty(), + Optional.empty(), + List.of(), + Optional.empty(), + List.of()); + final var recipientIdentifiers = getSingleRecipientIdentifiers(recipients, m.getSelfNumber()).stream() + .map(RecipientIdentifier.class::cast) + .collect(Collectors.toSet()); + final var results = m.sendMessage(message, recipientIdentifiers, false); checkSendMessageResults(results); return results.timestamp(); @@ -253,16 +262,12 @@ public class DbusSignalImpl implements Signal, AutoCloseable { } @Override - public long sendRemoteDeleteMessage( - final long targetSentTimestamp, final String recipient - ) { + public long sendRemoteDeleteMessage(final long targetSentTimestamp, final String recipient) { return sendRemoteDeleteMessage(targetSentTimestamp, List.of(recipient)); } @Override - public long sendRemoteDeleteMessage( - final long targetSentTimestamp, final List recipients - ) { + public long sendRemoteDeleteMessage(final long targetSentTimestamp, final List recipients) { try { final var results = m.sendRemoteDeleteMessage(targetSentTimestamp, getSingleRecipientIdentifiers(recipients, m.getSelfNumber()).stream() @@ -318,7 +323,9 @@ public class DbusSignalImpl implements Signal, AutoCloseable { @Override public long sendPaymentNotification( - final byte[] receipt, final String note, final String recipient + final byte[] receipt, + final String note, + final String recipient ) throws Error.Failure { try { final var results = m.sendPaymentNotificationMessage(receipt, @@ -333,7 +340,8 @@ public class DbusSignalImpl implements Signal, AutoCloseable { @Override public void sendTyping( - final String recipient, final boolean stop + final String recipient, + final boolean stop ) throws Error.Failure, Error.GroupNotFound, Error.UntrustedIdentity { try { final var results = m.sendTypingMessage(stop ? TypingAction.STOP : TypingAction.START, @@ -350,7 +358,8 @@ public class DbusSignalImpl implements Signal, AutoCloseable { @Override public void sendReadReceipt( - final String recipient, final List messageIds + final String recipient, + final List messageIds ) throws Error.Failure, Error.UntrustedIdentity { final var results = m.sendReadReceipt(getSingleRecipientIdentifier(recipient, m.getSelfNumber()), messageIds); checkSendMessageResults(results); @@ -358,7 +367,8 @@ public class DbusSignalImpl implements Signal, AutoCloseable { @Override public void sendViewedReceipt( - final String recipient, final List messageIds + final String recipient, + final List messageIds ) throws Error.Failure, Error.UntrustedIdentity { final var results = m.sendViewedReceipt(getSingleRecipientIdentifier(recipient, m.getSelfNumber()), messageIds); checkSendMessageResults(results); @@ -384,17 +394,20 @@ public class DbusSignalImpl implements Signal, AutoCloseable { @Override public long sendNoteToSelfMessage( - final String message, final List attachments + final String messageText, + final List attachments ) throws Error.AttachmentInvalid, Error.Failure, Error.UntrustedIdentity { try { - final var results = m.sendMessage(new Message(message, + final var message = new Message(messageText, attachments, + false, List.of(), Optional.empty(), Optional.empty(), List.of(), Optional.empty(), - List.of()), Set.of(RecipientIdentifier.NoteToSelf.INSTANCE)); + List.of()); + final var results = m.sendMessage(message, Set.of(RecipientIdentifier.NoteToSelf.INSTANCE), false); checkSendMessageResults(results); return results.timestamp(); } catch (AttachmentInvalidException e) { @@ -429,16 +442,18 @@ public class DbusSignalImpl implements Signal, AutoCloseable { } @Override - public long sendGroupMessage(final String message, final List attachments, final byte[] groupId) { + public long sendGroupMessage(final String messageText, final List attachments, final byte[] groupId) { try { - var results = m.sendMessage(new Message(message, + final var message = new Message(messageText, attachments, + false, List.of(), Optional.empty(), Optional.empty(), List.of(), Optional.empty(), - List.of()), Set.of(getGroupRecipientIdentifier(groupId))); + List.of()); + var results = m.sendMessage(message, Set.of(getGroupRecipientIdentifier(groupId)), false); checkSendMessageResults(results); return results.timestamp(); } catch (IOException | InvalidStickerException e) { @@ -454,7 +469,8 @@ public class DbusSignalImpl implements Signal, AutoCloseable { @Override public void sendGroupTyping( - final byte[] groupId, final boolean stop + final byte[] groupId, + final boolean stop ) throws Error.Failure, Error.GroupNotFound, Error.UntrustedIdentity { try { final var results = m.sendTypingMessage(stop ? TypingAction.STOP : TypingAction.START, @@ -468,9 +484,7 @@ public class DbusSignalImpl implements Signal, AutoCloseable { } @Override - public long sendGroupRemoteDeleteMessage( - final long targetSentTimestamp, final byte[] groupId - ) { + public long sendGroupRemoteDeleteMessage(final long targetSentTimestamp, final byte[] groupId) { try { final var results = m.sendRemoteDeleteMessage(targetSentTimestamp, Set.of(getGroupRecipientIdentifier(groupId))); @@ -520,7 +534,7 @@ public class DbusSignalImpl implements Signal, AutoCloseable { @Override public void setContactName(final String number, final String name) { try { - m.setContactName(getSingleRecipientIdentifier(number, m.getSelfNumber()), name, ""); + m.setContactName(getSingleRecipientIdentifier(number, m.getSelfNumber()), name, "", null, null, null); } catch (NotPrimaryDeviceException e) { throw new Error.Failure("This command doesn't work on linked devices."); } catch (UnregisteredRecipientException e) { @@ -614,7 +628,9 @@ public class DbusSignalImpl implements Signal, AutoCloseable { @Override public byte[] createGroup( - final String name, final List members, final String avatar + final String name, + final List members, + final String avatar ) throws Error.AttachmentInvalid, Error.Failure, Error.InvalidNumber { return updateGroupInternal(new byte[0], name, members, avatar); } @@ -668,7 +684,7 @@ public class DbusSignalImpl implements Signal, AutoCloseable { @Override public boolean isRegistered(String number) { var result = isRegistered(List.of(number)); - return result.get(0); + return result.getFirst(); } @Override @@ -893,7 +909,8 @@ public class DbusSignalImpl implements Signal, AutoCloseable { } private static void checkGroupSendMessageResults( - long timestamp, Collection results + long timestamp, + Collection results ) throws DBusExecutionException { if (results.size() == 1) { checkSendMessageResult(timestamp, results.stream().findFirst().get()); @@ -920,7 +937,8 @@ public class DbusSignalImpl implements Signal, AutoCloseable { } private static Set getSingleRecipientIdentifiers( - final Collection recipientStrings, final String localNumber + final Collection recipientStrings, + final String localNumber ) throws DBusExecutionException { final var identifiers = new HashSet(); for (var recipientString : recipientStrings) { @@ -930,7 +948,8 @@ public class DbusSignalImpl implements Signal, AutoCloseable { } private static RecipientIdentifier.Single getSingleRecipientIdentifier( - final String recipientString, final String localNumber + final String recipientString, + final String localNumber ) throws DBusExecutionException { try { return RecipientIdentifier.Single.fromString(recipientString, localNumber); @@ -1099,7 +1118,7 @@ public class DbusSignalImpl implements Signal, AutoCloseable { List.of(new DbusProperty<>("Number", () -> identity.recipient().number().orElse("")), new DbusProperty<>("Uuid", () -> identity.recipient().uuid().map(UUID::toString).orElse("")), - new DbusProperty<>("Fingerprint", identity::getFingerprint), + new DbusProperty<>("Fingerprint", identity::fingerprint), new DbusProperty<>("SafetyNumber", identity::safetyNumber), new DbusProperty<>("ScannableSafetyNumber", identity::scannableSafetyNumber), new DbusProperty<>("TrustLevel", identity::trustLevel), @@ -1174,6 +1193,8 @@ public class DbusSignalImpl implements Signal, AutoCloseable { try { m.removeLinkedDevices(device.id()); updateDevices(); + } catch (NotPrimaryDeviceException e) { + throw new Error.Failure("This command doesn't work on linked devices."); } catch (IOException e) { throw new Error.Failure(e.getMessage()); } @@ -1184,7 +1205,7 @@ public class DbusSignalImpl implements Signal, AutoCloseable { throw new Error.Failure("Only the name of this device can be changed"); } try { - m.updateAccountAttributes(name); + m.updateAccountAttributes(name, null, null, null); // update device list updateDevices(); } catch (IOException e) {