From da1bb918bf4772239c41286ac063cbc8312e86a4 Mon Sep 17 00:00:00 2001 From: John Freed Date: Tue, 17 Aug 2021 16:12:28 +0200 Subject: [PATCH] implement Dbus addDevice and removeDevice methods update documentation --- man/signal-cli-dbus.5.adoc | 12 ++++++++--- src/main/java/org/asamk/Signal.java | 5 +++++ .../signal/dbus/DbusSignalControlImpl.java | 3 ++- .../org/asamk/signal/dbus/DbusSignalImpl.java | 21 +++++++++++++++++++ 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/man/signal-cli-dbus.5.adoc b/man/signal-cli-dbus.5.adoc index 2a4c7eff..52991d4a 100755 --- a/man/signal-cli-dbus.5.adoc +++ b/man/signal-cli-dbus.5.adoc @@ -268,9 +268,6 @@ isRegistered(numbers) -> results:: * result : true=number is registered, false=number is not registered * results : Boolean array of results -listDevices() -> devices:: -* devices : String array of linked devices - listIdentity(number) -> results:: * number : Phone number * results : Array of elements, each consisting of four strings: trust_level, date_added, fingerprint, safety_number @@ -297,6 +294,15 @@ link(newDeviceName) -> deviceLinkUri:: * newDeviceName : Name to give new device (defaults to "cli" if no name is given) * deviceLinkUri : URI of newly linked device +addDevice(deviceUri) -> <>:: +* deviceUri : URI in the form of tsdevice:/?uuid=... Normally received from Signal desktop or smartphone app + +listDevices() -> devices:: +* devices : String array of linked devices + +removeDevice(deviceId) -> <>:: +* deviceId : Device ID to remove, obtained from listDevices() command + register(number, voiceVerification) -> <>:: * number : Phone number * voiceVerification : true = use voice verification; false = use SMS verification diff --git a/src/main/java/org/asamk/Signal.java b/src/main/java/org/asamk/Signal.java index 9ba16b04..efcfef3b 100644 --- a/src/main/java/org/asamk/Signal.java +++ b/src/main/java/org/asamk/Signal.java @@ -11,6 +11,7 @@ import org.whispersystems.libsignal.InvalidKeyException; import java.io.IOException; import java.net.URI; +import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Base64; import java.util.List; @@ -139,6 +140,10 @@ public interface Signal extends DBusInterface { String link(String newDeviceName) throws Error.Failure; + void addDevice(String uri) throws Error.Failure; + + void removeDevice(int deviceId) throws Error.Failure; + void register( String number, boolean voiceVerification ) throws Error.Failure, Error.InvalidNumber, SignalControl.Error.RequiresCaptcha; diff --git a/src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java b/src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java index 48b3767e..ac1921c0 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java @@ -6,6 +6,7 @@ import org.asamk.signal.BaseConfig; import org.asamk.signal.DbusConfig; import org.asamk.signal.commands.SignalCreator; import org.asamk.signal.commands.exceptions.IOErrorException; +import org.asamk.signal.commands.exceptions.UnexpectedErrorException; import org.asamk.signal.commands.exceptions.UserErrorException; import org.asamk.signal.manager.Manager; import org.asamk.signal.manager.PathConfig; @@ -26,6 +27,7 @@ import org.whispersystems.signalservice.api.SignalServiceAccountManager; import java.io.IOException; import java.net.URI; +import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeoutException; @@ -186,7 +188,6 @@ public class DbusSignalControlImpl implements org.asamk.SignalControl { return BaseConfig.PROJECT_VERSION; } - @Override public List listAccounts() { synchronized (receiveThreads) { diff --git a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java index b01da85c..93940d89 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java @@ -39,6 +39,7 @@ import org.whispersystems.signalservice.api.util.InvalidNumberException; import java.io.File; import java.io.IOException; import java.net.URI; +import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Base64; import java.util.HashSet; @@ -699,6 +700,26 @@ public class DbusSignalImpl implements Signal { return DbusSignalControlImpl.link(newDeviceName); } + @Override + public void addDevice(String uri) { + try { + m.addDeviceLink(new URI(uri)); + } catch (IOException | InvalidKeyException e) { + throw new Error.Failure(e.getClass().getSimpleName() + "Add device link failed. " + e.getMessage()); + } catch (URISyntaxException e) { + throw new Error.Failure(e.getClass().getSimpleName() + "Device link uri has invalid format: " + e.getMessage()); + } + } + + @Override + public void removeDevice(int deviceId) { + try { + m.removeLinkedDevices(deviceId); + } catch (IOException e) { + throw new Error.Failure(e.getClass().getSimpleName() + "Error while removing device: " + e.getMessage()); + } + } + @Override public void register( String number, boolean voiceVerification