diff --git a/lib/src/main/java/org/asamk/signal/manager/ProvisioningManager.java b/lib/src/main/java/org/asamk/signal/manager/ProvisioningManager.java index 938dc2a3..44a53e38 100644 --- a/lib/src/main/java/org/asamk/signal/manager/ProvisioningManager.java +++ b/lib/src/main/java/org/asamk/signal/manager/ProvisioningManager.java @@ -179,13 +179,13 @@ public class ProvisioningManager { try { signalAccount = SignalAccount.load(pathConfig.getDataPath(), number, false); } catch (IOException e) { - logger.debug("Account in use or failed to load.", e); + logger.error("Account in use or failed to load.", e); return false; } try (signalAccount) { if (signalAccount.isMasterDevice()) { - logger.debug("Account is a master device."); + logger.error("Account is a master device."); return false; } @@ -196,7 +196,7 @@ public class ProvisioningManager { return true; } - logger.debug("Account is still successfully linked."); + logger.error("Account is still successfully linked."); return false; } } diff --git a/src/main/java/org/asamk/Signal.java b/src/main/java/org/asamk/Signal.java index 0fe167a8..9ba16b04 100644 --- a/src/main/java/org/asamk/Signal.java +++ b/src/main/java/org/asamk/Signal.java @@ -7,7 +7,10 @@ import org.freedesktop.dbus.exceptions.DBusException; import org.freedesktop.dbus.exceptions.DBusExecutionException; import org.freedesktop.dbus.interfaces.DBusInterface; import org.freedesktop.dbus.messages.DBusSignal; +import org.whispersystems.libsignal.InvalidKeyException; +import java.io.IOException; +import java.net.URI; import java.util.ArrayList; import java.util.Base64; import java.util.List; diff --git a/src/main/java/org/asamk/signal/commands/ListDevicesCommand.java b/src/main/java/org/asamk/signal/commands/ListDevicesCommand.java index cb2019e2..2960a47d 100644 --- a/src/main/java/org/asamk/signal/commands/ListDevicesCommand.java +++ b/src/main/java/org/asamk/signal/commands/ListDevicesCommand.java @@ -44,6 +44,7 @@ public class ListDevicesCommand implements LocalCommand { for (var d : devices) { writer.println("- Device {}{}:", d.getId(), (d.getId() == m.getDeviceId() ? " (this device)" : "")); writer.indent(w -> { + w.println("Id: {}", d.getId()); w.println("Name: {}", d.getName()); w.println("Created: {}", DateUtils.formatTimestamp(d.getCreated())); w.println("Last seen: {}", DateUtils.formatTimestamp(d.getLastSeen())); diff --git a/src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java b/src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java index a2c7159d..d181f5d9 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java @@ -13,13 +13,16 @@ import org.asamk.signal.manager.UserAlreadyExists; import org.asamk.signal.manager.config.ServiceConfig; import org.asamk.signal.manager.config.ServiceEnvironment; import org.freedesktop.dbus.DBusPath; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.whispersystems.libsignal.InvalidKeyException; import org.whispersystems.libsignal.util.Pair; import org.whispersystems.signalservice.api.KeyBackupServicePinException; import org.whispersystems.signalservice.api.KeyBackupSystemNoDataException; import org.whispersystems.signalservice.api.push.exceptions.CaptchaRequiredException; +import org.whispersystems.signalservice.api.SignalServiceAccountManager; import java.io.IOException; -import java.lang.System.Logger; import java.net.URI; import java.util.ArrayList; import java.util.List; @@ -36,6 +39,11 @@ public class DbusSignalControlImpl implements org.asamk.SignalControl { private static Object stopTrigger = new Object(); private static String objectPath; + public static RegistrationManager registrationManager; + public static ProvisioningManager provisioningManager; + + private final static Logger logger = LoggerFactory.getLogger(DbusSignalControlImpl.class); + public DbusSignalControlImpl( final SignalCreator c, final Function newManagerRunner, final String objectPath ) { @@ -104,19 +112,21 @@ public class DbusSignalControlImpl implements org.asamk.SignalControl { public static void registerWithCaptcha( final String number, final boolean voiceVerification, final String captcha ) { - RegistrationManager registrationManager = null; try { - registrationManager = - RegistrationManager.init(number, App.dataPath, App.serviceEnvironment, BaseConfig.USER_AGENT); + try { + registrationManager = RegistrationManager.init(number, App.dataPath, App.serviceEnvironment, BaseConfig.USER_AGENT); + } catch (IOException e) { + e.printStackTrace(); + } registrationManager.register(voiceVerification, captcha); - System.out.println("registered"); } catch (CaptchaRequiredException e) { try { registrationManager.close(); } catch (IOException f) { throw new SignalControl.Error.Failure(f.getClass().getSimpleName() + " " + f.getMessage()); } - String message = captcha == null ? "Captcha required for verification." : "Invalid captcha given."; + String message = captcha == null ? "Captcha required for verification. Get one from https://signalcaptchas.org/registration/generate.html" + : "Invalid captcha given. Get one from https://signalcaptchas.org/registration/generate.html"; throw new SignalControl.Error.RequiresCaptcha(message); } catch (IOException e) { throw new SignalControl.Error.Failure(e.getClass().getSimpleName() + " " + e.getMessage()); @@ -129,12 +139,11 @@ public class DbusSignalControlImpl implements org.asamk.SignalControl { public static void verifyWithPin(final String number, final String verificationCode, final String pin) { - RegistrationManager registrationManager = null; try { - registrationManager = - RegistrationManager.init(number, App.dataPath, App.serviceEnvironment, BaseConfig.USER_AGENT); final Manager manager = registrationManager.verifyAccount(verificationCode, pin); - addManager(manager); + logger.info("Registration of " + number + " verified"); + manager.close(); + registrationManager.close(); } catch (IOException | KeyBackupSystemNoDataException | KeyBackupServicePinException e) { throw new SignalControl.Error.Failure(e.getClass().getSimpleName() + " " + e.getMessage()); } @@ -146,14 +155,15 @@ public class DbusSignalControlImpl implements org.asamk.SignalControl { public static String link(final String newDeviceName) { try { - final ProvisioningManager provisioningManager = - ProvisioningManager.init(App.dataPath, App.serviceEnvironment, BaseConfig.USER_AGENT); + provisioningManager = ProvisioningManager.init(App.dataPath, App.serviceEnvironment, BaseConfig.USER_AGENT); final URI deviceLinkUri = provisioningManager.getDeviceLinkUri(); new Thread(() -> { try { Manager manager = provisioningManager.finishDeviceLink(newDeviceName); - addManager(manager); + logger.info("Linking of " + newDeviceName + " successful"); + manager.close(); } catch (IOException | TimeoutException | UserAlreadyExists e) { + throw new SignalControl.Error.Failure(e.getClass().getSimpleName() + " " + e.getMessage()); } }).start(); return deviceLinkUri.toString(); diff --git a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java index e49553e2..b01da85c 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java @@ -28,6 +28,7 @@ import org.asamk.signal.util.ErrorUtils; import org.asamk.signal.util.Hex; import org.asamk.signal.util.Util; import org.freedesktop.dbus.exceptions.DBusExecutionException; +import org.whispersystems.libsignal.InvalidKeyException; import org.whispersystems.libsignal.util.Pair; import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.groupsv2.GroupLinkNotActiveException; @@ -37,6 +38,7 @@ import org.whispersystems.signalservice.api.util.InvalidNumberException; import java.io.File; import java.io.IOException; +import java.net.URI; import java.util.ArrayList; import java.util.Base64; import java.util.HashSet;